Skip to content

Commit 1ceb076

Browse files
committed
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
1 parent c0e45b7 commit 1ceb076

File tree

7 files changed

+44
-68
lines changed

7 files changed

+44
-68
lines changed

Diff for: spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/amqp/RabbitMetricsAutoConfigurationTests.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@
3434
public class RabbitMetricsAutoConfigurationTests {
3535

3636
private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
37-
.with(MetricsRun.simple())
38-
.withConfiguration(AutoConfigurations.of(RabbitAutoConfiguration.class));
37+
.with(MetricsRun.simple()).withConfiguration(AutoConfigurations.of(
38+
RabbitAutoConfiguration.class, RabbitMetricsAutoConfiguration.class));
3939

4040
@Test
4141
public void autoConfiguredConnectionFactoryIsInstrumented() {

Diff for: spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/cache/CacheMetricsAutoConfigurationTests.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ public class CacheMetricsAutoConfigurationTests {
3737

3838
private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
3939
.with(MetricsRun.simple()).withUserConfiguration(CachingConfiguration.class)
40-
.withConfiguration(AutoConfigurations.of(CacheAutoConfiguration.class));
40+
.withConfiguration(AutoConfigurations.of(CacheAutoConfiguration.class,
41+
CacheMetricsAutoConfiguration.class));
4142

4243
@Test
4344
public void autoConfiguredCacheManagerIsInstrumented() {

Diff for: spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/test/MetricsRun.java

+8-18
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@
2323

2424
import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
2525
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
26-
import org.springframework.boot.actuate.autoconfigure.metrics.amqp.RabbitMetricsAutoConfiguration;
27-
import org.springframework.boot.actuate.autoconfigure.metrics.cache.CacheMetricsAutoConfiguration;
2826
import org.springframework.boot.actuate.autoconfigure.metrics.export.atlas.AtlasMetricsExportAutoConfiguration;
2927
import org.springframework.boot.actuate.autoconfigure.metrics.export.datadog.DatadogMetricsExportAutoConfiguration;
3028
import org.springframework.boot.actuate.autoconfigure.metrics.export.ganglia.GangliaMetricsExportAutoConfiguration;
@@ -36,12 +34,8 @@
3634
import org.springframework.boot.actuate.autoconfigure.metrics.export.signalfx.SignalFxMetricsExportAutoConfiguration;
3735
import org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration;
3836
import org.springframework.boot.actuate.autoconfigure.metrics.export.statsd.StatsdMetricsExportAutoConfiguration;
39-
import org.springframework.boot.actuate.autoconfigure.metrics.jdbc.DataSourcePoolMetricsAutoConfiguration;
40-
import org.springframework.boot.actuate.autoconfigure.metrics.orm.jpa.HibernateMetricsAutoConfiguration;
41-
import org.springframework.boot.actuate.autoconfigure.metrics.web.client.HttpClientMetricsAutoConfiguration;
42-
import org.springframework.boot.actuate.autoconfigure.metrics.web.reactive.WebFluxMetricsAutoConfiguration;
43-
import org.springframework.boot.actuate.autoconfigure.metrics.web.servlet.WebMvcMetricsAutoConfiguration;
4437
import org.springframework.boot.autoconfigure.AutoConfigurations;
38+
import org.springframework.boot.test.context.runner.AbstractApplicationContextRunner;
4539
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
4640
import org.springframework.util.Assert;
4741

@@ -73,12 +67,8 @@ public final class MetricsRun {
7367
}
7468

7569
private static final AutoConfigurations AUTO_CONFIGURATIONS = AutoConfigurations.of(
76-
MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class,
77-
RabbitMetricsAutoConfiguration.class, CacheMetricsAutoConfiguration.class,
78-
DataSourcePoolMetricsAutoConfiguration.class,
79-
HibernateMetricsAutoConfiguration.class,
80-
HttpClientMetricsAutoConfiguration.class,
81-
WebFluxMetricsAutoConfiguration.class, WebMvcMetricsAutoConfiguration.class);
70+
MetricsAutoConfiguration.class,
71+
CompositeMeterRegistryAutoConfiguration.class);
8272

8373
private MetricsRun() {
8474
}
@@ -88,7 +78,7 @@ private MetricsRun() {
8878
* implementation.
8979
* @return the function to apply
9080
*/
91-
public static Function<ApplicationContextRunner, ApplicationContextRunner> simple() {
81+
public static <T extends AbstractApplicationContextRunner<?, ?, ?>> Function<T, T> simple() {
9282
return limitedTo(SimpleMetricsExportAutoConfiguration.class);
9383
}
9484

@@ -98,18 +88,18 @@ public static Function<ApplicationContextRunner, ApplicationContextRunner> simpl
9888
* @param exportAutoConfigurations the export auto-configurations to include
9989
* @return the function to apply
10090
*/
101-
public static Function<ApplicationContextRunner, ApplicationContextRunner> limitedTo(
91+
public static <T extends AbstractApplicationContextRunner<?, ?, ?>> Function<T, T> limitedTo(
10292
Class<?>... exportAutoConfigurations) {
10393
return (contextRunner) -> apply(contextRunner, exportAutoConfigurations);
10494
}
10595

106-
private static ApplicationContextRunner apply(ApplicationContextRunner contextRunner,
107-
Class<?>[] exportAutoConfigurations) {
96+
private static <T extends AbstractApplicationContextRunner<?, ?, ?>> T apply(
97+
T contextRunner, Class<?>[] exportAutoConfigurations) {
10898
for (Class<?> configuration : exportAutoConfigurations) {
10999
Assert.state(EXPORT_AUTO_CONFIGURATIONS.contains(configuration),
110100
() -> "Unknown export auto-configuration " + configuration.getName());
111101
}
112-
return contextRunner
102+
return (T) contextRunner
113103
.withPropertyValues("management.metrics.use-global-registry=false")
114104
.withConfiguration(AUTO_CONFIGURATIONS)
115105
.withConfiguration(AutoConfigurations.of(exportAutoConfigurations));

Diff for: spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/client/RestTemplateMetricsConfigurationTests.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,9 @@
4545
public class RestTemplateMetricsConfigurationTests {
4646

4747
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
48-
.with(MetricsRun.simple()).withConfiguration(
49-
AutoConfigurations.of(RestTemplateAutoConfiguration.class));
48+
.with(MetricsRun.simple())
49+
.withConfiguration(AutoConfigurations.of(RestTemplateAutoConfiguration.class,
50+
HttpClientMetricsAutoConfiguration.class));
5051

5152
@Rule
5253
public OutputCapture out = new OutputCapture();

Diff for: spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/client/WebClientMetricsConfigurationTests.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ public class WebClientMetricsConfigurationTests {
5050

5151
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
5252
.with(MetricsRun.simple())
53-
.withConfiguration(AutoConfigurations.of(WebClientAutoConfiguration.class));
53+
.withConfiguration(AutoConfigurations.of(WebClientAutoConfiguration.class,
54+
HttpClientMetricsAutoConfiguration.class));
5455

5556
@Rule
5657
public OutputCapture out = new OutputCapture();

Diff for: spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/reactive/WebFluxMetricsAutoConfigurationTests.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@
2020
import org.junit.Rule;
2121
import org.junit.Test;
2222

23-
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
24-
import org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration;
23+
import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun;
2524
import org.springframework.boot.actuate.autoconfigure.metrics.web.TestController;
2625
import org.springframework.boot.actuate.metrics.web.reactive.server.DefaultWebFluxTagsProvider;
2726
import org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter;
@@ -47,9 +46,8 @@
4746
public class WebFluxMetricsAutoConfigurationTests {
4847

4948
private ReactiveWebApplicationContextRunner contextRunner = new ReactiveWebApplicationContextRunner()
50-
.withConfiguration(AutoConfigurations.of(MetricsAutoConfiguration.class,
51-
SimpleMetricsExportAutoConfiguration.class,
52-
WebFluxMetricsAutoConfiguration.class));
49+
.with(MetricsRun.simple()).withConfiguration(
50+
AutoConfigurations.of(WebFluxMetricsAutoConfiguration.class));
5351

5452
@Rule
5553
public OutputCapture output = new OutputCapture();

Diff for: spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/servlet/WebMvcMetricsAutoConfigurationTests.java

+24-39
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@
2626

2727
import io.micrometer.core.instrument.MeterRegistry;
2828
import io.micrometer.core.instrument.Tag;
29-
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
3029
import org.junit.Rule;
3130
import org.junit.Test;
3231

3332
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
33+
import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun;
3434
import org.springframework.boot.actuate.autoconfigure.metrics.web.TestController;
3535
import org.springframework.boot.actuate.metrics.web.servlet.DefaultWebMvcTagsProvider;
3636
import org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter;
@@ -60,57 +60,54 @@
6060
public class WebMvcMetricsAutoConfigurationTests {
6161

6262
private WebApplicationContextRunner contextRunner = new WebApplicationContextRunner()
63-
.withConfiguration(
63+
.with(MetricsRun.simple()).withConfiguration(
6464
AutoConfigurations.of(WebMvcMetricsAutoConfiguration.class));
6565

6666
@Rule
6767
public OutputCapture output = new OutputCapture();
6868

6969
@Test
7070
public void backsOffWhenMeterRegistryIsMissing() {
71-
this.contextRunner.run((context) -> assertThat(context)
72-
.doesNotHaveBean(WebMvcMetricsAutoConfiguration.class));
71+
new WebApplicationContextRunner()
72+
.withConfiguration(
73+
AutoConfigurations.of(WebMvcMetricsAutoConfiguration.class))
74+
.run((context) -> assertThat(context)
75+
.doesNotHaveBean(WebMvcTagsProvider.class));
7376
}
7477

7578
@Test
7679
public void definesTagsProviderAndFilterWhenMeterRegistryIsPresent() {
77-
this.contextRunner.withUserConfiguration(MeterRegistryConfiguration.class)
78-
.run((context) -> {
79-
assertThat(context).hasSingleBean(DefaultWebMvcTagsProvider.class);
80-
assertThat(context).hasSingleBean(FilterRegistrationBean.class);
81-
assertThat(context.getBean(FilterRegistrationBean.class).getFilter())
82-
.isInstanceOf(WebMvcMetricsFilter.class);
83-
});
80+
this.contextRunner.run((context) -> {
81+
assertThat(context).hasSingleBean(DefaultWebMvcTagsProvider.class);
82+
assertThat(context).hasSingleBean(FilterRegistrationBean.class);
83+
assertThat(context.getBean(FilterRegistrationBean.class).getFilter())
84+
.isInstanceOf(WebMvcMetricsFilter.class);
85+
});
8486
}
8587

8688
@Test
8789
public void tagsProviderBacksOff() {
88-
this.contextRunner.withUserConfiguration(MeterRegistryConfiguration.class,
89-
TagsProviderConfiguration.class).run((context) -> {
90+
this.contextRunner.withUserConfiguration(TagsProviderConfiguration.class)
91+
.run((context) -> {
9092
assertThat(context).doesNotHaveBean(DefaultWebMvcTagsProvider.class);
9193
assertThat(context).hasSingleBean(TestWebMvcTagsProvider.class);
9294
});
9395
}
9496

9597
@Test
9698
public void filterRegistrationHasExpectedDispatcherTypesAndOrder() {
97-
this.contextRunner.withUserConfiguration(MeterRegistryConfiguration.class)
98-
.run((context) -> {
99-
FilterRegistrationBean<?> registration = context
100-
.getBean(FilterRegistrationBean.class);
101-
assertThat(registration).hasFieldOrPropertyWithValue(
102-
"dispatcherTypes",
103-
EnumSet.of(DispatcherType.REQUEST, DispatcherType.ASYNC));
104-
assertThat(registration.getOrder())
105-
.isEqualTo(Ordered.HIGHEST_PRECEDENCE + 1);
106-
});
99+
this.contextRunner.run((context) -> {
100+
FilterRegistrationBean<?> registration = context
101+
.getBean(FilterRegistrationBean.class);
102+
assertThat(registration).hasFieldOrPropertyWithValue("dispatcherTypes",
103+
EnumSet.of(DispatcherType.REQUEST, DispatcherType.ASYNC));
104+
assertThat(registration.getOrder()).isEqualTo(Ordered.HIGHEST_PRECEDENCE + 1);
105+
});
107106
}
108107

109108
@Test
110109
public void afterMaxUrisReachedFurtherUrisAreDenied() {
111-
this.contextRunner
112-
.withUserConfiguration(TestController.class,
113-
MeterRegistryConfiguration.class)
110+
this.contextRunner.withUserConfiguration(TestController.class)
114111
.withConfiguration(AutoConfigurations.of(MetricsAutoConfiguration.class,
115112
WebMvcAutoConfiguration.class))
116113
.withPropertyValues("management.metrics.web.server.max-uri-tags=2")
@@ -125,9 +122,7 @@ public void afterMaxUrisReachedFurtherUrisAreDenied() {
125122

126123
@Test
127124
public void shouldNotDenyNorLogIfMaxUrisIsNotReached() {
128-
this.contextRunner
129-
.withUserConfiguration(TestController.class,
130-
MeterRegistryConfiguration.class)
125+
this.contextRunner.withUserConfiguration(TestController.class)
131126
.withConfiguration(AutoConfigurations.of(MetricsAutoConfiguration.class,
132127
WebMvcAutoConfiguration.class))
133128
.withPropertyValues("management.metrics.web.server.max-uri-tags=5")
@@ -154,16 +149,6 @@ private MeterRegistry getInitializedMeterRegistry(
154149
return context.getBean(MeterRegistry.class);
155150
}
156151

157-
@Configuration
158-
static class MeterRegistryConfiguration {
159-
160-
@Bean
161-
public MeterRegistry meterRegistry() {
162-
return new SimpleMeterRegistry();
163-
}
164-
165-
}
166-
167152
@Configuration
168153
static class TagsProviderConfiguration {
169154

0 commit comments

Comments
 (0)