From 02998ef45a80939db069cb633bc70309e2b4c88d Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Mon, 21 Mar 2016 09:16:50 +0000 Subject: [PATCH] Fix some compiler warnings and tidy up a few javadocs --- .../cloud/sleuth/SpanExtractor.java | 18 ++-- .../cloud/sleuth/SpanInjector.java | 21 +++-- .../cloud/sleuth/TraceHeaders.java | 16 ++-- .../AbstractTraceChannelInterceptor.java | 21 ++--- .../messaging/MessageBuilderHolder.java | 12 +-- .../messaging/MessagingSpanExtractor.java | 11 +-- .../messaging/MessagingSpanInjector.java | 18 ++-- .../messaging/TraceChannelInterceptor.java | 7 +- .../TraceSpanMessagingAutoConfiguration.java | 10 +-- ...aceSpringIntegrationAutoConfiguration.java | 20 +++-- .../TraceWebSocketAutoConfiguration.java | 24 +++--- ...TraceableScheduledExecutorServiceTest.java | 67 +++++++++------ .../messaging/MessagingSpanInjectorTests.java | 22 +++-- .../web/TraceFilterCustomExtractorTests.java | 53 +++++++----- .../TraceAsyncListenableTaskExecutorTest.java | 40 ++++----- .../web/client/WebClientExceptionTests.java | 53 +++++++----- .../instrument/web/client/WebClientTests.java | 84 +++++++++++-------- ...aceRestClientRibbonCommandFactoryTest.java | 70 ++++++++-------- 18 files changed, 321 insertions(+), 246 deletions(-) diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/SpanExtractor.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/SpanExtractor.java index 8ccc007f5..49780a978 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/SpanExtractor.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/SpanExtractor.java @@ -17,23 +17,27 @@ package org.springframework.cloud.sleuth; /** - * Adopted from OpenTracing + * Adopted from + * OpenTracing * * @author Marcin Grzejszczak * * @since 1.0.0 */ public interface SpanExtractor { - /** Returns a SpanBuilder provided - * a “carrier” object from which to extract identifying information needed by the new Span instance. + /** + * Returns a SpanBuilder provided a “carrier” object from which to extract identifying + * information needed by the new Span instance. * * If the carrier object has no such span stored within it, a new Span is created. * - * Unless there’s an error, it returns a Span. - * The Span generated from the builder can be used in the host process like any other. + * Unless there’s an error, it returns a Span. The Span generated from the builder can + * be used in the host process like any other. * - * (Note that some OpenTracing implementations consider the Spans on either side of an RPC to have the same identity, - * and others consider the caller to be the parent and the receiver to be the child). + * (Note that some OpenTracing implementations consider the Spans on either side of an + * RPC to have the same identity, and others consider the caller to be the parent and + * the receiver to be the child). */ Span joinTrace(T carrier); } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/SpanInjector.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/SpanInjector.java index e8c9015ca..48e0868bf 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/SpanInjector.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/SpanInjector.java @@ -17,21 +17,28 @@ package org.springframework.cloud.sleuth; /** - * Adopted from OpenTracing + * Adopted from + * OpenTracing * * @author Marcin Grzejszczak * * @since 1.0.0 */ public interface SpanInjector { - /** Takes two arguments: - * a Span instance, and - * a “carrier” object in which to inject that Span for cross-process propagation. + /** + * Takes two arguments: + *
    + *
  • a Span instance, and
  • + *
  • a “carrier” object in which to inject that Span for cross-process propagation. + *
  • + *
* - * A “carrier” object is some sort of http or rpc envelope, for example HeaderGroup (from Apache HttpComponents). + * A “carrier” object is some sort of http or rpc envelope, for example HeaderGroup + * (from Apache HttpComponents). * - * Attempting to inject to a carrier that has been registered/configured to this Tracer will result in a - * IllegalStateException. + * Attempting to inject to a carrier that has been registered/configured to this + * Tracer will result in a IllegalStateException. */ void inject(Span span, T carrier); } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/TraceHeaders.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/TraceHeaders.java index b14799b92..6147832e8 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/TraceHeaders.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/TraceHeaders.java @@ -19,16 +19,16 @@ package org.springframework.cloud.sleuth; import org.springframework.boot.context.properties.ConfigurationProperties; /** - * Names of default headers that need to be sent between processes - * for tracing to be operational. + * Names of default headers that need to be sent between processes for tracing to be + * operational. * * Default Zipkin Headers are * *
    - *
  • {@code X-B3-TraceId} 64 encoded bits
  • - *
  • {@code X-B3-SpanId} 64 encoded bits
  • - *
  • {@code X-B3-ParentSpanId} 64 encoded bits
  • - *
  • {@code X-B3-Sampled} Boolean (either “1” or “0”)
  • + *
  • {@code X-B3-TraceId} 64 encoded bits
  • + *
  • {@code X-B3-SpanId} 64 encoded bits
  • + *
  • {@code X-B3-ParentSpanId} 64 encoded bits
  • + *
  • {@code X-B3-Sampled} Boolean (either “1” or “0”)
  • *
* * @author Marcin Grzejszczak @@ -57,7 +57,7 @@ public class TraceHeaders { this.sleuth = sleuth; } - private static class Zipkin { + protected static class Zipkin { private String traceId = "X-B3-TraceId"; private String spanId = "X-B3-SpanId"; private String parentSpanId = "X-B3-ParentSpanId"; @@ -96,7 +96,7 @@ public class TraceHeaders { } } - private static class Sleuth { + protected static class Sleuth { private String processId = "X-Process-Id"; private String spanName = "X-Span-Name"; private String exportable = "X-Span-Export"; diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/AbstractTraceChannelInterceptor.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/AbstractTraceChannelInterceptor.java index 4e8ae7a2b..6f594ea4b 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/AbstractTraceChannelInterceptor.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/AbstractTraceChannelInterceptor.java @@ -19,11 +19,12 @@ import org.springframework.util.ClassUtils; * * @author Marcin Grzejszczak */ -abstract class AbstractTraceChannelInterceptor extends ChannelInterceptorAdapter implements ExecutorChannelInterceptor { +abstract class AbstractTraceChannelInterceptor extends ChannelInterceptorAdapter + implements ExecutorChannelInterceptor { /** - * If a span comes from messaging components then it will have this value - * as a prefix to its name. + * If a span comes from messaging components then it will have this value as a prefix + * to its name. *

* Example of a Span name: {@code message:foo} *

@@ -33,12 +34,12 @@ abstract class AbstractTraceChannelInterceptor extends ChannelInterceptorAdapter private final Tracer tracer; private final TraceKeys traceKeys; - private final SpanExtractor spanExtractor; - private final SpanInjector spanInjector; + private final SpanExtractor> spanExtractor; + private final SpanInjector> spanInjector; protected AbstractTraceChannelInterceptor(Tracer tracer, TraceKeys traceKeys, - SpanExtractor spanExtractor, - SpanInjector spanInjector) { + SpanExtractor> spanExtractor, + SpanInjector> spanInjector) { this.tracer = tracer; this.traceKeys = traceKeys; this.spanExtractor = spanExtractor; @@ -53,13 +54,13 @@ abstract class AbstractTraceChannelInterceptor extends ChannelInterceptorAdapter return this.traceKeys; } - protected SpanInjector getSpanInjector() { + protected SpanInjector> getSpanInjector() { return this.spanInjector; } /** - * Returns a span given the message and a channel. Returns {@code null} if ids - * are missing. + * Returns a span given the message and a channel. Returns {@code null} if ids are + * missing. */ protected Span buildSpan(Message message) { return this.spanExtractor.joinTrace(message); diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/MessageBuilderHolder.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/MessageBuilderHolder.java index 560817563..741e6ae26 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/MessageBuilderHolder.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/MessageBuilderHolder.java @@ -22,20 +22,20 @@ import org.springframework.messaging.support.MessageBuilder; /** * Utility class to contain both {@link MessageBuilder} and the {@link Message}. * - * {@link MessageBuilder} is mutable - * {@link Message} is immutable + * {@link MessageBuilder} is mutable {@link Message} is immutable * * @author Marcin Grzejszczak */ public class MessageBuilderHolder { - final MessageBuilder messageBuilder; - final Message message; + final MessageBuilder messageBuilder; + final Message message; - public MessageBuilderHolder(MessageBuilder messageBuilder, Message message) { + public MessageBuilderHolder(MessageBuilder messageBuilder, Message message) { this.messageBuilder = messageBuilder; this.message = message; } - public MessageBuilderHolder(MessageBuilder messageBuilder) { + + public MessageBuilderHolder(MessageBuilder messageBuilder) { this.messageBuilder = messageBuilder; this.message = messageBuilder.build(); } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/MessagingSpanExtractor.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/MessagingSpanExtractor.java index f1d163669..b563fb7d9 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/MessagingSpanExtractor.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/MessagingSpanExtractor.java @@ -30,7 +30,7 @@ import org.springframework.messaging.Message; * * @since 1.0.0 */ -public class MessagingSpanExtractor implements SpanExtractor { +public class MessagingSpanExtractor implements SpanExtractor> { private final Random random; @@ -38,19 +38,20 @@ public class MessagingSpanExtractor implements SpanExtractor { this.random = random; } - @Override - public Span joinTrace(Message carrier) { + @Override + public Span joinTrace(Message carrier) { if (!hasHeader(carrier, Span.TRACE_ID_NAME) || !hasHeader(carrier, Span.SPAN_ID_NAME)) { return null; - //TODO: Consider throwing IllegalArgumentException; + // TODO: Consider throwing IllegalArgumentException; } long spanId = hasHeader(carrier, Span.SPAN_ID_NAME) ? Span.hexToId(getHeader(carrier, Span.SPAN_ID_NAME)) : this.random.nextLong(); long traceId = Span.hexToId(getHeader(carrier, Span.TRACE_ID_NAME)); SpanBuilder spanBuilder = Span.builder().traceId(traceId).spanId(spanId); - spanBuilder.exportable(Span.SPAN_SAMPLED.equals(getHeader(carrier, Span.SAMPLED_NAME))); + spanBuilder.exportable( + Span.SPAN_SAMPLED.equals(getHeader(carrier, Span.SAMPLED_NAME))); String parentId = getHeader(carrier, Span.PARENT_ID_NAME); String processId = getHeader(carrier, Span.PROCESS_ID_NAME); String spanName = getHeader(carrier, Span.SPAN_NAME_NAME); diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/MessagingSpanInjector.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/MessagingSpanInjector.java index de2afe29a..b358fd626 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/MessagingSpanInjector.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/MessagingSpanInjector.java @@ -36,7 +36,7 @@ import org.springframework.util.StringUtils; * * @since 1.0.0 */ -class MessagingSpanInjector implements SpanInjector { +class MessagingSpanInjector implements SpanInjector> { public static final String SPAN_HEADER = "X-Current-Span"; @@ -47,12 +47,13 @@ class MessagingSpanInjector implements SpanInjector { } @Override - public void inject(Span span, MessageBuilder carrier) { - Message initialMessage = carrier.build(); + public void inject(Span span, MessageBuilder carrier) { + Message initialMessage = carrier.build(); MessageHeaderAccessor accessor = MessageHeaderAccessor .getMutableAccessor(initialMessage); if (span == null) { - if (!Span.SPAN_SAMPLED.equals(initialMessage.getHeaders().get(Span.SAMPLED_NAME))) { + if (!Span.SPAN_SAMPLED + .equals(initialMessage.getHeaders().get(Span.SAMPLED_NAME))) { accessor.setHeader(Span.SAMPLED_NAME, Span.SPAN_NOT_SAMPLED); carrier.setHeaders(accessor); return; @@ -86,8 +87,7 @@ class MessagingSpanInjector implements SpanInjector { carrier.setHeaders(accessor); } - private void addAnnotations(TraceKeys traceKeys, Message message, - Span span) { + private void addAnnotations(TraceKeys traceKeys, Message message, Span span) { for (String name : traceKeys.getMessage().getHeaders()) { if (message.getHeaders().containsKey(name)) { String key = traceKeys.getMessage().getPrefix() + name.toLowerCase(); @@ -95,7 +95,8 @@ class MessagingSpanInjector implements SpanInjector { if (value == null) { value = "null"; } - tagIfEntryMissing(span, key, value.toString()); // TODO: better way to serialize? + // TODO: better way to serialize? + tagIfEntryMissing(span, key, value.toString()); } } addPayloadAnnotations(traceKeys, message.getPayload(), span); @@ -122,8 +123,7 @@ class MessagingSpanInjector implements SpanInjector { } } - private void addHeader(Map headers, String name, - String value) { + private void addHeader(Map headers, String name, String value) { if (StringUtils.hasText(value)) { headers.put(name, value); } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TraceChannelInterceptor.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TraceChannelInterceptor.java index f8b798d65..f9119a09a 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TraceChannelInterceptor.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TraceChannelInterceptor.java @@ -28,7 +28,8 @@ import org.springframework.messaging.MessageHandler; import org.springframework.messaging.support.MessageBuilder; /** - * A channel interceptor that automatically starts / continues / closes and detaches spans. + * A channel interceptor that automatically starts / continues / closes and detaches + * spans. * * @author Dave Syer * @since 1.0.0 @@ -38,8 +39,8 @@ public class TraceChannelInterceptor extends AbstractTraceChannelInterceptor { private static final String SPAN_HEADER = "X-Current-Span"; public TraceChannelInterceptor(Tracer tracer, TraceKeys traceKeys, - SpanExtractor spanExtractor, - SpanInjector spanInjector) { + SpanExtractor> spanExtractor, + SpanInjector> spanInjector) { super(tracer, traceKeys, spanExtractor, spanInjector); } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TraceSpanMessagingAutoConfiguration.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TraceSpanMessagingAutoConfiguration.java index 576d8b363..6fcaced33 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TraceSpanMessagingAutoConfiguration.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TraceSpanMessagingAutoConfiguration.java @@ -28,24 +28,24 @@ import org.springframework.messaging.Message; import org.springframework.messaging.support.MessageBuilder; /** - * AutoConfiguration containing Span extractor and injector for messaging. - * Will be reused by Messaging and WebSockets + * AutoConfiguration containing Span extractor and injector for messaging. Will be reused + * by Messaging and WebSockets * * @author Marcin Grzejszczak * * @since 1.0.0 */ @Configuration -@ConditionalOnBean({TraceKeys.class, Random.class}) +@ConditionalOnBean({ TraceKeys.class, Random.class }) public class TraceSpanMessagingAutoConfiguration { @Bean - public SpanExtractor messagingSpanExtractor(Random random) { + public SpanExtractor> messagingSpanExtractor(Random random) { return new MessagingSpanExtractor(random); } @Bean - public SpanInjector messagingSpanInjector(TraceKeys traceKeys) { + public SpanInjector> messagingSpanInjector(TraceKeys traceKeys) { return new MessagingSpanInjector(traceKeys); } } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TraceSpringIntegrationAutoConfiguration.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TraceSpringIntegrationAutoConfiguration.java index f538c525e..170469660 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TraceSpringIntegrationAutoConfiguration.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TraceSpringIntegrationAutoConfiguration.java @@ -23,11 +23,11 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.sleuth.SpanInjector; import org.springframework.cloud.sleuth.SpanExtractor; +import org.springframework.cloud.sleuth.SpanInjector; +import org.springframework.cloud.sleuth.TraceKeys; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.autoconfig.TraceAutoConfiguration; -import org.springframework.cloud.sleuth.TraceKeys; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.integration.config.GlobalChannelInterceptor; @@ -35,8 +35,9 @@ import org.springframework.messaging.Message; import org.springframework.messaging.support.MessageBuilder; /** - * {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration Auto-configuration} - * that registers a Sleuth version of the {@link org.springframework.messaging.support.ChannelInterceptor}. + * {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration + * Auto-configuration} that registers a Sleuth version of the + * {@link org.springframework.messaging.support.ChannelInterceptor}. * * @author Spencer Gibb * @since 1.0.0 @@ -46,7 +47,8 @@ import org.springframework.messaging.support.MessageBuilder; @Configuration @ConditionalOnClass(GlobalChannelInterceptor.class) @ConditionalOnBean(Tracer.class) -@AutoConfigureAfter({TraceAutoConfiguration.class, TraceSpanMessagingAutoConfiguration.class}) +@AutoConfigureAfter({ TraceAutoConfiguration.class, + TraceSpanMessagingAutoConfiguration.class }) @ConditionalOnProperty(value = "spring.sleuth.integration.enabled", matchIfMissing = true) @EnableConfigurationProperties(TraceKeys.class) public class TraceSpringIntegrationAutoConfiguration { @@ -54,10 +56,10 @@ public class TraceSpringIntegrationAutoConfiguration { @Bean @GlobalChannelInterceptor public TraceChannelInterceptor traceChannelInterceptor(Tracer tracer, - TraceKeys traceKeys, Random random, - SpanExtractor spanExtractor, - SpanInjector spanInjector) { - return new TraceChannelInterceptor(tracer, traceKeys, spanExtractor, spanInjector); + TraceKeys traceKeys, Random random, SpanExtractor> spanExtractor, + SpanInjector> spanInjector) { + return new TraceChannelInterceptor(tracer, traceKeys, spanExtractor, + spanInjector); } } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/websocket/TraceWebSocketAutoConfiguration.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/websocket/TraceWebSocketAutoConfiguration.java index a806f0b8b..17f4927a2 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/websocket/TraceWebSocketAutoConfiguration.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/websocket/TraceWebSocketAutoConfiguration.java @@ -21,8 +21,8 @@ import org.springframework.web.socket.config.annotation.DelegatingWebSocketMessa import org.springframework.web.socket.config.annotation.StompEndpointRegistry; /** - * {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration Auto-configuration} - * that enables tracing for WebSockets. + * {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration + * Auto-configuration} that enables tracing for WebSockets. * * @author Dave Syer * @since 1.0.0 @@ -38,10 +38,14 @@ import org.springframework.web.socket.config.annotation.StompEndpointRegistry; public class TraceWebSocketAutoConfiguration extends AbstractWebSocketMessageBrokerConfigurer { - @Autowired Tracer tracer; - @Autowired TraceKeys traceKeys; - @Autowired SpanExtractor spanExtractor; - @Autowired SpanInjector spanInjector; + @Autowired + Tracer tracer; + @Autowired + TraceKeys traceKeys; + @Autowired + SpanExtractor> spanExtractor; + @Autowired + SpanInjector> spanInjector; @Override public void registerStompEndpoints(StompEndpointRegistry registry) { @@ -50,13 +54,13 @@ public class TraceWebSocketAutoConfiguration @Override public void configureClientOutboundChannel(ChannelRegistration registration) { - registration.setInterceptors( - new TraceChannelInterceptor(this.tracer, this.traceKeys, this.spanExtractor, this.spanInjector)); + registration.setInterceptors(new TraceChannelInterceptor(this.tracer, + this.traceKeys, this.spanExtractor, this.spanInjector)); } @Override public void configureClientInboundChannel(ChannelRegistration registration) { - registration.setInterceptors( - new TraceChannelInterceptor(this.tracer, this.traceKeys, this.spanExtractor, this.spanInjector)); + registration.setInterceptors(new TraceChannelInterceptor(this.tracer, + this.traceKeys, this.spanExtractor, this.spanInjector)); } } \ No newline at end of file diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceableScheduledExecutorServiceTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceableScheduledExecutorServiceTest.java index ff9bc9aea..8d0d4017a 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceableScheduledExecutorServiceTest.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/TraceableScheduledExecutorServiceTest.java @@ -16,6 +16,11 @@ package org.springframework.cloud.sleuth.instrument.async; +import static org.hamcrest.Matchers.instanceOf; +import static org.mockito.BDDMockito.then; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyLong; + import java.util.concurrent.Callable; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -30,61 +35,73 @@ import org.springframework.cloud.sleuth.SpanNamer; import org.springframework.cloud.sleuth.TraceKeys; import org.springframework.cloud.sleuth.Tracer; -import static org.hamcrest.Matchers.instanceOf; -import static org.mockito.BDDMockito.then; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyLong; - /** * @author Marcin Grzejszczak */ @RunWith(MockitoJUnitRunner.class) public class TraceableScheduledExecutorServiceTest { - @Mock Tracer tracer; - @Mock TraceKeys traceKeys; - @Mock SpanNamer spanNamer; - @Mock ScheduledExecutorService scheduledExecutorService; - @InjectMocks TraceableScheduledExecutorService traceableScheduledExecutorService; + @Mock + Tracer tracer; + @Mock + TraceKeys traceKeys; + @Mock + SpanNamer spanNamer; + @Mock + ScheduledExecutorService scheduledExecutorService; + @InjectMocks + TraceableScheduledExecutorService traceableScheduledExecutorService; @Test public void should_schedule_a_local_component_trace_runnable() throws Exception { this.traceableScheduledExecutorService.schedule(aRunnable(), 1L, TimeUnit.DAYS); - then(this.scheduledExecutorService).should().schedule(BDDMockito.argThat( - instanceOf(LocalComponentTraceRunnable.class)), anyLong(), any(TimeUnit.class)); + then(this.scheduledExecutorService).should().schedule( + BDDMockito + .argThat(instanceOf(LocalComponentTraceRunnable.class)), + anyLong(), any(TimeUnit.class)); } @Test - @SuppressWarnings("unchecked") public void should_schedule_a_local_component_trace_callable() throws Exception { this.traceableScheduledExecutorService.schedule(aCallable(), 1L, TimeUnit.DAYS); - then(this.scheduledExecutorService).should().schedule(BDDMockito.argThat( - instanceOf(LocalComponentTraceCallable.class)), anyLong(), any(TimeUnit.class)); + then(this.scheduledExecutorService).should().schedule( + BDDMockito.>argThat( + instanceOf(LocalComponentTraceCallable.class)), + anyLong(), any(TimeUnit.class)); } @Test - public void should_schedule_at_fixed_rate_a_local_component_trace_runnable() throws Exception { - this.traceableScheduledExecutorService.scheduleAtFixedRate(aRunnable(), 1L, 1L, TimeUnit.DAYS); + public void should_schedule_at_fixed_rate_a_local_component_trace_runnable() + throws Exception { + this.traceableScheduledExecutorService.scheduleAtFixedRate(aRunnable(), 1L, 1L, + TimeUnit.DAYS); - then(this.scheduledExecutorService).should().scheduleAtFixedRate(BDDMockito.argThat( - instanceOf(LocalComponentTraceRunnable.class)), anyLong(), anyLong(), any(TimeUnit.class)); + then(this.scheduledExecutorService).should().scheduleAtFixedRate( + BDDMockito + .argThat(instanceOf(LocalComponentTraceRunnable.class)), + anyLong(), anyLong(), any(TimeUnit.class)); } @Test - public void should_schedule_with_fixed_delay_a_local_component_trace_runnable() throws Exception { - this.traceableScheduledExecutorService.scheduleWithFixedDelay(aRunnable(), 1L, 1L, TimeUnit.DAYS); + public void should_schedule_with_fixed_delay_a_local_component_trace_runnable() + throws Exception { + this.traceableScheduledExecutorService.scheduleWithFixedDelay(aRunnable(), 1L, 1L, + TimeUnit.DAYS); - then(this.scheduledExecutorService).should().scheduleWithFixedDelay(BDDMockito.argThat( - instanceOf(LocalComponentTraceRunnable.class)), anyLong(), anyLong(), any(TimeUnit.class)); + then(this.scheduledExecutorService).should().scheduleWithFixedDelay( + BDDMockito + .argThat(instanceOf(LocalComponentTraceRunnable.class)), + anyLong(), anyLong(), any(TimeUnit.class)); } Runnable aRunnable() { - return () -> {}; + return () -> { + }; } - Callable aCallable() { + Callable aCallable() { return () -> null; } } \ No newline at end of file diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/MessagingSpanInjectorTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/MessagingSpanInjectorTests.java index e5bd46b68..1be79222a 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/MessagingSpanInjectorTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/MessagingSpanInjectorTests.java @@ -16,6 +16,9 @@ package org.springframework.cloud.sleuth.instrument.messaging; +import static org.assertj.core.api.Assertions.assertThat; +import static org.springframework.cloud.sleuth.assertions.SleuthAssertions.assertThat; + import org.junit.Test; import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.TraceKeys; @@ -26,8 +29,6 @@ import org.springframework.messaging.support.MessageBuilder; import org.springframework.messaging.support.MessageHeaderAccessor; import org.springframework.messaging.support.NativeMessageHeaderAccessor; -import static org.springframework.cloud.sleuth.assertions.SleuthAssertions.assertThat; - /** * @author Dave Syer * @@ -35,7 +36,8 @@ import static org.springframework.cloud.sleuth.assertions.SleuthAssertions.asser public class MessagingSpanInjectorTests { private TraceKeys traceKeys = new TraceKeys(); - private MessagingSpanInjector messagingSpanInjector = new MessagingSpanInjector(this.traceKeys); + private MessagingSpanInjector messagingSpanInjector = new MessagingSpanInjector( + this.traceKeys); @Test public void spanHeadersAdded() { @@ -51,12 +53,12 @@ public class MessagingSpanInjectorTests { @Test public void shouldNotOverrideSpanTags() { Span span = spanWithStringPayloadType(); - MessageBuilder messageBuilder = messageWithIntegerPayloadType(); + MessageBuilder messageBuilder = messageWithIntegerPayloadType(); this.messagingSpanInjector.inject(span, messageBuilder); - assertThat(messageBuilder.build().getHeaders()) - .containsKeys(Span.SPAN_ID_NAME, "message/payload-type"); + assertThat(messageBuilder.build().getHeaders()).containsKeys(Span.SPAN_ID_NAME, + "message/payload-type"); assertThat(span).hasATag("message/payload-type", "java.lang.String"); } @@ -66,7 +68,7 @@ public class MessagingSpanInjectorTests { return span; } - private MessageBuilder messageWithIntegerPayloadType() { + private MessageBuilder messageWithIntegerPayloadType() { MessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(); accessor.setHeader("message/payload-type", "java.lang.Integer"); return MessageBuilder.withPayload("Hello World").setHeaders(accessor); @@ -76,8 +78,10 @@ public class MessagingSpanInjectorTests { public void nativeSpanHeadersAdded() { Span span = Span.builder().name("http:foo").spanId(1L).traceId(2L).build(); MessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(); - Message messageToBuild = MessageBuilder.createMessage("Hello World", accessor.getMessageHeaders()); - MessageBuilder messageBuilder = MessageBuilder.fromMessage(messageToBuild); + Message messageToBuild = MessageBuilder.createMessage("Hello World", + accessor.getMessageHeaders()); + MessageBuilder messageBuilder = MessageBuilder + .fromMessage(messageToBuild); this.messagingSpanInjector.inject(span, messageBuilder); diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterCustomExtractorTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterCustomExtractorTests.java index 05684bcb1..554e2622f 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterCustomExtractorTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterCustomExtractorTests.java @@ -16,6 +16,9 @@ package org.springframework.cloud.sleuth.instrument.web; +import static org.assertj.core.api.BDDAssertions.then; +import static org.springframework.cloud.sleuth.assertions.SleuthAssertions.then; + import java.net.URI; import java.util.Collections; import java.util.HashMap; @@ -49,47 +52,48 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; -import static org.springframework.cloud.sleuth.assertions.SleuthAssertions.then; - @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(TraceFilterCustomExtractorTests.Config.class) @WebIntegrationTest(randomPort = true) -public class TraceFilterCustomExtractorTests { - @Autowired Random random; - @Autowired RestTemplate restTemplate; - @Autowired Config config; - @Autowired CustomRestController customRestController; +public class TraceFilterCustomExtractorTests { + @Autowired + Random random; + @Autowired + RestTemplate restTemplate; + @Autowired + Config config; + @Autowired + CustomRestController customRestController; @Test @SuppressWarnings("unchecked") public void should_create_a_valid_span_from_custom_headers() { long spanId = this.random.nextLong(); long traceId = this.random.nextLong(); - RequestEntity requestEntity = RequestEntity.get( - URI.create("http://localhost:" + this.config.port + "/headers")) + RequestEntity requestEntity = RequestEntity + .get(URI.create("http://localhost:" + this.config.port + "/headers")) .header("correlationId", Span.idToHex(traceId)) - .header("mySpanId", Span.idToHex(spanId)) - .build(); + .header("mySpanId", Span.idToHex(spanId)).build(); - ResponseEntity requestHeaders = - this.restTemplate.exchange(requestEntity, Map.class); + @SuppressWarnings("rawtypes") + ResponseEntity requestHeaders = this.restTemplate.exchange(requestEntity, + Map.class); - then(this.customRestController.span) - .hasTraceIdEqualTo(traceId); + then(this.customRestController.span).hasTraceIdEqualTo(traceId); then(requestHeaders.getBody()) .containsEntry("correlationId", Span.idToHex(traceId)) .containsEntry("mySpanId", Span.idToHex(spanId)) .as("input request headers"); then(requestHeaders.getHeaders()) - .containsEntry("correlationId", Collections.singletonList(Span.idToHex(traceId))) - .containsKey("mySpanId") - .as("response headers"); + .containsEntry("correlationId", + Collections.singletonList(Span.idToHex(traceId))) + .containsKey("mySpanId").as("response headers"); } @Configuration @EnableAutoConfiguration - static class Config implements - ApplicationListener { + static class Config + implements ApplicationListener { int port; // tag::configuration[] @@ -111,13 +115,15 @@ public class TraceFilterCustomExtractorTests { this.port = event.getEmbeddedServletContainer().getPort(); } - @Bean CustomRestController customRestController() { + @Bean + CustomRestController customRestController() { return new CustomRestController(); } } // tag::extractor[] - static class CustomHttpServletRequestSpanExtractor implements SpanExtractor { + static class CustomHttpServletRequestSpanExtractor + implements SpanExtractor { @Override public Span joinTrace(HttpServletRequest carrier) { @@ -132,7 +138,8 @@ public class TraceFilterCustomExtractorTests { // end::extractor[] // tag::injector[] - static class CustomHttpServletResponseSpanInjector implements SpanInjector { + static class CustomHttpServletResponseSpanInjector + implements SpanInjector { @Override public void inject(Span span, HttpServletResponse carrier) { diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceAsyncListenableTaskExecutorTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceAsyncListenableTaskExecutorTest.java index eadf81b78..0e9f9dc61 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceAsyncListenableTaskExecutorTest.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceAsyncListenableTaskExecutorTest.java @@ -16,6 +16,9 @@ package org.springframework.cloud.sleuth.instrument.web.client; +import static org.hamcrest.Matchers.instanceOf; +import static org.mockito.Mockito.mock; + import java.util.Random; import java.util.concurrent.Callable; @@ -31,9 +34,6 @@ import org.springframework.cloud.sleuth.sampler.AlwaysSampler; import org.springframework.cloud.sleuth.trace.DefaultTracer; import org.springframework.core.task.AsyncListenableTaskExecutor; -import static org.hamcrest.Matchers.instanceOf; -import static org.mockito.BDDMockito.mock; - /** * @author Marcin Grzejszczak */ @@ -42,59 +42,61 @@ public class TraceAsyncListenableTaskExecutorTest { AsyncListenableTaskExecutor delegate = mock(AsyncListenableTaskExecutor.class); Tracer tracer = new DefaultTracer(new AlwaysSampler(), new Random(), new DefaultSpanNamer(), new NoOpSpanLogger(), new NoOpSpanReporter()) { - @Override public boolean isTracing() { + @Override + public boolean isTracing() { return true; } }; - TraceAsyncListenableTaskExecutor traceAsyncListenableTaskExecutor = - new TraceAsyncListenableTaskExecutor(this.delegate, this.tracer); + TraceAsyncListenableTaskExecutor traceAsyncListenableTaskExecutor = new TraceAsyncListenableTaskExecutor( + this.delegate, this.tracer); @Test public void should_submit_listenable_trace_runnable() throws Exception { this.traceAsyncListenableTaskExecutor.submitListenable(aRunnable()); - BDDMockito.then(this.delegate).should().submitListenable(BDDMockito.argThat( - instanceOf(TraceRunnable.class))); + BDDMockito.then(this.delegate).should().submitListenable( + BDDMockito.argThat(instanceOf(TraceRunnable.class))); } @Test public void should_submit_listenable_trace_callable() throws Exception { this.traceAsyncListenableTaskExecutor.submitListenable(aCallable()); - BDDMockito.then(this.delegate).should().submitListenable(BDDMockito.argThat( - instanceOf(TraceCallable.class))); + BDDMockito.then(this.delegate).should().submitListenable( + BDDMockito.>argThat(instanceOf(TraceCallable.class))); } @Test public void should_execute_a_trace_runnable() throws Exception { this.traceAsyncListenableTaskExecutor.execute(aRunnable()); - BDDMockito.then(this.delegate).should().execute(BDDMockito.argThat( - instanceOf(TraceRunnable.class))); + BDDMockito.then(this.delegate).should() + .execute(BDDMockito.argThat(instanceOf(TraceRunnable.class))); } @Test public void should_execute_with_timeout_a_trace_runnable() throws Exception { this.traceAsyncListenableTaskExecutor.execute(aRunnable(), 1L); - BDDMockito.then(this.delegate).should().execute(BDDMockito.argThat( - instanceOf(TraceRunnable.class)), BDDMockito.anyLong()); + BDDMockito.then(this.delegate).should().execute( + BDDMockito.argThat(instanceOf(TraceRunnable.class)), + BDDMockito.anyLong()); } @Test public void should_submit_trace_callable() throws Exception { this.traceAsyncListenableTaskExecutor.submit(aCallable()); - BDDMockito.then(this.delegate).should().submit(BDDMockito.argThat( - instanceOf(TraceCallable.class))); + BDDMockito.then(this.delegate).should() + .submit(BDDMockito.>argThat(instanceOf(TraceCallable.class))); } @Test public void should_submit_trace_runnable() throws Exception { this.traceAsyncListenableTaskExecutor.submit(aRunnable()); - BDDMockito.then(this.delegate).should().submit(BDDMockito.argThat( - instanceOf(TraceRunnable.class))); + BDDMockito.then(this.delegate).should() + .submit(BDDMockito.argThat(instanceOf(TraceRunnable.class))); } Runnable aRunnable() { @@ -103,7 +105,7 @@ public class TraceAsyncListenableTaskExecutorTest { }; } - Callable aCallable() { + Callable aCallable() { return () -> null; } } \ No newline at end of file diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/WebClientExceptionTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/WebClientExceptionTests.java index f2f2766c5..f5d717d49 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/WebClientExceptionTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/WebClientExceptionTests.java @@ -16,6 +16,8 @@ package org.springframework.cloud.sleuth.instrument.web.client; +import static junitparams.JUnitParamsRunner.$; + import java.io.IOException; import java.util.Collections; import java.util.Map; @@ -54,19 +56,25 @@ import com.netflix.loadbalancer.Server; import junitparams.JUnitParamsRunner; import junitparams.Parameters; -import static junitparams.JUnitParamsRunner.$; - @RunWith(JUnitParamsRunner.class) -@SpringApplicationConfiguration(classes = { WebClientExceptionTests.TestConfiguration.class }) -@WebIntegrationTest(value = { "spring.application.name=exceptionservice" }, randomPort = true) +@SpringApplicationConfiguration(classes = { + WebClientExceptionTests.TestConfiguration.class }) +@WebIntegrationTest(value = { + "spring.application.name=exceptionservice" }, randomPort = true) public class WebClientExceptionTests { - @ClassRule public static final SpringClassRule SCR = new SpringClassRule(); - @Rule public final SpringMethodRule springMethodRule = new SpringMethodRule(); - - @Autowired TestFeignInterfaceWithException testFeignInterfaceWithException; - @Autowired @LoadBalanced RestTemplate template; - @Autowired Tracer tracer; + @ClassRule + public static final SpringClassRule SCR = new SpringClassRule(); + @Rule + public final SpringMethodRule springMethodRule = new SpringMethodRule(); + + @Autowired + TestFeignInterfaceWithException testFeignInterfaceWithException; + @Autowired + @LoadBalanced + RestTemplate template; + @Autowired + Tracer tracer; @After public void close() { @@ -76,14 +84,15 @@ public class WebClientExceptionTests { // issue #198 @Test @Parameters - @SuppressWarnings("unchecked") - public void shouldCloseSpanUponException(ResponseEntityProvider provider) throws IOException { + public void shouldCloseSpanUponException(ResponseEntityProvider provider) + throws IOException { Span span = this.tracer.createSpan("new trace"); try { provider.get(this); Assert.fail("should throw an exception"); - } catch (RuntimeException e) { + } + catch (RuntimeException e) { SleuthAssertions.then(e).hasRootCauseInstanceOf(IOException.class); } @@ -91,9 +100,12 @@ public class WebClientExceptionTests { this.tracer.close(span); } - private Object[] parametersForShouldCloseSpanUponException() { - return $((ResponseEntityProvider) (tests) -> tests.testFeignInterfaceWithException.shouldFailToConnect(), - (ResponseEntityProvider) (tests) -> tests.template.getForEntity("http://exceptionservice/", Map.class)); + Object[] parametersForShouldCloseSpanUponException() { + return $( + (ResponseEntityProvider) (tests) -> tests.testFeignInterfaceWithException + .shouldFailToConnect(), + (ResponseEntityProvider) (tests) -> tests.template + .getForEntity("http://exceptionservice/", Map.class)); } @FeignClient("exceptionservice") @@ -111,19 +123,18 @@ public class WebClientExceptionTests { @LoadBalanced @Bean public RestTemplate restTemplate() { - return new RestTemplate(); + return new RestTemplate(); } } - @Configuration public static class ExceptionServiceRibbonClientConfiguration { @Bean public ILoadBalancer exceptionServiceRibbonLoadBalancer() { BaseLoadBalancer balancer = new BaseLoadBalancer(); - balancer.setServersList( - Collections.singletonList(new Server("invalid.host.to.break.tests", 1234))); + balancer.setServersList(Collections + .singletonList(new Server("invalid.host.to.break.tests", 1234))); return balancer; } @@ -131,6 +142,6 @@ public class WebClientExceptionTests { @FunctionalInterface interface ResponseEntityProvider { - ResponseEntity get(WebClientExceptionTests webClientTests); + ResponseEntity get(WebClientExceptionTests webClientTests); } } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/WebClientTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/WebClientTests.java index 39ddeb572..7f406a9c4 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/WebClientTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/WebClientTests.java @@ -16,6 +16,10 @@ package org.springframework.cloud.sleuth.instrument.web.client; +import static junitparams.JUnitParamsRunner.$; +import static org.assertj.core.api.BDDAssertions.then; +import static org.springframework.cloud.sleuth.assertions.SleuthAssertions.then; + import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -61,21 +65,25 @@ import com.netflix.loadbalancer.Server; import junitparams.JUnitParamsRunner; import junitparams.Parameters; -import static junitparams.JUnitParamsRunner.$; -import static org.springframework.cloud.sleuth.assertions.SleuthAssertions.then; - @RunWith(JUnitParamsRunner.class) @SpringApplicationConfiguration(classes = { WebClientTests.TestConfiguration.class }) @WebIntegrationTest(value = { "spring.application.name=fooservice" }, randomPort = true) public class WebClientTests { - @ClassRule public static final SpringClassRule SCR = new SpringClassRule(); - @Rule public final SpringMethodRule springMethodRule = new SpringMethodRule(); - - @Autowired TestFeignInterface testFeignInterface; - @Autowired @LoadBalanced RestTemplate template; - @Autowired Listener listener; - @Autowired Tracer tracer; + @ClassRule + public static final SpringClassRule SCR = new SpringClassRule(); + @Rule + public final SpringMethodRule springMethodRule = new SpringMethodRule(); + + @Autowired + TestFeignInterface testFeignInterface; + @Autowired + @LoadBalanced + RestTemplate template; + @Autowired + Listener listener; + @Autowired + Tracer tracer; @After public void close() { @@ -86,7 +94,8 @@ public class WebClientTests { @Test @Parameters @SuppressWarnings("unchecked") - public void shouldCreateANewSpanWhenNoPreviousTracingWasPresent(ResponseEntityProvider provider) { + public void shouldCreateANewSpanWhenNoPreviousTracingWasPresent( + ResponseEntityProvider provider) { ResponseEntity response = provider.get(this); then(getHeader(response, Span.TRACE_ID_NAME)).isNotNull(); @@ -94,9 +103,11 @@ public class WebClientTests { then(this.listener.getEvents()).isNotEmpty(); } - private Object[] parametersForShouldCreateANewSpanWhenNoPreviousTracingWasPresent() { - return $((ResponseEntityProvider) (tests) -> tests.testFeignInterface.getNoTrace(), - (ResponseEntityProvider) (tests) -> tests.template.getForEntity("http://fooservice/notrace", String.class)); + Object[] parametersForShouldCreateANewSpanWhenNoPreviousTracingWasPresent() { + return $( + (ResponseEntityProvider) (tests) -> tests.testFeignInterface.getNoTrace(), + (ResponseEntityProvider) (tests) -> tests.template + .getForEntity("http://fooservice/notrace", String.class)); } @Test @@ -115,15 +126,17 @@ public class WebClientTests { then(this.listener.getEvents()).isNotEmpty(); } - private Object[] parametersForShouldPropagateNotSamplingHeader() { + Object[] parametersForShouldPropagateNotSamplingHeader() { return $((ResponseEntityProvider) (tests) -> tests.testFeignInterface.headers(), - (ResponseEntityProvider) (tests) -> tests.template.getForEntity("http://fooservice/", Map.class)); + (ResponseEntityProvider) (tests) -> tests.template + .getForEntity("http://fooservice/", Map.class)); } @Test @Parameters @SuppressWarnings("unchecked") - public void shouldAttachTraceIdWhenCallingAnotherService(ResponseEntityProvider provider) { + public void shouldAttachTraceIdWhenCallingAnotherService( + ResponseEntityProvider provider) { Long currentTraceId = 1L; Long currentParentId = 2L; Long currentSpanId = 100L; @@ -139,29 +152,29 @@ public class WebClientTests { } private Span spanWithClientEvents() { - return this.listener.getEvents() - .stream() - .filter(span -> span.logs() - .stream() - .filter(log -> log.getEvent().contains(Span.CLIENT_RECV) || log.getEvent().contains(Span.CLIENT_SEND)) + return this.listener.getEvents().stream() + .filter(span -> span.logs().stream() + .filter(log -> log.getEvent().contains(Span.CLIENT_RECV) + || log.getEvent().contains(Span.CLIENT_SEND)) .findFirst().isPresent()) .findFirst().get(); } - private Object[] parametersForShouldAttachTraceIdWhenCallingAnotherService() { + Object[] parametersForShouldAttachTraceIdWhenCallingAnotherService() { return $((ResponseEntityProvider) (tests) -> tests.testFeignInterface.headers(), - (ResponseEntityProvider) (tests) -> tests.template.getForEntity("http://fooservice/traceid", String.class)); + (ResponseEntityProvider) (tests) -> tests.template + .getForEntity("http://fooservice/traceid", String.class)); } @Test @Parameters - @SuppressWarnings("unchecked") - public void shouldAttachTraceIdWhenUsingFeignClientWithoutResponseBody(ResponseEntityProvider provider) { + public void shouldAttachTraceIdWhenUsingFeignClientWithoutResponseBody( + ResponseEntityProvider provider) { Long currentTraceId = 1L; Long currentParentId = 2L; Long currentSpanId = generatedId(); - Span span = Span.builder().traceId(currentTraceId) - .spanId(currentSpanId).parent(currentParentId).build(); + Span span = Span.builder().traceId(currentTraceId).spanId(currentSpanId) + .parent(currentParentId).build(); this.tracer.continueSpan(span); provider.get(this); @@ -170,9 +183,12 @@ public class WebClientTests { thenRegisteredClientSentAndReceivedEvents(spanWithClientEvents()); } - private Object[] parametersForShouldAttachTraceIdWhenUsingFeignClientWithoutResponseBody() { - return $((ResponseEntityProvider) (tests) -> tests.testFeignInterface.noResponseBody(), - (ResponseEntityProvider) (tests) -> tests.template.getForEntity("http://fooservice/noresponse", String.class)); + Object[] parametersForShouldAttachTraceIdWhenUsingFeignClientWithoutResponseBody() { + return $( + (ResponseEntityProvider) (tests) -> tests.testFeignInterface + .noResponseBody(), + (ResponseEntityProvider) (tests) -> tests.template + .getForEntity("http://fooservice/noresponse", String.class)); } private void thenRegisteredClientSentAndReceivedEvents(Span span) { @@ -223,7 +239,7 @@ public class WebClientTests { @LoadBalanced @Bean public RestTemplate restTemplate() { - return new RestTemplate(); + return new RestTemplate(); } } @@ -244,7 +260,8 @@ public class WebClientTests { @RestController public static class FooController { - @Autowired Tracer tracer; + @Autowired + Tracer tracer; @RequestMapping(value = "/notrace", method = RequestMethod.GET) public String notrace( @@ -299,6 +316,7 @@ public class WebClientTests { @FunctionalInterface interface ResponseEntityProvider { + @SuppressWarnings("rawtypes") ResponseEntity get(WebClientTests webClientTests); } } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/zuul/TraceRestClientRibbonCommandFactoryTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/zuul/TraceRestClientRibbonCommandFactoryTest.java index cc2f6983a..2930b531f 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/zuul/TraceRestClientRibbonCommandFactoryTest.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/zuul/TraceRestClientRibbonCommandFactoryTest.java @@ -16,6 +16,11 @@ package org.springframework.cloud.sleuth.instrument.zuul; +import static org.assertj.core.api.BDDAssertions.then; +import static org.mockito.BDDMockito.given; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyString; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -31,74 +36,65 @@ import org.springframework.cloud.sleuth.Tracer; import com.netflix.client.http.HttpRequest; import com.netflix.niws.client.http.RestClient; -import static org.assertj.core.api.BDDAssertions.then; -import static org.mockito.BDDMockito.given; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyString; - /** * @author Marcin Grzejszczak */ @RunWith(MockitoJUnitRunner.class) public class TraceRestClientRibbonCommandFactoryTest { - @Mock Tracer tracer; - @Mock SpringClientFactory springClientFactory; + @Mock + Tracer tracer; + @Mock + SpringClientFactory springClientFactory; SpanInjector spanInjector = new RequestBuilderContextInjector(); TraceRestClientRibbonCommandFactory traceRestClientRibbonCommandFactory; @Before - @SuppressWarnings({"deprecation", "unchecked"}) + @SuppressWarnings({ "deprecation", "unchecked" }) public void setup() { this.traceRestClientRibbonCommandFactory = new TraceRestClientRibbonCommandFactory( this.springClientFactory, this.tracer, this.spanInjector); - given(this.springClientFactory.getClient(anyString(), any(Class.class))).willReturn(new RestClient()); - Span span = Span.builder() - .name("name") - .spanId(1L) - .traceId(2L) - .parent(3L) - .processId("processId") - .build(); + given(this.springClientFactory.getClient(anyString(), any(Class.class))) + .willReturn(new RestClient()); + Span span = Span.builder().name("name").spanId(1L).traceId(2L).parent(3L) + .processId("processId").build(); given(this.tracer.getCurrentSpan()).willReturn(span); given(this.tracer.isTracing()).willReturn(true); } @Test public void should_wrap_ribbon_command_in_a_sleuth_representation() throws Exception { - RestClientRibbonCommand restClientRibbonCommand = - this.traceRestClientRibbonCommandFactory.create(ribbonCommandContext()); + RestClientRibbonCommand restClientRibbonCommand = this.traceRestClientRibbonCommandFactory + .create(ribbonCommandContext()); - then(restClientRibbonCommand) - .isInstanceOf(TraceRestClientRibbonCommandFactory.TraceRestClientRibbonCommand.class); + then(restClientRibbonCommand).isInstanceOf( + TraceRestClientRibbonCommandFactory.TraceRestClientRibbonCommand.class); } @Test public void should_attach_trace_headers_to_the_sent_request() throws Exception { - RestClientRibbonCommand restClientRibbonCommand = this.traceRestClientRibbonCommandFactory.create(ribbonCommandContext()); - TraceRestClientRibbonCommandFactory.TraceRestClientRibbonCommand traceRestClientRibbonCommand = - (TraceRestClientRibbonCommandFactory.TraceRestClientRibbonCommand) restClientRibbonCommand; + RestClientRibbonCommand restClientRibbonCommand = this.traceRestClientRibbonCommandFactory + .create(ribbonCommandContext()); + TraceRestClientRibbonCommandFactory.TraceRestClientRibbonCommand traceRestClientRibbonCommand = (TraceRestClientRibbonCommandFactory.TraceRestClientRibbonCommand) restClientRibbonCommand; HttpRequest.Builder builder = new HttpRequest.Builder(); traceRestClientRibbonCommand.customizeRequest(builder); HttpRequest httpRequest = builder.build(); - then(httpRequest.getHttpHeaders().getFirstValue(Span.SPAN_ID_NAME)).isEqualTo("1"); - then(httpRequest.getHttpHeaders().getFirstValue(Span.TRACE_ID_NAME)).isEqualTo("2"); - then(httpRequest.getHttpHeaders().getFirstValue(Span.SPAN_NAME_NAME)).isEqualTo("name"); - then(httpRequest.getHttpHeaders().getFirstValue(Span.PARENT_ID_NAME)).isEqualTo("3"); - then(httpRequest.getHttpHeaders().getFirstValue(Span.PROCESS_ID_NAME)).isEqualTo("processId"); + then(httpRequest.getHttpHeaders().getFirstValue(Span.SPAN_ID_NAME)) + .isEqualTo("1"); + then(httpRequest.getHttpHeaders().getFirstValue(Span.TRACE_ID_NAME)) + .isEqualTo("2"); + then(httpRequest.getHttpHeaders().getFirstValue(Span.SPAN_NAME_NAME)) + .isEqualTo("name"); + then(httpRequest.getHttpHeaders().getFirstValue(Span.PARENT_ID_NAME)) + .isEqualTo("3"); + then(httpRequest.getHttpHeaders().getFirstValue(Span.PROCESS_ID_NAME)) + .isEqualTo("processId"); } private RibbonCommandContext ribbonCommandContext() { - return new RibbonCommandContext( - "serviceId", - "GET", - "http://localhost:1234/foo", - false, - null, - null, - null - ); + return new RibbonCommandContext("serviceId", "GET", "http://localhost:1234/foo", + false, null, null, null); } } \ No newline at end of file