From 6f3c3f850b7704f21b8dffeac696a7c49139a969 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathias=20D=C3=BCsterh=C3=B6ft?= Date: Sun, 6 Nov 2016 22:34:05 +0100 Subject: [PATCH] Enable amqp integration by property (#131) Fixes #133 --- .../amqp/ContractVerifierAmqpAutoConfiguration.java | 7 +++---- ...abbitMockConnectionFactoryAutoConfiguration.java | 13 +++---------- .../com/example/AmqpMessagingApplicationSpec.groovy | 6 +++--- .../README.adoc | 6 +++--- .../src/test/resources/application.yml | 7 +++++-- 5 files changed, 17 insertions(+), 22 deletions(-) diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/amqp/ContractVerifierAmqpAutoConfiguration.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/amqp/ContractVerifierAmqpAutoConfiguration.java index 5b049800a1..d42e63d0d3 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/amqp/ContractVerifierAmqpAutoConfiguration.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/amqp/ContractVerifierAmqpAutoConfiguration.java @@ -20,7 +20,6 @@ import static java.util.Collections.emptyList; import java.util.List; -import org.mockito.Mockito; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.core.RabbitTemplate; @@ -34,7 +33,7 @@ import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.cloud.contract.verifier.messaging.MessageVerifier; import org.springframework.cloud.contract.verifier.messaging.integration.ContractVerifierIntegrationConfiguration; @@ -51,8 +50,8 @@ import org.springframework.context.annotation.Configuration; * @since 1.0.2 */ @Configuration -@ConditionalOnClass({Message.class, RabbitTemplate.class, Mockito.class}) -@ConditionalOnMissingClass("org.springframework.integration.core.MessageSource") +@ConditionalOnClass(RabbitTemplate.class) +@ConditionalOnProperty(name="stubrunner.amqp.enabled", havingValue="true") @AutoConfigureBefore(ContractVerifierIntegrationConfiguration.class) @AutoConfigureAfter(ContractVerifierStreamAutoConfiguration.class) public class ContractVerifierAmqpAutoConfiguration { diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/amqp/RabbitMockConnectionFactoryAutoConfiguration.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/amqp/RabbitMockConnectionFactoryAutoConfiguration.java index 9f33d5b49d..e54f530953 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/amqp/RabbitMockConnectionFactoryAutoConfiguration.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/amqp/RabbitMockConnectionFactoryAutoConfiguration.java @@ -5,14 +5,9 @@ import static org.mockito.Mockito.when; import java.util.concurrent.ExecutorService; -import org.mockito.Mockito; -import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; import org.springframework.amqp.rabbit.connection.ConnectionFactory; -import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -29,10 +24,8 @@ import com.rabbitmq.client.Connection; * @since 1.0.2 */ @Configuration -@ConditionalOnClass({Message.class, RabbitTemplate.class, Mockito.class}) -@ConditionalOnMissingClass("org.springframework.integration.core.MessageSource") -@AutoConfigureAfter(ContractVerifierAmqpAutoConfiguration.class) -@ConditionalOnProperty(value = "verifier.amqp.mockConnection", havingValue = "true", matchIfMissing = true) +@ConditionalOnBean(ContractVerifierAmqpAutoConfiguration.class) +@ConditionalOnProperty(value = "stubrunner.amqp.mockConnection", havingValue = "true", matchIfMissing = true) public class RabbitMockConnectionFactoryAutoConfiguration { @Bean diff --git a/tests/samples-messaging-amqp/src/test/groovy/com/example/AmqpMessagingApplicationSpec.groovy b/tests/samples-messaging-amqp/src/test/groovy/com/example/AmqpMessagingApplicationSpec.groovy index 19f8ce482a..a05c495dd3 100644 --- a/tests/samples-messaging-amqp/src/test/groovy/com/example/AmqpMessagingApplicationSpec.groovy +++ b/tests/samples-messaging-amqp/src/test/groovy/com/example/AmqpMessagingApplicationSpec.groovy @@ -20,21 +20,21 @@ import com.jayway.jsonpath.DocumentContext import com.jayway.jsonpath.JsonPath import com.toomuchcoding.jsonassert.JsonAssertion import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.IntegrationTest import org.springframework.boot.test.context.SpringBootContextLoader import org.springframework.cloud.contract.spec.Contract import org.springframework.cloud.contract.verifier.messaging.boot.AutoConfigureMessageVerifier import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessaging import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierObjectMapper -import org.springframework.test.annotation.DirtiesContext import org.springframework.test.context.ContextConfiguration import spock.lang.Specification import javax.inject.Inject // Context configuration would end up in base class @ContextConfiguration(classes = [AmqpMessagingApplication], loader = SpringBootContextLoader) -@DirtiesContext @AutoConfigureMessageVerifier -public class AmqpMessagingApplicationSpec extends Specification { +@IntegrationTest("stubrunner.amqp.enabled=true") +class AmqpMessagingApplicationSpec extends Specification { // ALL CASES @Inject ContractVerifierMessaging contractVerifierMessaging diff --git a/tests/spring-cloud-contract-stub-runner-amqp/README.adoc b/tests/spring-cloud-contract-stub-runner-amqp/README.adoc index 8118910f37..0c8a65d5fa 100644 --- a/tests/spring-cloud-contract-stub-runner-amqp/README.adoc +++ b/tests/spring-cloud-contract-stub-runner-amqp/README.adoc @@ -18,7 +18,7 @@ The message is triggered to all matching message listeners. ==== Adding it to the project -It's enough to have both Spring AMQP and Spring Cloud Contract Stub Runner on the classpath. +It's enough to have both Spring AMQP and Spring Cloud Contract Stub Runner on the classpath and set the property `stubrunner.amqp.enabled=true`. Remember to annotate your test class with `@AutoConfigureMessageVerifier`. ==== Examples @@ -102,11 +102,11 @@ NOTE: The message is directly handed over to the `onMessage` method of the `Mess In order to avoid that Spring AMQP is trying to connect to a running broker during our tests we configure a mock `ConnectionFactory`. -To disable the mocked ConnectionFactory set the property `verifier.amqp.mockConnection=false` +To disable the mocked ConnectionFactory set the property `stubrunner.amqp.mockConnection=false` [source,yaml] ---- -verifier: +stubrunner: amqp: mockConnection: false ---- diff --git a/tests/spring-cloud-contract-stub-runner-amqp/src/test/resources/application.yml b/tests/spring-cloud-contract-stub-runner-amqp/src/test/resources/application.yml index 4a5df9496a..fc2c41f064 100644 --- a/tests/spring-cloud-contract-stub-runner-amqp/src/test/resources/application.yml +++ b/tests/spring-cloud-contract-stub-runner-amqp/src/test/resources/application.yml @@ -1,2 +1,5 @@ -stubrunner.repositoryRoot: classpath:m2repo/repository/ -stubrunner.ids: org.springframework.cloud.contract.verifier.stubs.amqp:spring-cloud-contract-amqp-test:0.4.0-SNAPSHOT:stubs \ No newline at end of file +stubrunner: + repositoryRoot: classpath:m2repo/repository/ + ids: org.springframework.cloud.contract.verifier.stubs.amqp:spring-cloud-contract-amqp-test:0.4.0-SNAPSHOT:stubs + amqp: + enabled: true \ No newline at end of file