diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/zipkin/ZipkinConfigurationsSenderConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/zipkin/ZipkinConfigurationsSenderConfigurationTests.java index 3a3c5d28a7..727a6b854d 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/zipkin/ZipkinConfigurationsSenderConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/zipkin/ZipkinConfigurationsSenderConfigurationTests.java @@ -25,6 +25,7 @@ import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.FilteredClassLoader; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner; +import org.springframework.boot.test.context.runner.WebApplicationContextRunner; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -46,6 +47,9 @@ class ZipkinConfigurationsSenderConfigurationTests { private final ReactiveWebApplicationContextRunner reactiveContextRunner = new ReactiveWebApplicationContextRunner() .withConfiguration(AutoConfigurations.of(SenderConfiguration.class)); + private final WebApplicationContextRunner servletContextRunner = new WebApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(SenderConfiguration.class)); + @Test void shouldSupplyBeans() { this.contextRunner.run((context) -> { @@ -56,8 +60,8 @@ class ZipkinConfigurationsSenderConfigurationTests { } @Test - void shouldUseWebClientSenderIfWebApplicationIsReactive() { - this.reactiveContextRunner.withUserConfiguration(WebClientConfiguration.class) + void shouldPreferWebClientSenderIfWebApplicationIsReactiveAndUrlSenderIsNotAvailable() { + this.reactiveContextRunner.withUserConfiguration(RestTemplateConfiguration.class, WebClientConfiguration.class) .withClassLoader(new FilteredClassLoader("zipkin2.reporter.urlconnection")).run((context) -> { assertThat(context).doesNotHaveBean(URLConnectionSender.class); assertThat(context).hasSingleBean(Sender.class); @@ -65,6 +69,56 @@ class ZipkinConfigurationsSenderConfigurationTests { }); } + @Test + void shouldPreferWebClientSenderIfWebApplicationIsServletAndUrlSenderIsNotAvailable() { + this.servletContextRunner.withUserConfiguration(RestTemplateConfiguration.class, WebClientConfiguration.class) + .withClassLoader(new FilteredClassLoader("zipkin2.reporter.urlconnection")).run((context) -> { + assertThat(context).doesNotHaveBean(URLConnectionSender.class); + assertThat(context).hasSingleBean(Sender.class); + assertThat(context).hasSingleBean(ZipkinWebClientSender.class); + }); + } + + @Test + void shouldPreferWebClientInNonWebApplicationAndUrlConnectionSenderIsNotAvailable() { + this.contextRunner.withUserConfiguration(RestTemplateConfiguration.class, WebClientConfiguration.class) + .withClassLoader(new FilteredClassLoader("zipkin2.reporter.urlconnection")).run((context) -> { + assertThat(context).doesNotHaveBean(URLConnectionSender.class); + assertThat(context).hasSingleBean(Sender.class); + assertThat(context).hasSingleBean(ZipkinWebClientSender.class); + }); + } + + @Test + void willUseRestTemplateInNonWebApplicationIfUrlConnectionSenderIsNotAvailable() { + this.contextRunner.withUserConfiguration(RestTemplateConfiguration.class) + .withClassLoader(new FilteredClassLoader("zipkin2.reporter.urlconnection")).run((context) -> { + assertThat(context).doesNotHaveBean(URLConnectionSender.class); + assertThat(context).hasSingleBean(Sender.class); + assertThat(context).hasSingleBean(ZipkinRestTemplateSender.class); + }); + } + + @Test + void willUseRestTemplateInServletWebApplicationIfUrlConnectionSenderIsNotAvailable() { + this.servletContextRunner.withUserConfiguration(RestTemplateConfiguration.class) + .withClassLoader(new FilteredClassLoader("zipkin2.reporter.urlconnection")).run((context) -> { + assertThat(context).doesNotHaveBean(URLConnectionSender.class); + assertThat(context).hasSingleBean(Sender.class); + assertThat(context).hasSingleBean(ZipkinRestTemplateSender.class); + }); + } + + @Test + void willUseRestTemplateInReactiveWebApplicationIfUrlConnectionSenderIsNotAvailable() { + this.reactiveContextRunner.withUserConfiguration(RestTemplateConfiguration.class) + .withClassLoader(new FilteredClassLoader("zipkin2.reporter.urlconnection")).run((context) -> { + assertThat(context).doesNotHaveBean(URLConnectionSender.class); + assertThat(context).hasSingleBean(Sender.class); + assertThat(context).hasSingleBean(ZipkinRestTemplateSender.class); + }); + } + @Test void shouldNotUseWebClientSenderIfNoBuilderIsAvailable() { this.reactiveContextRunner.run((context) -> { @@ -74,18 +128,6 @@ class ZipkinConfigurationsSenderConfigurationTests { }); } - @Test - void shouldUseRestTemplateSenderIfUrlConnectionSenderIsNotAvailableAndWebAppIsNotReactive() { - this.contextRunner.withUserConfiguration(RestTemplateConfiguration.class) - .withClassLoader( - new FilteredClassLoader("zipkin2.reporter.urlconnection", "org.springframework.web.reactive")) - .run((context) -> { - assertThat(context).doesNotHaveBean(URLConnectionSender.class); - assertThat(context).hasSingleBean(Sender.class); - assertThat(context).hasSingleBean(ZipkinRestTemplateSender.class); - }); - } - @Test void shouldBackOffOnCustomBeans() { this.contextRunner.withUserConfiguration(CustomConfiguration.class).run((context) -> {