Skip to content

Commit 36b29c0

Browse files
committed
Merge pull request #33743 from msobeck
* gh-33743: Polish "Test Micrometer config to property exposure" Test Micrometer config to property exposure Closes gh-33743
2 parents 637e190 + 5c6a912 commit 36b29c0

21 files changed

+243
-18
lines changed

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/appoptics/AppOpticsPropertiesConfigAdapterTests.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2020 the original author or authors.
2+
* Copyright 2012-2023 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -30,6 +30,10 @@
3030
class AppOpticsPropertiesConfigAdapterTests
3131
extends StepRegistryPropertiesConfigAdapterTests<AppOpticsProperties, AppOpticsPropertiesConfigAdapter> {
3232

33+
AppOpticsPropertiesConfigAdapterTests() {
34+
super(AppOpticsPropertiesConfigAdapter.class);
35+
}
36+
3337
@Override
3438
protected AppOpticsProperties createProperties() {
3539
return new AppOpticsProperties();

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/atlas/AtlasPropertiesConfigAdapterTests.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,21 @@
2020

2121
import org.junit.jupiter.api.Test;
2222

23+
import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.AbstractPropertiesConfigAdapterTests;
24+
2325
import static org.assertj.core.api.Assertions.assertThat;
2426

2527
/**
2628
* Tests for {@link AtlasPropertiesConfigAdapter}.
2729
*
2830
* @author Mirko Sobeck
2931
*/
30-
class AtlasPropertiesConfigAdapterTests {
32+
class AtlasPropertiesConfigAdapterTests
33+
extends AbstractPropertiesConfigAdapterTests<AtlasProperties, AtlasPropertiesConfigAdapter> {
34+
35+
AtlasPropertiesConfigAdapterTests() {
36+
super(AtlasPropertiesConfigAdapter.class);
37+
}
3138

3239
@Test
3340
void whenPropertiesStepIsSetAdapterStepReturnsIt() {
@@ -130,4 +137,11 @@ void whenPropertiesLwcIgnorePublishStepIsSetAdapterLwcIgnorePublishStepReturnsIt
130137
assertThat(new AtlasPropertiesConfigAdapter(properties).lwcIgnorePublishStep()).isFalse();
131138
}
132139

140+
@Test
141+
@Override
142+
protected void adapterOverridesAllConfigMethods() {
143+
adapterOverridesAllConfigMethodsExcept("autoStart", "commonTags", "debugRegistry", "publisher", "rollupPolicy",
144+
"validTagCharacters");
145+
}
146+
133147
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/datadog/DatadogPropertiesConfigAdapterTests.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@
3131
class DatadogPropertiesConfigAdapterTests
3232
extends StepRegistryPropertiesConfigAdapterTests<DatadogProperties, DatadogPropertiesConfigAdapter> {
3333

34+
DatadogPropertiesConfigAdapterTests() {
35+
super(DatadogPropertiesConfigAdapter.class);
36+
}
37+
3438
@Override
3539
protected DatadogProperties createProperties() {
3640
return new DatadogProperties();

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/dynatrace/DynatracePropertiesConfigAdapterTests.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import io.micrometer.dynatrace.DynatraceApiVersion;
2222
import org.junit.jupiter.api.Test;
2323

24+
import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.AbstractPropertiesConfigAdapterTests;
25+
2426
import static org.assertj.core.api.Assertions.assertThat;
2527

2628
/**
@@ -29,7 +31,12 @@
2931
* @author Andy Wilkinson
3032
* @author Georg Pirklbauer
3133
*/
32-
class DynatracePropertiesConfigAdapterTests {
34+
class DynatracePropertiesConfigAdapterTests
35+
extends AbstractPropertiesConfigAdapterTests<DynatraceProperties, DynatracePropertiesConfigAdapter> {
36+
37+
DynatracePropertiesConfigAdapterTests() {
38+
super(DynatracePropertiesConfigAdapter.class);
39+
}
3340

3441
@Test
3542
void whenPropertiesUriIsSetAdapterUriReturnsIt() {

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/elastic/ElasticPropertiesConfigAdapterTests.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2021 the original author or authors.
2+
* Copyright 2012-2023 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -18,14 +18,21 @@
1818

1919
import org.junit.jupiter.api.Test;
2020

21+
import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.AbstractPropertiesConfigAdapterTests;
22+
2123
import static org.assertj.core.api.Assertions.assertThat;
2224

2325
/**
2426
* Tests for {@link ElasticPropertiesConfigAdapter}.
2527
*
2628
* @author Andy Wilkinson
2729
*/
28-
class ElasticPropertiesConfigAdapterTests {
30+
class ElasticPropertiesConfigAdapterTests
31+
extends AbstractPropertiesConfigAdapterTests<ElasticProperties, ElasticPropertiesConfigAdapter> {
32+
33+
ElasticPropertiesConfigAdapterTests() {
34+
super(ElasticPropertiesConfigAdapter.class);
35+
}
2936

3037
@Test
3138
void whenPropertiesHostsIsSetAdapterHostsReturnsIt() {

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/ganglia/GangliaPropertiesConfigAdapterTests.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,21 @@
2222
import info.ganglia.gmetric4j.gmetric.GMetric.UDPAddressingMode;
2323
import org.junit.jupiter.api.Test;
2424

25+
import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.AbstractPropertiesConfigAdapterTests;
26+
2527
import static org.assertj.core.api.Assertions.assertThat;
2628

2729
/**
2830
* Tests for {@link GangliaPropertiesConfigAdapter}.
2931
*
3032
* @author Mirko Sobeck
3133
*/
32-
class GangliaPropertiesConfigAdapterTests {
34+
class GangliaPropertiesConfigAdapterTests
35+
extends AbstractPropertiesConfigAdapterTests<GangliaProperties, GangliaPropertiesConfigAdapter> {
36+
37+
GangliaPropertiesConfigAdapterTests() {
38+
super(GangliaPropertiesConfigAdapter.class);
39+
}
3340

3441
@Test
3542
void whenPropertiesEnabledIsSetAdapterEnabledReturnsIt() {

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/graphite/GraphitePropertiesConfigAdapterTests.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,21 @@
2222
import io.micrometer.graphite.GraphiteProtocol;
2323
import org.junit.jupiter.api.Test;
2424

25+
import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.AbstractPropertiesConfigAdapterTests;
26+
2527
import static org.assertj.core.api.Assertions.assertThat;
2628

2729
/**
2830
* Tests for {@link GraphitePropertiesConfigAdapter}.
2931
*
3032
* @author Mirko Sobeck
3133
*/
32-
class GraphitePropertiesConfigAdapterTests {
34+
class GraphitePropertiesConfigAdapterTests
35+
extends AbstractPropertiesConfigAdapterTests<GraphiteProperties, GraphitePropertiesConfigAdapter> {
36+
37+
GraphitePropertiesConfigAdapterTests() {
38+
super(GraphitePropertiesConfigAdapter.class);
39+
}
3340

3441
@Test
3542
void whenPropertiesEnabledIsSetAdapterEnabledReturnsIt() {

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/humio/HumioPropertiesConfigAdapterTests.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,21 @@
2020

2121
import org.junit.jupiter.api.Test;
2222

23+
import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.AbstractPropertiesConfigAdapterTests;
24+
2325
import static org.assertj.core.api.Assertions.assertThat;
2426

2527
/**
2628
* Tests for {@link HumioPropertiesConfigAdapter}.
2729
*
2830
* @author Andy Wilkinson
2931
*/
30-
class HumioPropertiesConfigAdapterTests {
32+
class HumioPropertiesConfigAdapterTests
33+
extends AbstractPropertiesConfigAdapterTests<HumioProperties, HumioPropertiesConfigAdapter> {
34+
35+
HumioPropertiesConfigAdapterTests() {
36+
super(HumioPropertiesConfigAdapter.class);
37+
}
3138

3239
@Test
3340
void whenApiTokenIsSetAdapterApiTokenReturnsIt() {

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/influx/InfluxPropertiesConfigAdapterTests.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2021 the original author or authors.
2+
* Copyright 2012-2023 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -19,14 +19,21 @@
1919
import io.micrometer.influx.InfluxApiVersion;
2020
import org.junit.jupiter.api.Test;
2121

22+
import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.AbstractPropertiesConfigAdapterTests;
23+
2224
import static org.assertj.core.api.Assertions.assertThat;
2325

2426
/**
2527
* Tests for {@link InfluxPropertiesConfigAdapter}.
2628
*
2729
* @author Stephane Nicoll
2830
*/
29-
class InfluxPropertiesConfigAdapterTests {
31+
class InfluxPropertiesConfigAdapterTests
32+
extends AbstractPropertiesConfigAdapterTests<InfluxProperties, InfluxPropertiesConfigAdapter> {
33+
34+
InfluxPropertiesConfigAdapterTests() {
35+
super(InfluxPropertiesConfigAdapter.class);
36+
}
3037

3138
@Test
3239
void adaptInfluxV1BasicConfig() {

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/jmx/JmxPropertiesConfigAdapterTests.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,21 @@
2020

2121
import org.junit.jupiter.api.Test;
2222

23+
import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.AbstractPropertiesConfigAdapterTests;
24+
2325
import static org.assertj.core.api.Assertions.assertThat;
2426

2527
/**
2628
* Tests for {@link JmxPropertiesConfigAdapter}.
2729
*
2830
* @author Mirko Sobeck
2931
*/
30-
class JmxPropertiesConfigAdapterTests {
32+
class JmxPropertiesConfigAdapterTests
33+
extends AbstractPropertiesConfigAdapterTests<JmxProperties, JmxPropertiesConfigAdapter> {
34+
35+
JmxPropertiesConfigAdapterTests() {
36+
super(JmxPropertiesConfigAdapter.class);
37+
}
3138

3239
@Test
3340
void whenPropertiesStepIsSetAdapterStepReturnsIt() {

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/kairos/KairosPropertiesConfigAdapterTests.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@
3030
class KairosPropertiesConfigAdapterTests
3131
extends StepRegistryPropertiesConfigAdapterTests<KairosProperties, KairosPropertiesConfigAdapter> {
3232

33+
KairosPropertiesConfigAdapterTests() {
34+
super(KairosPropertiesConfigAdapter.class);
35+
}
36+
3337
@Override
3438
protected KairosProperties createProperties() {
3539
return new KairosProperties();

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/newrelic/NewRelicPropertiesConfigAdapterTests.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@
3131
class NewRelicPropertiesConfigAdapterTests
3232
extends StepRegistryPropertiesConfigAdapterTests<NewRelicProperties, NewRelicPropertiesConfigAdapter> {
3333

34+
NewRelicPropertiesConfigAdapterTests() {
35+
super(NewRelicPropertiesConfigAdapter.class);
36+
}
37+
3438
@Override
3539
protected NewRelicProperties createProperties() {
3640
return new NewRelicProperties();

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/prometheus/PrometheusPropertiesConfigAdapterTests.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,21 @@
2121
import io.micrometer.prometheus.HistogramFlavor;
2222
import org.junit.jupiter.api.Test;
2323

24+
import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.AbstractPropertiesConfigAdapterTests;
25+
2426
import static org.assertj.core.api.Assertions.assertThat;
2527

2628
/**
2729
* Tests for {@link PrometheusPropertiesConfigAdapter}.
2830
*
2931
* @author Mirko Sobeck
3032
*/
31-
class PrometheusPropertiesConfigAdapterTests {
33+
class PrometheusPropertiesConfigAdapterTests
34+
extends AbstractPropertiesConfigAdapterTests<PrometheusProperties, PrometheusPropertiesConfigAdapter> {
35+
36+
PrometheusPropertiesConfigAdapterTests() {
37+
super(PrometheusPropertiesConfigAdapter.class);
38+
}
3239

3340
@Test
3441
void whenPropertiesDescriptionsIsSetAdapterDescriptionsReturnsIt() {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
/*
2+
* Copyright 2012-2023 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.boot.actuate.autoconfigure.metrics.export.properties;
18+
19+
import java.lang.reflect.Method;
20+
import java.util.Arrays;
21+
import java.util.Set;
22+
import java.util.TreeSet;
23+
import java.util.stream.Collectors;
24+
25+
import io.micrometer.core.instrument.config.validate.Validated;
26+
import org.junit.jupiter.api.Test;
27+
28+
import org.springframework.core.annotation.AnnotatedElementUtils;
29+
30+
import static org.assertj.core.api.Assertions.assertThat;
31+
32+
/**
33+
* Base class for testing properties config adapters.
34+
*
35+
* @param <P> the properties used by the adapter
36+
* @param <A> the adapter under test
37+
* @author Andy Wilkinson
38+
* @author Mirko Sobeck
39+
*/
40+
public abstract class AbstractPropertiesConfigAdapterTests<P, A extends PropertiesConfigAdapter<P>> {
41+
42+
private final Class<? extends A> adapter;
43+
44+
protected AbstractPropertiesConfigAdapterTests(Class<? extends A> adapter) {
45+
this.adapter = adapter;
46+
}
47+
48+
@Test
49+
protected void adapterOverridesAllConfigMethods() {
50+
adapterOverridesAllConfigMethodsExcept();
51+
}
52+
53+
protected final void adapterOverridesAllConfigMethodsExcept(String... nonConfigMethods) {
54+
Class<?> config = findImplementedConfig();
55+
Set<String> expectedConfigMethodNames = Arrays.stream(config.getDeclaredMethods())
56+
.filter(Method::isDefault)
57+
.filter(this::hasNoParameters)
58+
.filter(this::isNotValidationMethod)
59+
.filter(this::isNotDeprecated)
60+
.map(Method::getName)
61+
.collect(Collectors.toCollection(TreeSet::new));
62+
expectedConfigMethodNames.removeAll(Arrays.asList(nonConfigMethods));
63+
Set<String> actualConfigMethodNames = new TreeSet<>();
64+
Class<?> currentClass = this.adapter;
65+
while (!Object.class.equals(currentClass)) {
66+
actualConfigMethodNames.addAll(Arrays.stream(currentClass.getDeclaredMethods())
67+
.map(Method::getName)
68+
.filter(expectedConfigMethodNames::contains)
69+
.collect(Collectors.toList()));
70+
currentClass = currentClass.getSuperclass();
71+
}
72+
assertThat(actualConfigMethodNames).containsExactlyInAnyOrderElementsOf(expectedConfigMethodNames);
73+
}
74+
75+
private Class<?> findImplementedConfig() {
76+
Class<?>[] interfaces = this.adapter.getInterfaces();
77+
if (interfaces.length == 1) {
78+
return interfaces[0];
79+
}
80+
throw new IllegalStateException(this.adapter + " is not a config implementation");
81+
}
82+
83+
private boolean isNotDeprecated(Method method) {
84+
return !AnnotatedElementUtils.hasAnnotation(method, Deprecated.class);
85+
}
86+
87+
private boolean hasNoParameters(Method method) {
88+
return method.getParameterCount() == 0;
89+
}
90+
91+
private boolean isNotValidationMethod(Method method) {
92+
return !Validated.class.equals(method.getReturnType());
93+
}
94+
95+
}

0 commit comments

Comments
 (0)