From 1ceb076035ac68369ddb7f68485ee23b61d8ea20 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Tue, 4 Sep 2018 15:04:02 +0200 Subject: [PATCH] Harmonize Metrics test This commit harmonizes metrics test to rely on `MetricRun.simple()` rather than configuring a simple `MeterRegistry` manually. Rather than applying related auto-configurations automatically, `MetricsRun` only enable the absolute minimum. See gh-14255 --- .../RabbitMetricsAutoConfigurationTests.java | 4 +- .../CacheMetricsAutoConfigurationTests.java | 3 +- .../metrics/test/MetricsRun.java | 26 +++----- ...RestTemplateMetricsConfigurationTests.java | 5 +- .../WebClientMetricsConfigurationTests.java | 3 +- .../WebFluxMetricsAutoConfigurationTests.java | 8 +-- .../WebMvcMetricsAutoConfigurationTests.java | 63 +++++++------------ 7 files changed, 44 insertions(+), 68 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/amqp/RabbitMetricsAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/amqp/RabbitMetricsAutoConfigurationTests.java index 29bb34b9a9c..9578549ccfc 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/amqp/RabbitMetricsAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/amqp/RabbitMetricsAutoConfigurationTests.java @@ -34,8 +34,8 @@ import static org.assertj.core.api.Assertions.assertThat; public class RabbitMetricsAutoConfigurationTests { private ApplicationContextRunner contextRunner = new ApplicationContextRunner() - .with(MetricsRun.simple()) - .withConfiguration(AutoConfigurations.of(RabbitAutoConfiguration.class)); + .with(MetricsRun.simple()).withConfiguration(AutoConfigurations.of( + RabbitAutoConfiguration.class, RabbitMetricsAutoConfiguration.class)); @Test public void autoConfiguredConnectionFactoryIsInstrumented() { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/cache/CacheMetricsAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/cache/CacheMetricsAutoConfigurationTests.java index b70cca7fe6b..b5bcc75aa04 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/cache/CacheMetricsAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/cache/CacheMetricsAutoConfigurationTests.java @@ -37,7 +37,8 @@ public class CacheMetricsAutoConfigurationTests { private ApplicationContextRunner contextRunner = new ApplicationContextRunner() .with(MetricsRun.simple()).withUserConfiguration(CachingConfiguration.class) - .withConfiguration(AutoConfigurations.of(CacheAutoConfiguration.class)); + .withConfiguration(AutoConfigurations.of(CacheAutoConfiguration.class, + CacheMetricsAutoConfiguration.class)); @Test public void autoConfiguredCacheManagerIsInstrumented() { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/test/MetricsRun.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/test/MetricsRun.java index a53f206e967..34b3c0ef41b 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/test/MetricsRun.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/test/MetricsRun.java @@ -23,8 +23,6 @@ import java.util.function.Function; import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.metrics.amqp.RabbitMetricsAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.metrics.cache.CacheMetricsAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.metrics.export.atlas.AtlasMetricsExportAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.metrics.export.datadog.DatadogMetricsExportAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.metrics.export.ganglia.GangliaMetricsExportAutoConfiguration; @@ -36,12 +34,8 @@ import org.springframework.boot.actuate.autoconfigure.metrics.export.prometheus. import org.springframework.boot.actuate.autoconfigure.metrics.export.signalfx.SignalFxMetricsExportAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.metrics.export.statsd.StatsdMetricsExportAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.metrics.jdbc.DataSourcePoolMetricsAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.metrics.orm.jpa.HibernateMetricsAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.metrics.web.client.HttpClientMetricsAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.metrics.web.reactive.WebFluxMetricsAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.metrics.web.servlet.WebMvcMetricsAutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.runner.AbstractApplicationContextRunner; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.util.Assert; @@ -73,12 +67,8 @@ public final class MetricsRun { } private static final AutoConfigurations AUTO_CONFIGURATIONS = AutoConfigurations.of( - MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class, - RabbitMetricsAutoConfiguration.class, CacheMetricsAutoConfiguration.class, - DataSourcePoolMetricsAutoConfiguration.class, - HibernateMetricsAutoConfiguration.class, - HttpClientMetricsAutoConfiguration.class, - WebFluxMetricsAutoConfiguration.class, WebMvcMetricsAutoConfiguration.class); + MetricsAutoConfiguration.class, + CompositeMeterRegistryAutoConfiguration.class); private MetricsRun() { } @@ -88,7 +78,7 @@ public final class MetricsRun { * implementation. * @return the function to apply */ - public static Function simple() { + public static > Function simple() { return limitedTo(SimpleMetricsExportAutoConfiguration.class); } @@ -98,18 +88,18 @@ public final class MetricsRun { * @param exportAutoConfigurations the export auto-configurations to include * @return the function to apply */ - public static Function limitedTo( + public static > Function limitedTo( Class... exportAutoConfigurations) { return (contextRunner) -> apply(contextRunner, exportAutoConfigurations); } - private static ApplicationContextRunner apply(ApplicationContextRunner contextRunner, - Class[] exportAutoConfigurations) { + private static > T apply( + T contextRunner, Class[] exportAutoConfigurations) { for (Class configuration : exportAutoConfigurations) { Assert.state(EXPORT_AUTO_CONFIGURATIONS.contains(configuration), () -> "Unknown export auto-configuration " + configuration.getName()); } - return contextRunner + return (T) contextRunner .withPropertyValues("management.metrics.use-global-registry=false") .withConfiguration(AUTO_CONFIGURATIONS) .withConfiguration(AutoConfigurations.of(exportAutoConfigurations)); diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/client/RestTemplateMetricsConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/client/RestTemplateMetricsConfigurationTests.java index fa3b797652d..5e7a19ed837 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/client/RestTemplateMetricsConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/client/RestTemplateMetricsConfigurationTests.java @@ -45,8 +45,9 @@ import static org.springframework.test.web.client.response.MockRestResponseCreat public class RestTemplateMetricsConfigurationTests { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() - .with(MetricsRun.simple()).withConfiguration( - AutoConfigurations.of(RestTemplateAutoConfiguration.class)); + .with(MetricsRun.simple()) + .withConfiguration(AutoConfigurations.of(RestTemplateAutoConfiguration.class, + HttpClientMetricsAutoConfiguration.class)); @Rule public OutputCapture out = new OutputCapture(); diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/client/WebClientMetricsConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/client/WebClientMetricsConfigurationTests.java index ef3c05647b3..9bd52cda77a 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/client/WebClientMetricsConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/client/WebClientMetricsConfigurationTests.java @@ -50,7 +50,8 @@ public class WebClientMetricsConfigurationTests { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .with(MetricsRun.simple()) - .withConfiguration(AutoConfigurations.of(WebClientAutoConfiguration.class)); + .withConfiguration(AutoConfigurations.of(WebClientAutoConfiguration.class, + HttpClientMetricsAutoConfiguration.class)); @Rule public OutputCapture out = new OutputCapture(); diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/reactive/WebFluxMetricsAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/reactive/WebFluxMetricsAutoConfigurationTests.java index ff970367fc4..747f6f1db82 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/reactive/WebFluxMetricsAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/reactive/WebFluxMetricsAutoConfigurationTests.java @@ -20,8 +20,7 @@ import io.micrometer.core.instrument.MeterRegistry; import org.junit.Rule; import org.junit.Test; -import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun; import org.springframework.boot.actuate.autoconfigure.metrics.web.TestController; import org.springframework.boot.actuate.metrics.web.reactive.server.DefaultWebFluxTagsProvider; import org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter; @@ -47,9 +46,8 @@ import static org.mockito.Mockito.mock; public class WebFluxMetricsAutoConfigurationTests { private ReactiveWebApplicationContextRunner contextRunner = new ReactiveWebApplicationContextRunner() - .withConfiguration(AutoConfigurations.of(MetricsAutoConfiguration.class, - SimpleMetricsExportAutoConfiguration.class, - WebFluxMetricsAutoConfiguration.class)); + .with(MetricsRun.simple()).withConfiguration( + AutoConfigurations.of(WebFluxMetricsAutoConfiguration.class)); @Rule public OutputCapture output = new OutputCapture(); diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/servlet/WebMvcMetricsAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/servlet/WebMvcMetricsAutoConfigurationTests.java index 354f6671cda..1999bd4c22b 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/servlet/WebMvcMetricsAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/servlet/WebMvcMetricsAutoConfigurationTests.java @@ -26,11 +26,11 @@ import javax.servlet.http.HttpServletResponse; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.Tag; -import io.micrometer.core.instrument.simple.SimpleMeterRegistry; import org.junit.Rule; import org.junit.Test; import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun; import org.springframework.boot.actuate.autoconfigure.metrics.web.TestController; import org.springframework.boot.actuate.metrics.web.servlet.DefaultWebMvcTagsProvider; import org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter; @@ -60,7 +60,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. public class WebMvcMetricsAutoConfigurationTests { private WebApplicationContextRunner contextRunner = new WebApplicationContextRunner() - .withConfiguration( + .with(MetricsRun.simple()).withConfiguration( AutoConfigurations.of(WebMvcMetricsAutoConfiguration.class)); @Rule @@ -68,25 +68,27 @@ public class WebMvcMetricsAutoConfigurationTests { @Test public void backsOffWhenMeterRegistryIsMissing() { - this.contextRunner.run((context) -> assertThat(context) - .doesNotHaveBean(WebMvcMetricsAutoConfiguration.class)); + new WebApplicationContextRunner() + .withConfiguration( + AutoConfigurations.of(WebMvcMetricsAutoConfiguration.class)) + .run((context) -> assertThat(context) + .doesNotHaveBean(WebMvcTagsProvider.class)); } @Test public void definesTagsProviderAndFilterWhenMeterRegistryIsPresent() { - this.contextRunner.withUserConfiguration(MeterRegistryConfiguration.class) - .run((context) -> { - assertThat(context).hasSingleBean(DefaultWebMvcTagsProvider.class); - assertThat(context).hasSingleBean(FilterRegistrationBean.class); - assertThat(context.getBean(FilterRegistrationBean.class).getFilter()) - .isInstanceOf(WebMvcMetricsFilter.class); - }); + this.contextRunner.run((context) -> { + assertThat(context).hasSingleBean(DefaultWebMvcTagsProvider.class); + assertThat(context).hasSingleBean(FilterRegistrationBean.class); + assertThat(context.getBean(FilterRegistrationBean.class).getFilter()) + .isInstanceOf(WebMvcMetricsFilter.class); + }); } @Test public void tagsProviderBacksOff() { - this.contextRunner.withUserConfiguration(MeterRegistryConfiguration.class, - TagsProviderConfiguration.class).run((context) -> { + this.contextRunner.withUserConfiguration(TagsProviderConfiguration.class) + .run((context) -> { assertThat(context).doesNotHaveBean(DefaultWebMvcTagsProvider.class); assertThat(context).hasSingleBean(TestWebMvcTagsProvider.class); }); @@ -94,23 +96,18 @@ public class WebMvcMetricsAutoConfigurationTests { @Test public void filterRegistrationHasExpectedDispatcherTypesAndOrder() { - this.contextRunner.withUserConfiguration(MeterRegistryConfiguration.class) - .run((context) -> { - FilterRegistrationBean registration = context - .getBean(FilterRegistrationBean.class); - assertThat(registration).hasFieldOrPropertyWithValue( - "dispatcherTypes", - EnumSet.of(DispatcherType.REQUEST, DispatcherType.ASYNC)); - assertThat(registration.getOrder()) - .isEqualTo(Ordered.HIGHEST_PRECEDENCE + 1); - }); + this.contextRunner.run((context) -> { + FilterRegistrationBean registration = context + .getBean(FilterRegistrationBean.class); + assertThat(registration).hasFieldOrPropertyWithValue("dispatcherTypes", + EnumSet.of(DispatcherType.REQUEST, DispatcherType.ASYNC)); + assertThat(registration.getOrder()).isEqualTo(Ordered.HIGHEST_PRECEDENCE + 1); + }); } @Test public void afterMaxUrisReachedFurtherUrisAreDenied() { - this.contextRunner - .withUserConfiguration(TestController.class, - MeterRegistryConfiguration.class) + this.contextRunner.withUserConfiguration(TestController.class) .withConfiguration(AutoConfigurations.of(MetricsAutoConfiguration.class, WebMvcAutoConfiguration.class)) .withPropertyValues("management.metrics.web.server.max-uri-tags=2") @@ -125,9 +122,7 @@ public class WebMvcMetricsAutoConfigurationTests { @Test public void shouldNotDenyNorLogIfMaxUrisIsNotReached() { - this.contextRunner - .withUserConfiguration(TestController.class, - MeterRegistryConfiguration.class) + this.contextRunner.withUserConfiguration(TestController.class) .withConfiguration(AutoConfigurations.of(MetricsAutoConfiguration.class, WebMvcAutoConfiguration.class)) .withPropertyValues("management.metrics.web.server.max-uri-tags=5") @@ -154,16 +149,6 @@ public class WebMvcMetricsAutoConfigurationTests { return context.getBean(MeterRegistry.class); } - @Configuration - static class MeterRegistryConfiguration { - - @Bean - public MeterRegistry meterRegistry() { - return new SimpleMeterRegistry(); - } - - } - @Configuration static class TagsProviderConfiguration {