Almost there

This commit is contained in:
Marcin Grzejszczak
2017-10-11 12:33:13 +02:00
parent 7756921cdb
commit 7242649f9c
4 changed files with 40 additions and 16 deletions

View File

@@ -16,9 +16,9 @@
package org.springframework.cloud.contract.stubrunner.server
import io.restassured.module.mockmvc.RestAssuredMockMvc
import groovy.json.JsonSlurper
import org.junit.Ignore
import io.restassured.module.mockmvc.RestAssuredMockMvc
import spock.lang.Specification
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootContextLoader
@@ -26,13 +26,9 @@ import org.springframework.boot.test.context.SpringBootTest
import org.springframework.cloud.contract.stubrunner.StubRunning
import org.springframework.test.context.ActiveProfiles
import org.springframework.test.context.ContextConfiguration
import spock.lang.Specification
/**
* @author Marcin Grzejszczak
*/
// TODO: Boot 2.0
@Ignore
// tag::boot_usage[]
@ContextConfiguration(classes = StubRunnerBoot, loader = SpringBootContextLoader)
@SpringBootTest(properties = "spring.cloud.zookeeper.enabled=false")
@@ -59,7 +55,7 @@ class StubRunnerBootSpec extends Specification {
def response = RestAssuredMockMvc.get("/stubs/${stubId}")
then:
response.statusCode == 200
response.body.as(Integer) > 0
Integer.valueOf(response.body.asString()) > 0
where:
stubId << ['org.springframework.cloud.contract.verifier.stubs:bootService:+:stubs',
'org.springframework.cloud.contract.verifier.stubs:bootService:0.0.1-SNAPSHOT:stubs',

View File

@@ -26,7 +26,6 @@ import org.springframework.boot.test.web.client.TestRestTemplate
import org.springframework.cloud.contract.stubrunner.StubFinder
import org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier
import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierObjectMapper
import org.springframework.cloud.stream.annotation.EnableBinding
import org.springframework.cloud.stream.messaging.Sink
import org.springframework.context.annotation.Configuration
@@ -35,7 +34,6 @@ import org.springframework.http.ResponseEntity
import org.springframework.messaging.Message
import org.springframework.test.annotation.DirtiesContext
import org.springframework.test.context.ContextConfiguration
/**
* @author Marcin Grzejszczak
*/
@@ -74,7 +72,7 @@ class StubRunnerStubsPerConsumerSpec extends Specification {
Message<?> receivedMessage = messaging.receive('output')
and:
receivedMessage != null
new ContractVerifierObjectMapper().writeValueAsString(receivedMessage.payload) == "\"{\\\"bookName\\\":\\\"foo_for_bar\\\"}\""
receivedMessage.payload == '''{"bookName":"foo_for_bar"}'''
receivedMessage.headers.get('BOOK-NAME') == 'foo_for_bar'
}

View File

@@ -26,7 +26,6 @@ import org.springframework.boot.test.web.client.TestRestTemplate
import org.springframework.cloud.contract.stubrunner.StubFinder
import org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier
import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierObjectMapper
import org.springframework.cloud.stream.annotation.EnableBinding
import org.springframework.cloud.stream.messaging.Sink
import org.springframework.context.annotation.Configuration
@@ -71,10 +70,10 @@ class StubRunnerStubsPerConsumerWithConsumerNameSpec extends Specification {
when:
stubFinder.trigger('return_book_for_foo')
then:
Message<String> receivedMessage = messaging.receive('output')
Message<?> receivedMessage = messaging.receive('output')
and:
receivedMessage != null
new ContractVerifierObjectMapper().writeValueAsString(receivedMessage.payload) == "\"{\\\"bookName\\\":\\\"foo_for_foo\\\"}\""
receivedMessage.payload == '''{"bookName":"foo_for_foo"}'''
receivedMessage.headers.get('BOOK-NAME') == 'foo_for_foo'
}

View File

@@ -19,9 +19,10 @@ package org.springframework.cloud.contract.verifier.messaging.stream;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier;
import org.springframework.cloud.stream.config.BindingProperties;
import org.springframework.cloud.stream.config.BindingServiceProperties;
@@ -29,6 +30,10 @@ import org.springframework.cloud.stream.test.binder.MessageCollector;
import org.springframework.context.ApplicationContext;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.converter.DefaultContentTypeResolver;
import org.springframework.messaging.converter.MappingJackson2MessageConverter;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.util.MimeTypeUtils;
/**
* @author Marcin Grzejszczak
@@ -41,7 +46,6 @@ public class StreamStubMessages implements MessageVerifier<Message<?>> {
private final MessageCollector messageCollector;
private final ContractVerifierStreamMessageBuilder builder = new ContractVerifierStreamMessageBuilder();
@Autowired
public StreamStubMessages(ApplicationContext context) {
this.context = context;
this.messageCollector = context.getBean(MessageCollector.class);
@@ -71,7 +75,12 @@ public class StreamStubMessages implements MessageVerifier<Message<?>> {
try {
MessageChannel messageChannel = this.context
.getBean(resolvedDestination(destination), MessageChannel.class);
return this.messageCollector.forChannel(messageChannel).poll(timeout, timeUnit);
Message<?> message = this.messageCollector.forChannel(messageChannel).poll(timeout, timeUnit);
if (message == null) {
return message;
}
Object fromMessage = converter().fromMessage(message, String.class);
return MessageBuilder.createMessage(fromMessage, message.getHeaders());
}
catch (Exception e) {
log.error("Exception occurred while trying to read a message from "
@@ -110,4 +119,26 @@ public class StreamStubMessages implements MessageVerifier<Message<?>> {
return receive(destination, 5, TimeUnit.SECONDS);
}
private MappingJackson2MessageConverter converter() {
ObjectMapper mapper = null;
try {
mapper = this.context.getBean(ObjectMapper.class);
} catch (NoSuchBeanDefinitionException e) {
}
MappingJackson2MessageConverter converter = createJacksonConverter();
if (mapper != null) {
converter.setObjectMapper(mapper);
}
return converter;
}
protected MappingJackson2MessageConverter createJacksonConverter() {
DefaultContentTypeResolver resolver = new DefaultContentTypeResolver();
resolver.setDefaultMimeType(MimeTypeUtils.APPLICATION_JSON);
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setContentTypeResolver(resolver);
return converter;
}
}