From dd13f098443de5634a7ed2263c7b46801c182a9a Mon Sep 17 00:00:00 2001 From: Adrian Cole Date: Fri, 6 Mar 2020 11:07:00 +0800 Subject: [PATCH] Adds first unit test for HttpClientBeanPostProcessor (#1580) --- .../HttpClientBeanPostProcessorTest.java | 72 +++++++++++++++++++ .../web/TraceFilterWebIntegrationTests.java | 3 +- 2 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/HttpClientBeanPostProcessorTest.java diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/HttpClientBeanPostProcessorTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/HttpClientBeanPostProcessorTest.java new file mode 100644 index 000000000..b7c7de7fb --- /dev/null +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/HttpClientBeanPostProcessorTest.java @@ -0,0 +1,72 @@ +/* + * Copyright 2013-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.sleuth.instrument.web.client; + +import brave.propagation.TraceContext; +import io.netty.bootstrap.Bootstrap; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import reactor.core.publisher.Mono; +import reactor.netty.Connection; + +import org.springframework.cloud.sleuth.instrument.web.client.HttpClientBeanPostProcessor.PendingSpan; +import org.springframework.cloud.sleuth.instrument.web.client.HttpClientBeanPostProcessor.TracingMapConnect; + +import static org.assertj.core.api.Assertions.assertThat; + +@ExtendWith(MockitoExtension.class) +public class HttpClientBeanPostProcessorTest { + + @Mock + Connection connection; + + @Mock + Bootstrap bootstrap; + + TraceContext traceContext = TraceContext.newBuilder().traceId(1).spanId(2) + .sampled(true).build(); + + @Test + void mapConnect_should_setup_reactor_context_currentTraceContext() { + TracingMapConnect tracingMapConnect = new TracingMapConnect(() -> traceContext); + + Mono original = Mono.just(connection).handle((t, ctx) -> { + assertThat(ctx.currentContext().get(TraceContext.class)) + .isSameAs(traceContext); + assertThat(ctx.currentContext().get(PendingSpan.class)).isNotNull(); + }); + + // Wrap and run the assertions + tracingMapConnect.apply(original, bootstrap).log().subscribe(); + } + + @Test + void mapConnect_should_setup_reactor_context_no_currentTraceContext() { + TracingMapConnect tracingMapConnect = new TracingMapConnect(() -> null); + + Mono original = Mono.just(connection).handle((t, ctx) -> { + assertThat(ctx.currentContext().getOrEmpty(TraceContext.class)).isEmpty(); + assertThat(ctx.currentContext().get(PendingSpan.class)).isNotNull(); + }); + + // Wrap and run the assertions + tracingMapConnect.apply(original, bootstrap).log().subscribe(); + } + +} diff --git a/tests/spring-cloud-sleuth-instrumentation-mvc-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterWebIntegrationTests.java b/tests/spring-cloud-sleuth-instrumentation-mvc-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterWebIntegrationTests.java index 3a8afcb6f..4831fa6bc 100644 --- a/tests/spring-cloud-sleuth-instrumentation-mvc-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterWebIntegrationTests.java +++ b/tests/spring-cloud-sleuth-instrumentation-mvc-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterWebIntegrationTests.java @@ -58,11 +58,12 @@ import static org.assertj.core.api.BDDAssertions.then; /** * @author Marcin Grzejszczak */ -@ExtendWith({SpringExtension.class, OutputCaptureExtension.class}) +@ExtendWith({ SpringExtension.class, OutputCaptureExtension.class }) @SpringBootTest(classes = TraceFilterWebIntegrationTests.Config.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = "spring.sleuth.http.legacy.enabled=true") public class TraceFilterWebIntegrationTests { + @Autowired BlockingQueueSpanReporter reporter;