From 246979d08e971b18ef4dba3db30fbb3bed0b4596 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Wed, 18 Sep 2019 10:34:33 +0200 Subject: [PATCH] Added logging and making kafka tests less brittle --- .../kafka/StubRunnerKafkaConfiguration.java | 14 ++++++++++++++ .../kafka/ContractVerifierKafkaConfiguration.java | 12 ++++++++++-- .../messaging/kafka/KafkaStubRunnerSpec.groovy | 8 ++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/kafka/StubRunnerKafkaConfiguration.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/kafka/StubRunnerKafkaConfiguration.java index 47e76d9675..64fab83f3b 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/kafka/StubRunnerKafkaConfiguration.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/kafka/StubRunnerKafkaConfiguration.java @@ -22,6 +22,9 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; @@ -60,11 +63,16 @@ import org.springframework.util.StringUtils; @AutoConfigureBefore(ContractVerifierKafkaConfiguration.class) public class StubRunnerKafkaConfiguration { + private static final Log log = LogFactory.getLog(StubRunnerKafkaConfiguration.class); + @Bean @ConditionalOnMissingBean @ConditionalOnProperty(name = "stubrunner.kafka.initializer.enabled", havingValue = "true", matchIfMissing = true) KafkaStubMessagesInitializer stubRunnerKafkaStubMessagesInitializer() { + if (log.isDebugEnabled()) { + log.debug("Registering a noop kafka messages initializer"); + } return (broker, kafkaProperties) -> new HashMap<>(); } @@ -100,6 +108,9 @@ public class StubRunnerKafkaConfiguration { matchingContracts, beanFactory); StubRunnerKafkaRouter listener = (StubRunnerKafkaRouter) beanFactory .initializeBean(router, flowName); + if (log.isDebugEnabled()) { + log.debug("Initialized kafka router with name [" + flowName + "]"); + } beanFactory.registerSingleton(flowName, listener); registerContainers(beanFactory, matchingContracts, flowName, listener); } @@ -127,6 +138,9 @@ public class StubRunnerKafkaConfiguration { Object initializedContainer = beanFactory.initializeBean(container, containerName); beanFactory.registerSingleton(containerName, initializedContainer); + if (log.isDebugEnabled()) { + log.debug("Initialized kafka message container with name [" + containerName + "] listening to destination [" + destination + "]"); + } } } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/kafka/ContractVerifierKafkaConfiguration.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/kafka/ContractVerifierKafkaConfiguration.java index 500fd43a5a..9fedefea66 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/kafka/ContractVerifierKafkaConfiguration.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/kafka/ContractVerifierKafkaConfiguration.java @@ -16,6 +16,9 @@ package org.springframework.cloud.contract.verifier.messaging.kafka; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -38,13 +41,15 @@ import org.springframework.messaging.Message; */ @Configuration @ConditionalOnClass({ KafkaTemplate.class, EmbeddedKafkaBroker.class }) -@ConditionalOnProperty(name = "stubrunner.kafka.enabled", havingValue = "true", - matchIfMissing = true) +@ConditionalOnProperty(name = "stubrunner.kafka.enabled", havingValue = "true", matchIfMissing = true) @AutoConfigureBefore({ ContractVerifierIntegrationConfiguration.class, NoOpContractVerifierAutoConfiguration.class }) @ConditionalOnBean(EmbeddedKafkaBroker.class) public class ContractVerifierKafkaConfiguration { + private static final Log log = LogFactory + .getLog(ContractVerifierKafkaConfiguration.class); + @Bean @ConditionalOnMissingBean MessageVerifier> contractVerifierKafkaMessageExchange( @@ -56,6 +61,9 @@ public class ContractVerifierKafkaConfiguration { @Bean @ConditionalOnMissingBean KafkaStubMessagesInitializer contractVerifierKafkaStubMessagesInitializer() { + if (log.isDebugEnabled()) { + log.debug("Registering contract verifier stub messages initializer"); + } return new ContractVerifierKafkaStubMessagesInitializer(); } diff --git a/tests/spring-cloud-contract-stub-runner-kafka/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/kafka/KafkaStubRunnerSpec.groovy b/tests/spring-cloud-contract-stub-runner-kafka/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/kafka/KafkaStubRunnerSpec.groovy index 34bdee670c..89b218efe8 100644 --- a/tests/spring-cloud-contract-stub-runner-kafka/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/kafka/KafkaStubRunnerSpec.groovy +++ b/tests/spring-cloud-contract-stub-runner-kafka/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/kafka/KafkaStubRunnerSpec.groovy @@ -21,8 +21,10 @@ import java.util.concurrent.TimeUnit import groovy.json.JsonOutput import groovy.json.JsonSlurper +import groovy.util.logging.Commons import spock.lang.IgnoreIf import spock.lang.Specification +import spock.lang.Stepwise import spock.util.concurrent.PollingConditions import org.springframework.beans.factory.annotation.Autowired @@ -54,6 +56,8 @@ import org.springframework.test.context.ContextConfiguration @AutoConfigureStubRunner @IgnoreIf({ os.windows }) @EmbeddedKafka(topics = ["input", "output", "delete"]) +@Commons +@Stepwise class KafkaStubRunnerSpec extends Specification { @Autowired @@ -79,15 +83,19 @@ class KafkaStubRunnerSpec extends Specification { def 'should download the stub and register a route for it'() { when: + log.info("Sending the message") // tag::client_send[] Message message = MessageBuilder.createMessage(new BookReturned('foo'), new MessageHeaders([sample: "header",])) kafkaTemplate.setDefaultTopic('input') kafkaTemplate.send(message) // end::client_send[] + log.info("Message sent") then: + log.info("Receiving the message") // tag::client_receive[] Message receivedMessage = receiveFromOutput() // end::client_receive[] + log.info("Message received [" + receivedMessage + "]") and: await.eventually { // tag::client_receive_message[]