diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/AdhocTestSuite.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/AdhocTestSuite.java index a0fd69fd8..b49a2db26 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/AdhocTestSuite.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/AdhocTestSuite.java @@ -16,12 +16,11 @@ package org.springframework.cloud.sleuth; -import org.junit.Ignore; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; -import org.springframework.cloud.sleuth.instrument.web.TraceFilterCustomExtractorTests; -import org.springframework.cloud.sleuth.instrument.web.client.WebClientExceptionTests; +import org.springframework.cloud.sleuth.instrument.web.RestTemplateTraceAspectIntegrationTests; +import org.springframework.cloud.sleuth.instrument.web.client.WebClientDiscoveryExceptionTests; /** * A test suite for probing weird ordering problems in the tests. @@ -29,8 +28,9 @@ import org.springframework.cloud.sleuth.instrument.web.client.WebClientException * @author Dave Syer */ @RunWith(Suite.class) -@SuiteClasses({ TraceFilterCustomExtractorTests.class, WebClientExceptionTests.class }) -@Ignore +@SuiteClasses({ WebClientDiscoveryExceptionTests.class, + RestTemplateTraceAspectIntegrationTests.class }) +// @Ignore public class AdhocTestSuite { } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/RestTemplateTraceAspectIntegrationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/RestTemplateTraceAspectIntegrationTests.java index 40e211471..9f6a5018e 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/RestTemplateTraceAspectIntegrationTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/RestTemplateTraceAspectIntegrationTests.java @@ -22,7 +22,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Import; import org.springframework.core.env.Environment; import org.springframework.http.MediaType; -import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.web.servlet.MockMvc; @@ -39,7 +38,7 @@ import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.request.async.WebAsyncTask; @SpringApplicationConfiguration(classes = { - RestTemplateTraceAspectIntegrationTests.CorrelationIdAspectTestConfiguration.class }) + RestTemplateTraceAspectIntegrationTests.Config.class }) @RunWith(SpringJUnit4ClassRunner.class) @WebIntegrationTest(randomPort = true) @DirtiesContext @@ -113,10 +112,9 @@ public class RestTemplateTraceAspectIntegrationTests { .andExpect(status().isOk()); } - @EnableAsync @DefaultTestAutoConfiguration @Import(AspectTestingController.class) - public static class CorrelationIdAspectTestConfiguration { + public static class Config { @Bean public RestTemplate restTemplate() { return new RestTemplate(); diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterAlwaysSamplerIntegrationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterAlwaysSamplerIntegrationTests.java index 19c842b02..15aee6a97 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterAlwaysSamplerIntegrationTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterAlwaysSamplerIntegrationTests.java @@ -14,7 +14,6 @@ import org.springframework.cloud.sleuth.NoOpSpanReporter; import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.instrument.DefaultTestAutoConfiguration; -import org.springframework.cloud.sleuth.TraceKeys; import org.springframework.cloud.sleuth.instrument.web.common.AbstractMvcIntegrationTest; import org.springframework.cloud.sleuth.sampler.AlwaysSampler; import org.springframework.context.annotation.Configuration; @@ -29,30 +28,14 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(TraceFilterAlwaysSamplerIntegrationTests.class) -@DefaultTestAutoConfiguration -@RestController -@Configuration -@Import(AlwaysSampler.class) +@SpringApplicationConfiguration(TraceFilterAlwaysSamplerIntegrationTests.Config.class) public class TraceFilterAlwaysSamplerIntegrationTests extends AbstractMvcIntegrationTest { private static Log logger = LogFactory .getLog(TraceFilterAlwaysSamplerIntegrationTests.class); - @Autowired - Tracer tracer; - @Autowired - TraceKeys traceKeys; - static Span span; - @RequestMapping("/ping") - public String ping() { - logger.info("ping"); - span = this.tracer.getCurrentSpan(); - return "ping"; - } - @Test public void when_always_sampler_is_used_span_is_exportable() throws Exception { Long expectedTraceId = new Random().nextLong(); @@ -106,4 +89,23 @@ public class TraceFilterAlwaysSamplerIntegrationTests extends AbstractMvcIntegra private Long tracingHeaderFrom(MvcResult mvcResult) { return Span.hexToId(mvcResult.getResponse().getHeader(Span.TRACE_ID_NAME)); } + + @DefaultTestAutoConfiguration + @RestController + @Configuration + @Import(AlwaysSampler.class) + static class Config { + + @Autowired + private Tracer tracer; + + @RequestMapping("/ping") + public String ping() { + logger.info("ping"); + span = this.tracer.getCurrentSpan(); + return "ping"; + } + + } + } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterIntegrationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterIntegrationTests.java index 866cd83f9..28c41e68d 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterIntegrationTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterIntegrationTests.java @@ -1,5 +1,10 @@ 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 static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + import java.util.Random; import java.util.concurrent.CompletableFuture; @@ -12,7 +17,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.autoconfigure.ManagementServerProperties; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.TraceKeys; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.instrument.DefaultTestAutoConfiguration; import org.springframework.cloud.sleuth.instrument.web.common.AbstractMvcIntegrationTest; @@ -26,47 +30,29 @@ import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import static org.springframework.cloud.sleuth.assertions.SleuthAssertions.then; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - @RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(TraceFilterIntegrationTests.class) -@DefaultTestAutoConfiguration -@RestController +@SpringApplicationConfiguration(TraceFilterIntegrationTests.Config.class) public class TraceFilterIntegrationTests extends AbstractMvcIntegrationTest { private static Log logger = LogFactory.getLog(TraceFilterIntegrationTests.class); - @Autowired Tracer tracer; - @Autowired TraceKeys traceKeys; - @Autowired TraceFilter traceFilter; + @Autowired + private TraceFilter traceFilter; - static Span span; - - @RequestMapping("/ping") - public String ping() { - logger.info("ping"); - span = this.tracer.getCurrentSpan(); - return "ping"; - } - - @RequestMapping("/future") - public CompletableFuture future() { - logger.info("future"); - return CompletableFuture.completedFuture("ping"); - } + private static Span span; @Test public void should_create_and_return_trace_in_HTTP_header() throws Exception { MvcResult mvcResult = whenSentPingWithoutTracingData(); then(tracingHeaderFrom(mvcResult)).isNotNull(); - then(TraceFilterIntegrationTests.span).hasLoggedAnEvent(Span.SERVER_RECV).hasLoggedAnEvent(Span.SERVER_SEND); + then(TraceFilterIntegrationTests.span).hasLoggedAnEvent(Span.SERVER_RECV) + .hasLoggedAnEvent(Span.SERVER_SEND); } @Test - public void should_ignore_sampling_the_span_if_uri_matches_management_properties_context_path() throws Exception { + public void should_ignore_sampling_the_span_if_uri_matches_management_properties_context_path() + throws Exception { MvcResult mvcResult = whenSentInfoWithTraceId(new Random().nextLong()); then(notSampledHeaderIsPresent(mvcResult)).isEqualTo(true); @@ -83,8 +69,7 @@ public class TraceFilterIntegrationTests extends AbstractMvcIntegrationTest { } @Test - public void when_message_is_sent_should_eventually_clear_mdc() - throws Exception { + public void when_message_is_sent_should_eventually_clear_mdc() throws Exception { Long expectedTraceId = new Random().nextLong(); whenSentPingWithTraceId(expectedTraceId); @@ -93,13 +78,12 @@ public class TraceFilterIntegrationTests extends AbstractMvcIntegrationTest { } @Test - public void when_traceId_is_sent_to_async_endpoint_span_is_joined() - throws Exception { + public void when_traceId_is_sent_to_async_endpoint_span_is_joined() throws Exception { Long expectedTraceId = new Random().nextLong(); MvcResult mvcResult = whenSentFutureWithTraceId(expectedTraceId); - mvcResult = this.mockMvc.perform(asyncDispatch(mvcResult)).andExpect(status().isOk()) - .andReturn(); + mvcResult = this.mockMvc.perform(asyncDispatch(mvcResult)) + .andExpect(status().isOk()).andReturn(); then(tracingHeaderFrom(mvcResult)).isEqualTo(expectedTraceId); } @@ -120,7 +104,8 @@ public class TraceFilterIntegrationTests extends AbstractMvcIntegrationTest { } private MvcResult whenSentInfoWithTraceId(Long passedTraceId) throws Exception { - return sendPingWithTraceId("/additionalContextPath/info", Span.TRACE_ID_NAME, passedTraceId); + return sendPingWithTraceId("/additionalContextPath/info", Span.TRACE_ID_NAME, + passedTraceId); } private MvcResult whenSentFutureWithTraceId(Long passedTraceId) throws Exception { @@ -132,8 +117,8 @@ public class TraceFilterIntegrationTests extends AbstractMvcIntegrationTest { return sendPingWithTraceId("/ping", headerName, traceId); } - private MvcResult sendPingWithTraceId(String path, String headerName, - Long traceId) throws Exception { + private MvcResult sendPingWithTraceId(String path, String headerName, Long traceId) + throws Exception { return this.mockMvc .perform(MockMvcRequestBuilders.get(path).accept(MediaType.TEXT_PLAIN) .header(headerName, Span.idToHex(traceId)) @@ -146,16 +131,39 @@ public class TraceFilterIntegrationTests extends AbstractMvcIntegrationTest { } private boolean notSampledHeaderIsPresent(MvcResult mvcResult) { - return Span.SPAN_NOT_SAMPLED.equals(mvcResult.getResponse().getHeader(Span.SAMPLED_NAME)); + return Span.SPAN_NOT_SAMPLED + .equals(mvcResult.getResponse().getHeader(Span.SAMPLED_NAME)); } + @DefaultTestAutoConfiguration + @RestController @Configuration - static class Config { - @Bean - ManagementServerProperties managementServerProperties() { - ManagementServerProperties managementServerProperties = new ManagementServerProperties(); - managementServerProperties.setContextPath("/additionalContextPath"); - return managementServerProperties; + protected static class Config { + + @Autowired + private Tracer tracer; + + @RequestMapping("/ping") + public String ping() { + logger.info("ping"); + span = this.tracer.getCurrentSpan(); + return "ping"; + } + + @RequestMapping("/future") + public CompletableFuture future() { + logger.info("future"); + return CompletableFuture.completedFuture("ping"); + } + + @Configuration + static class ManagementServer { + @Bean + ManagementServerProperties managementServerProperties() { + ManagementServerProperties managementServerProperties = new ManagementServerProperties(); + managementServerProperties.setContextPath("/additionalContextPath"); + return managementServerProperties; + } } } } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/WebClientDiscoveryExceptionTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/WebClientDiscoveryExceptionTests.java index 9a7fdb7a5..f69b92779 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/WebClientDiscoveryExceptionTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/WebClientDiscoveryExceptionTests.java @@ -16,7 +16,6 @@ package org.springframework.cloud.sleuth.instrument.web.client; -import static junitparams.JUnitParamsRunner.$; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.nullValue; import static org.junit.Assert.assertThat; @@ -27,8 +26,6 @@ import java.util.Map; import org.junit.After; import org.junit.Assert; import org.junit.Before; -import org.junit.ClassRule; -import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -48,27 +45,20 @@ import org.springframework.cloud.sleuth.util.ExceptionUtils; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.ResponseEntity; -import org.springframework.test.context.junit4.rules.SpringClassRule; -import org.springframework.test.context.junit4.rules.SpringMethodRule; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.client.RestTemplate; -import junitparams.JUnitParamsRunner; -import junitparams.Parameters; - -@RunWith(JUnitParamsRunner.class) +@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = { WebClientDiscoveryExceptionTests.TestConfiguration.class }) @WebIntegrationTest(value = { "spring.application.name=exceptionservice" }, randomPort = true) +@DirtiesContext public class WebClientDiscoveryExceptionTests { - @ClassRule - public static final SpringClassRule SCR = new SpringClassRule(); - @Rule - public final SpringMethodRule springMethodRule = new SpringMethodRule(); - @Autowired TestFeignInterfaceWithException testFeignInterfaceWithException; @Autowired @@ -90,9 +80,7 @@ public class WebClientDiscoveryExceptionTests { } // issue #240 - @Test - @Parameters - public void shouldCloseSpanUponException(ResponseEntityProvider provider) + private void shouldCloseSpanUponException(ResponseEntityProvider provider) throws IOException { Span span = this.tracer.createSpan("new trace"); @@ -109,12 +97,17 @@ public class WebClientDiscoveryExceptionTests { this.tracer.close(span); } - Object[] parametersForShouldCloseSpanUponException() { - return $( + @Test + public void testFeignInterfaceWithException() throws Exception { + shouldCloseSpanUponException( (ResponseEntityProvider) (tests) -> tests.testFeignInterfaceWithException - .shouldFailToConnect(), - (ResponseEntityProvider) (tests) -> tests.template - .getForEntity("http://exceptionservice/", Map.class)); + .shouldFailToConnect()); + } + + @Test + public void testTemplate() throws Exception { + shouldCloseSpanUponException((ResponseEntityProvider) (tests) -> tests.template + .getForEntity("http://exceptionservice/", Map.class)); } @FeignClient("exceptionservice")