From 04ea3c6b7903e783ec6847c0f8722a22a5d7e0b8 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Mon, 4 Jan 2016 15:33:47 +0100 Subject: [PATCH] Refactored tests for STOMP --- spring-cloud-sleuth-core/pom.xml | 1 - ...ceStompMessageChannelInterceptorTests.java | 144 +++++++++++------- ...extPropagationChannelInterceptorTests.java | 1 - 3 files changed, 89 insertions(+), 57 deletions(-) diff --git a/spring-cloud-sleuth-core/pom.xml b/spring-cloud-sleuth-core/pom.xml index 5ed191851..70abd577a 100644 --- a/spring-cloud-sleuth-core/pom.xml +++ b/spring-cloud-sleuth-core/pom.xml @@ -132,7 +132,6 @@ org.springframework spring-messaging - 4.2.3.RELEASE diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageChannelInterceptorTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageChannelInterceptorTests.java index 3bc2d8f21..148eb0637 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageChannelInterceptorTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageChannelInterceptorTests.java @@ -1,11 +1,13 @@ package org.springframework.cloud.sleuth.instrument.integration; +import static org.assertj.core.api.Assertions.registerCustomDateFormat; +import static org.assertj.core.api.BDDAssertions.then; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertEquals; +import org.assertj.core.api.BDDAssertions; import org.junit.After; -import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -26,7 +28,6 @@ import org.springframework.messaging.MessageHandler; import org.springframework.messaging.MessagingException; import org.springframework.messaging.support.ExecutorSubscribableChannel; import org.springframework.messaging.support.GenericMessage; -import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** @@ -37,97 +38,130 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = TestApplication.class) @IntegrationTest -@DirtiesContext -public class TraceStompMessageChannelInterceptorTests implements MessageHandler { +public class TraceStompMessageChannelInterceptorTests { @Autowired @Qualifier("executorSubscribableChannel") private ExecutorSubscribableChannel channel; - @Autowired - private TraceManager traceManager; - - private Message message; - - @Override - public void handleMessage(Message message) throws MessagingException { - this.message = message; - } + @Autowired TraceManager traceManager; + @Autowired StompMessageHandler stompMessageHandler; @Before public void init() { - this.channel.subscribe(this); + this.channel.subscribe(stompMessageHandler); } @After public void close() { TraceContextHolder.removeCurrentTrace(); - this.channel.unsubscribe(this); + this.channel.unsubscribe(stompMessageHandler); } @Test - public void test_whenHeaderIsStamped_thenNoSpanCreation() { - Message message = StompMessageBuilder.fromMessage(new GenericMessage("Message2")).setHeader(Trace.NOT_SAMPLED_NAME, "").build(); - - this.channel.send(message); - assertNotNull("message was null", this.message); - - String spanId = this.message.getHeaders().get(Trace.SPAN_ID_NAME, String.class); - assertNull("spanId was not null", spanId); - - Assert.assertEquals(message.getPayload(), this.message.getPayload()); + public void should_not_create_span_if_message_contains_not_sampled_header() { + Message message = givenMessageNotToBeSampled(); + + whenTheMessageWasSent(message); + + thenSpanIdFromHeadersIsEmpty(); + thenReceivedMessageIsEqualToTheSentOne(message); } @Test - public void test_whenMessageHeaderIsNotStamped_thenSpanCreation() { - Message message = StompMessageBuilder.fromMessage(new GenericMessage("Message2")).build(); - this.channel.send(message); - assertNotNull("message was null", this.message); + public void should_create_span_when_headers_dont_contain_not_sampled() { + Message message = givenMessageToBeSampled(); - String spanId = this.message.getHeaders().get(Trace.SPAN_ID_NAME, String.class); - assertNotNull("spanId was null", spanId); + whenTheMessageWasSent(message); - String traceId = this.message.getHeaders().get(Trace.TRACE_ID_NAME, String.class); - assertNotNull("traceId was null", traceId); - assertNull(TraceContextHolder.getCurrentTrace()); + thenSpanIdFromHeadersIsNotEmpty(); + thenTraceIdFromHeadersIsNotEmpty(); + then(TraceContextHolder.getCurrentTrace()).isNull(); } @Test - public void test_whenMessageHeaderNotStamped_thenHeaderCreation() { - final TraceManager traceManager = this.traceManager; - final Trace trace = traceManager.startSpan("testSendMessage", new AlwaysSampler(), null); - Message message = StompMessageBuilder.fromMessage(new GenericMessage("Message2")).build(); - this.channel.send(message); - + public void should_propagate_headers_when_message_was_sent_during_local_span_starting() { + Trace trace = givenALocallyStartedSpan(); + Message message = givenMessageToBeSampled(); + + whenTheMessageWasSent(message); traceManager.close(trace); - assertNotNull("message was null", this.message); + String spanId = thenSpanIdFromHeadersIsNotEmpty(); + String traceId = thenTraceIdFromHeadersIsNotEmpty(); + then(traceId).isEqualTo(trace.getSpan().getTraceId()); + then(spanId).isEqualTo(trace.getSpan().getSpanId()); + then(TraceContextHolder.getCurrentTrace()).isNull(); + } - String spanId = this.message.getHeaders().get(Trace.SPAN_ID_NAME, String.class); - assertNotNull("spanId was null", spanId); + private Trace givenALocallyStartedSpan() { + return traceManager.startSpan("testSendMessage", new AlwaysSampler(), null); + } - String traceId = this.message.getHeaders().get(Trace.TRACE_ID_NAME, String.class); - assertNotNull("traceId was null", traceId); - - assertEquals("Trace context is not continued", trace.getSpan().getTraceId(), traceId); - assertEquals("Trace context is not continued", trace.getSpan().getSpanId(), spanId); - assertNull(TraceContextHolder.getCurrentTrace()); + private Message givenMessageNotToBeSampled() { + return StompMessageBuilder.fromMessage(new GenericMessage<>("Message2")).setHeader(Trace.NOT_SAMPLED_NAME, "").build(); + } + + private Message givenMessageToBeSampled() { + return StompMessageBuilder.fromMessage(new GenericMessage<>("Message2")).build(); + } + + private void whenTheMessageWasSent(Message message) { + this.channel.send(message); + then(stompMessageHandler.message).isNotNull(); + } + + private String thenSpanIdFromHeadersIsEmpty() { + String header = getValueFromHeaders(Trace.SPAN_ID_NAME); + then(header).as("Span id should be empty").isNullOrEmpty(); + return header; + } + + private String thenSpanIdFromHeadersIsNotEmpty() { + String header = getValueFromHeaders(Trace.SPAN_ID_NAME); + then(header).as("Span id should not be empty").isNotEmpty(); + return header; + } + + private String thenTraceIdFromHeadersIsNotEmpty() { + String header = getValueFromHeaders(Trace.TRACE_ID_NAME); + then(header).as("Trace id should not be empty").isNotEmpty(); + return header; + } + + private void thenReceivedMessageIsEqualToTheSentOne(Message message) { + then(message.getPayload()).isEqualTo(stompMessageHandler.message.getPayload()); + } + + private String getValueFromHeaders(String headerName) { + return stompMessageHandler.message.getHeaders().get(headerName, String.class); } @Configuration @EnableAutoConfiguration static class TestApplication { - @Autowired - TraceStompMessageChannelInterceptor stompChannelInterceptor; - @Bean - public ExecutorSubscribableChannel executorSubscribableChannel() { + + @Bean ExecutorSubscribableChannel executorSubscribableChannel(TraceStompMessageChannelInterceptor stompChannelInterceptor) { ExecutorSubscribableChannel channel = new ExecutorSubscribableChannel(); channel.addInterceptor(stompChannelInterceptor); return channel; } - @Bean - public AlwaysSampler alwaysSampler() { + @Bean StompMessageHandler stompMessageHandler() { + return new StompMessageHandler(); + } + + @Bean AlwaysSampler alwaysSampler() { return new AlwaysSampler(); } } + + static class StompMessageHandler implements MessageHandler { + + Message message; + + @Override + public void handleMessage(Message message) throws MessagingException { + this.message = message; + } + } } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageContextPropagationChannelInterceptorTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageContextPropagationChannelInterceptorTests.java index a85d4fc74..a5fdf6f24 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageContextPropagationChannelInterceptorTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageContextPropagationChannelInterceptorTests.java @@ -34,7 +34,6 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes=TestApplication.class) @IntegrationTest -@DirtiesContext public class TraceStompMessageContextPropagationChannelInterceptorTests implements MessageHandler { @Autowired @Qualifier("executorSubscribableChannel")