From 19e70055a5dfc72e7da21a9490b6ef79ee095d55 Mon Sep 17 00:00:00 2001 From: Mirko Sobeck Date: Tue, 10 Jan 2023 17:41:14 +0100 Subject: [PATCH] Test Micrometer config to property exposure See gh-33743 --- .../TestConfigsToPropertiesExposure.java | 110 ++++++++++++++++++ ...AppOpticsPropertiesConfigAdapterTests.java | 10 +- .../AtlasPropertiesConfigAdapterTests.java | 10 ++ .../DatadogPropertiesConfigAdapterTests.java | 8 ++ ...DynatracePropertiesConfigAdapterTests.java | 9 ++ .../ElasticPropertiesConfigAdapterTests.java | 11 +- .../GangliaPropertiesConfigAdapterTests.java | 9 ++ .../GraphitePropertiesConfigAdapterTests.java | 9 ++ .../HumioPropertiesConfigAdapterTests.java | 9 ++ .../InfluxPropertiesConfigAdapterTests.java | 9 ++ .../jmx/JmxPropertiesConfigAdapterTests.java | 9 ++ .../KairosPropertiesConfigAdapterTests.java | 8 ++ .../NewRelicPropertiesConfigAdapterTests.java | 8 ++ ...rometheusPropertiesConfigAdapterTests.java | 9 ++ .../SignalFxPropertiesConfigAdapterTests.java | 7 ++ .../SimplePropertiesConfigAdapterTests.java | 9 ++ ...ackdriverPropertiesConfigAdapterTests.java | 9 ++ .../StatsdPropertiesConfigAdapterTests.java | 9 ++ ...WavefrontPropertiesConfigAdapterTests.java | 9 ++ 19 files changed, 269 insertions(+), 2 deletions(-) create mode 100644 spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/TestConfigsToPropertiesExposure.java diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/TestConfigsToPropertiesExposure.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/TestConfigsToPropertiesExposure.java new file mode 100644 index 00000000000..5b3ca0b31d5 --- /dev/null +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/TestConfigsToPropertiesExposure.java @@ -0,0 +1,110 @@ +/* + * Copyright 2012-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.autoconfigure.metrics.export; + +import java.lang.reflect.Method; +import java.time.Duration; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import org.junit.Assert; + +import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.PropertiesConfigAdapter; + +/** + * Utility to test that all Micrometer config values are exposed via properties and + * settable using the corresponding {@link PropertiesConfigAdapter} implementation. + * + * @author Mirko Sobeck + */ +public final class TestConfigsToPropertiesExposure { + + private TestConfigsToPropertiesExposure() { + + } + + private static final List> classesForPropertiesList = Arrays.asList(Boolean.class, Byte.class, + Character.class, Short.class, Integer.class, Long.class, Double.class, Float.class, String.class, + Duration.class); + + /** + * Assertion to test if default methods of a given config are overridden by the + * adapter which implements it. This can be an indicator for micrometer config fields, + * that have been forgotten to expose via spring properties. Not overridden default + * methods in adapters are the most common cause of forgotten field exposure, because + * they do not for force an override. + * @param config micrometer config + * @param adapter adapter for properties {@link PropertiesConfigAdapter} + * @param excludedConfigMethods config methods that should be excluded for the + * assertion + */ + public static void assertThatAllConfigDefaultMethodsAreOverriddenByAdapter(Class config, + Class> adapter, String... excludedConfigMethods) { + List configDefaultMethodNames = Arrays.stream(config.getDeclaredMethods()) + .filter((method) -> method.isDefault() && isSettableUsingProperties(method.getReturnType())) + .map(Method::getName).collect(Collectors.toList()); + + configDefaultMethodNames.removeAll(Arrays.stream(excludedConfigMethods).collect(Collectors.toList())); + List notOverriddenDefaultMethods = new ArrayList<>(configDefaultMethodNames); + + Class currentClass = adapter; + // loop through adapter class and superclasses + // to find not overridden config methods + while (!Object.class.equals(currentClass)) { + List overriddenClassDefaultMethods = Arrays.stream(currentClass.getDeclaredMethods()) + .map(Method::getName).filter(configDefaultMethodNames::contains).collect(Collectors.toList()); + + notOverriddenDefaultMethods.removeAll(overriddenClassDefaultMethods); + currentClass = currentClass.getSuperclass(); + } + + if (notOverriddenDefaultMethods.size() >= 1) { + Assert.fail( + "Found config default methods that are not overridden by the related PropertiesConfigAdapter: \n" + + notOverriddenDefaultMethods + "\n" + + "This could be an indicator for not exposed properties fields.\n" + + "Please check if the fields are meant to be exposed and if not, " + + "exclude them from this test by providing them to the method."); + } + } + + /** + * Guess if a class can be set using properties. This will only catch the basic use + * cases regarding the micrometer configs to filter out methods that are not likely to + * be designed to be set via properties.
+	 *     isSettableUsingProperties(String.class) = true
+	 *     isSettableUsingProperties(boolean.class) = true
+	 *     isSettableUsingProperties(Object.class) = false
+	 * 
+ * @param clazz Class + * @return is likely to be settable using properties + */ + private static boolean isSettableUsingProperties(Class clazz) { + if (Void.TYPE.equals(clazz)) { + return false; + } + + if (clazz.isPrimitive()) { + return true; + } + + return classesForPropertiesList.contains(clazz); + } + +} diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/appoptics/AppOpticsPropertiesConfigAdapterTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/appoptics/AppOpticsPropertiesConfigAdapterTests.java index 6b5de57c7fa..9768c1f1864 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/appoptics/AppOpticsPropertiesConfigAdapterTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/appoptics/AppOpticsPropertiesConfigAdapterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2020 the original author or authors. + * Copyright 2012-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,8 +16,10 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.appoptics; +import io.micrometer.appoptics.AppOpticsConfig; import org.junit.jupiter.api.Test; +import org.springframework.boot.actuate.autoconfigure.metrics.export.TestConfigsToPropertiesExposure; import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.StepRegistryPropertiesConfigAdapterTests; import static org.assertj.core.api.Assertions.assertThat; @@ -68,4 +70,10 @@ class AppOpticsPropertiesConfigAdapterTests assertThat(createConfigAdapter(properties).floorTimes()).isTrue(); } + @Test + void allDefaultConfigMethodsAreOverriddenByAtlasPropertiesConfigAdapter() { + TestConfigsToPropertiesExposure.assertThatAllConfigDefaultMethodsAreOverriddenByAdapter(AppOpticsConfig.class, + AppOpticsPropertiesConfigAdapter.class, "connectTimeout"); + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/atlas/AtlasPropertiesConfigAdapterTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/atlas/AtlasPropertiesConfigAdapterTests.java index 6b72df27399..a4dab2e54f9 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/atlas/AtlasPropertiesConfigAdapterTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/atlas/AtlasPropertiesConfigAdapterTests.java @@ -18,8 +18,11 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.atlas; import java.time.Duration; +import com.netflix.spectator.atlas.AtlasConfig; import org.junit.jupiter.api.Test; +import org.springframework.boot.actuate.autoconfigure.metrics.export.TestConfigsToPropertiesExposure; + import static org.assertj.core.api.Assertions.assertThat; /** @@ -130,4 +133,11 @@ class AtlasPropertiesConfigAdapterTests { assertThat(new AtlasPropertiesConfigAdapter(properties).lwcIgnorePublishStep()).isFalse(); } + @Test + void allConfigDefaultMethodsAreOverriddenByAdapter() { + TestConfigsToPropertiesExposure.assertThatAllConfigDefaultMethodsAreOverriddenByAdapter(AtlasConfig.class, + AtlasPropertiesConfigAdapter.class, "lwcIgnorePublishStep", "initialPollingDelay", "autoStart", + "lwcStep", "validTagCharacters"); + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/datadog/DatadogPropertiesConfigAdapterTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/datadog/DatadogPropertiesConfigAdapterTests.java index b47892c439a..165f7dec03d 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/datadog/DatadogPropertiesConfigAdapterTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/datadog/DatadogPropertiesConfigAdapterTests.java @@ -16,8 +16,10 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.datadog; +import io.micrometer.datadog.DatadogConfig; import org.junit.jupiter.api.Test; +import org.springframework.boot.actuate.autoconfigure.metrics.export.TestConfigsToPropertiesExposure; import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.StepRegistryPropertiesConfigAdapterTests; import static org.assertj.core.api.Assertions.assertThat; @@ -76,4 +78,10 @@ class DatadogPropertiesConfigAdapterTests assertThat(createConfigAdapter(properties).uri()).isEqualTo("https://app.example.com/api/v1/series"); } + @Test + void allConfigDefaultMethodsAreOverriddenByAdapter() { + TestConfigsToPropertiesExposure.assertThatAllConfigDefaultMethodsAreOverriddenByAdapter(DatadogConfig.class, + DatadogPropertiesConfigAdapter.class); + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/dynatrace/DynatracePropertiesConfigAdapterTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/dynatrace/DynatracePropertiesConfigAdapterTests.java index b677c826f49..91ac285ad10 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/dynatrace/DynatracePropertiesConfigAdapterTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/dynatrace/DynatracePropertiesConfigAdapterTests.java @@ -19,8 +19,11 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.dynatrace; import java.util.HashMap; import io.micrometer.dynatrace.DynatraceApiVersion; +import io.micrometer.dynatrace.DynatraceConfig; import org.junit.jupiter.api.Test; +import org.springframework.boot.actuate.autoconfigure.metrics.export.TestConfigsToPropertiesExposure; + import static org.assertj.core.api.Assertions.assertThat; /** @@ -161,4 +164,10 @@ class DynatracePropertiesConfigAdapterTests { assertThat(properties.getGroup()).isNull(); } + @Test + void allConfigDefaultMethodsAreOverriddenByAdapter() { + TestConfigsToPropertiesExposure.assertThatAllConfigDefaultMethodsAreOverriddenByAdapter(DynatraceConfig.class, + DynatracePropertiesConfigAdapter.class, "documentType"); + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/elastic/ElasticPropertiesConfigAdapterTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/elastic/ElasticPropertiesConfigAdapterTests.java index 8e531337035..b9bf20876d8 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/elastic/ElasticPropertiesConfigAdapterTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/elastic/ElasticPropertiesConfigAdapterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2021 the original author or authors. + * Copyright 2012-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,8 +16,11 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.elastic; +import io.micrometer.elastic.ElasticConfig; import org.junit.jupiter.api.Test; +import org.springframework.boot.actuate.autoconfigure.metrics.export.TestConfigsToPropertiesExposure; + import static org.assertj.core.api.Assertions.assertThat; /** @@ -97,4 +100,10 @@ class ElasticPropertiesConfigAdapterTests { assertThat(new ElasticPropertiesConfigAdapter(properties).apiKeyCredentials()).isEqualTo("secret"); } + @Test + void allConfigDefaultMethodsAreOverriddenByAdapter() { + TestConfigsToPropertiesExposure.assertThatAllConfigDefaultMethodsAreOverriddenByAdapter(ElasticConfig.class, + ElasticPropertiesConfigAdapter.class, "documentType"); + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/ganglia/GangliaPropertiesConfigAdapterTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/ganglia/GangliaPropertiesConfigAdapterTests.java index d837b001928..71d0f6e0cb8 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/ganglia/GangliaPropertiesConfigAdapterTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/ganglia/GangliaPropertiesConfigAdapterTests.java @@ -20,8 +20,11 @@ import java.time.Duration; import java.util.concurrent.TimeUnit; import info.ganglia.gmetric4j.gmetric.GMetric.UDPAddressingMode; +import io.micrometer.ganglia.GangliaConfig; import org.junit.jupiter.api.Test; +import org.springframework.boot.actuate.autoconfigure.metrics.export.TestConfigsToPropertiesExposure; + import static org.assertj.core.api.Assertions.assertThat; /** @@ -81,4 +84,10 @@ class GangliaPropertiesConfigAdapterTests { assertThat(new GangliaPropertiesConfigAdapter(properties).port()).isEqualTo(4242); } + @Test + void allConfigDefaultMethodsAreOverriddenByAdapter() { + TestConfigsToPropertiesExposure.assertThatAllConfigDefaultMethodsAreOverriddenByAdapter(GangliaConfig.class, + GangliaPropertiesConfigAdapter.class, "protocolVersion"); + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/graphite/GraphitePropertiesConfigAdapterTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/graphite/GraphitePropertiesConfigAdapterTests.java index ef2de2d69d0..37306ebc94e 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/graphite/GraphitePropertiesConfigAdapterTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/graphite/GraphitePropertiesConfigAdapterTests.java @@ -19,9 +19,12 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.graphite; import java.time.Duration; import java.util.concurrent.TimeUnit; +import io.micrometer.graphite.GraphiteConfig; import io.micrometer.graphite.GraphiteProtocol; import org.junit.jupiter.api.Test; +import org.springframework.boot.actuate.autoconfigure.metrics.export.TestConfigsToPropertiesExposure; + import static org.assertj.core.api.Assertions.assertThat; /** @@ -94,4 +97,10 @@ class GraphitePropertiesConfigAdapterTests { assertThat(new GraphitePropertiesConfigAdapter(properties).tagsAsPrefix()).isEqualTo(new String[] { "worker" }); } + @Test + void allConfigDefaultMethodsAreOverriddenByAdapter() { + TestConfigsToPropertiesExposure.assertThatAllConfigDefaultMethodsAreOverriddenByAdapter(GraphiteConfig.class, + GraphitePropertiesConfigAdapter.class); + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/humio/HumioPropertiesConfigAdapterTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/humio/HumioPropertiesConfigAdapterTests.java index 37b99bb9bc4..81c67f03c29 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/humio/HumioPropertiesConfigAdapterTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/humio/HumioPropertiesConfigAdapterTests.java @@ -18,8 +18,11 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.humio; import java.util.Collections; +import io.micrometer.humio.HumioConfig; import org.junit.jupiter.api.Test; +import org.springframework.boot.actuate.autoconfigure.metrics.export.TestConfigsToPropertiesExposure; + import static org.assertj.core.api.Assertions.assertThat; /** @@ -51,4 +54,10 @@ class HumioPropertiesConfigAdapterTests { assertThat(new HumioPropertiesConfigAdapter(properties).uri()).isEqualTo("https://humio.example.com"); } + @Test + void allConfigDefaultMethodsAreOverriddenByAdapter() { + TestConfigsToPropertiesExposure.assertThatAllConfigDefaultMethodsAreOverriddenByAdapter(HumioConfig.class, + HumioPropertiesConfigAdapter.class, "connectTimeout"); + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/influx/InfluxPropertiesConfigAdapterTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/influx/InfluxPropertiesConfigAdapterTests.java index 2d86262c668..0d0a7142fbc 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/influx/InfluxPropertiesConfigAdapterTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/influx/InfluxPropertiesConfigAdapterTests.java @@ -17,8 +17,11 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.influx; import io.micrometer.influx.InfluxApiVersion; +import io.micrometer.influx.InfluxConfig; import org.junit.jupiter.api.Test; +import org.springframework.boot.actuate.autoconfigure.metrics.export.TestConfigsToPropertiesExposure; + import static org.assertj.core.api.Assertions.assertThat; /** @@ -58,4 +61,10 @@ class InfluxPropertiesConfigAdapterTests { assertThat(adapter.token()).isEqualTo("token"); } + @Test + void allConfigDefaultMethodsAreOverriddenByAdapter() { + TestConfigsToPropertiesExposure.assertThatAllConfigDefaultMethodsAreOverriddenByAdapter(InfluxConfig.class, + InfluxPropertiesConfigAdapter.class); + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/jmx/JmxPropertiesConfigAdapterTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/jmx/JmxPropertiesConfigAdapterTests.java index 6ee12bfd5ad..e23a523d2d1 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/jmx/JmxPropertiesConfigAdapterTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/jmx/JmxPropertiesConfigAdapterTests.java @@ -18,8 +18,11 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.jmx; import java.time.Duration; +import io.micrometer.jmx.JmxConfig; import org.junit.jupiter.api.Test; +import org.springframework.boot.actuate.autoconfigure.metrics.export.TestConfigsToPropertiesExposure; + import static org.assertj.core.api.Assertions.assertThat; /** @@ -43,4 +46,10 @@ class JmxPropertiesConfigAdapterTests { assertThat(new JmxPropertiesConfigAdapter(properties).domain()).isEqualTo("abc"); } + @Test + void allConfigDefaultMethodsAreOverriddenByAdapter() { + TestConfigsToPropertiesExposure.assertThatAllConfigDefaultMethodsAreOverriddenByAdapter(JmxConfig.class, + JmxPropertiesConfigAdapter.class); + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/kairos/KairosPropertiesConfigAdapterTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/kairos/KairosPropertiesConfigAdapterTests.java index 94e6617c26e..1915d0b8df7 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/kairos/KairosPropertiesConfigAdapterTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/kairos/KairosPropertiesConfigAdapterTests.java @@ -16,8 +16,10 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.kairos; +import io.micrometer.kairos.KairosConfig; import org.junit.jupiter.api.Test; +import org.springframework.boot.actuate.autoconfigure.metrics.export.TestConfigsToPropertiesExposure; import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.StepRegistryPropertiesConfigAdapterTests; import static org.assertj.core.api.Assertions.assertThat; @@ -62,4 +64,10 @@ class KairosPropertiesConfigAdapterTests assertThat(createConfigAdapter(properties).password()).isEqualTo("secret"); } + @Test + void allConfigDefaultMethodsAreOverriddenByAdapter() { + TestConfigsToPropertiesExposure.assertThatAllConfigDefaultMethodsAreOverriddenByAdapter(KairosConfig.class, + KairosPropertiesConfigAdapter.class); + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/newrelic/NewRelicPropertiesConfigAdapterTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/newrelic/NewRelicPropertiesConfigAdapterTests.java index f3e3e80df5a..0d71eb7600c 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/newrelic/NewRelicPropertiesConfigAdapterTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/newrelic/NewRelicPropertiesConfigAdapterTests.java @@ -17,8 +17,10 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.newrelic; import io.micrometer.newrelic.ClientProviderType; +import io.micrometer.newrelic.NewRelicConfig; import org.junit.jupiter.api.Test; +import org.springframework.boot.actuate.autoconfigure.metrics.export.TestConfigsToPropertiesExposure; import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.StepRegistryPropertiesConfigAdapterTests; import static org.assertj.core.api.Assertions.assertThat; @@ -83,4 +85,10 @@ class NewRelicPropertiesConfigAdapterTests assertThat(createConfigAdapter(properties).uri()).isEqualTo("https://example.newrelic.com"); } + @Test + void allConfigDefaultMethodsAreOverriddenByAdapter() { + TestConfigsToPropertiesExposure.assertThatAllConfigDefaultMethodsAreOverriddenByAdapter(NewRelicConfig.class, + NewRelicPropertiesConfigAdapter.class); + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/prometheus/PrometheusPropertiesConfigAdapterTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/prometheus/PrometheusPropertiesConfigAdapterTests.java index 4fa21768847..6d6abf0d775 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/prometheus/PrometheusPropertiesConfigAdapterTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/prometheus/PrometheusPropertiesConfigAdapterTests.java @@ -19,8 +19,11 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.prometheus import java.time.Duration; import io.micrometer.prometheus.HistogramFlavor; +import io.micrometer.prometheus.PrometheusConfig; import org.junit.jupiter.api.Test; +import org.springframework.boot.actuate.autoconfigure.metrics.export.TestConfigsToPropertiesExposure; + import static org.assertj.core.api.Assertions.assertThat; /** @@ -52,4 +55,10 @@ class PrometheusPropertiesConfigAdapterTests { assertThat(new PrometheusPropertiesConfigAdapter(properties).step()).isEqualTo(Duration.ofSeconds(30)); } + @Test + void allConfigDefaultMethodsAreOverriddenByAdapter() { + TestConfigsToPropertiesExposure.assertThatAllConfigDefaultMethodsAreOverriddenByAdapter(PrometheusConfig.class, + PrometheusPropertiesConfigAdapter.class); + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/signalfx/SignalFxPropertiesConfigAdapterTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/signalfx/SignalFxPropertiesConfigAdapterTests.java index c9b41839830..139a7d19063 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/signalfx/SignalFxPropertiesConfigAdapterTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/signalfx/SignalFxPropertiesConfigAdapterTests.java @@ -16,8 +16,10 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.signalfx; +import io.micrometer.signalfx.SignalFxConfig; import org.junit.jupiter.api.Test; +import org.springframework.boot.actuate.autoconfigure.metrics.export.TestConfigsToPropertiesExposure; import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.StepRegistryPropertiesConfigAdapterTests; import org.springframework.boot.actuate.autoconfigure.metrics.export.signalfx.SignalFxProperties.HistogramType; @@ -68,6 +70,11 @@ class SignalFxPropertiesConfigAdapterTests SignalFxProperties properties = createProperties(); properties.setPublishedHistogramType(HistogramType.CUMULATIVE); assertThat(createConfigAdapter(properties).publishCumulativeHistogram()).isTrue(); + + @Test + void allConfigDefaultMethodsAreOverriddenByAdapter() { + TestConfigsToPropertiesExposure.assertThatAllConfigDefaultMethodsAreOverriddenByAdapter(SignalFxConfig.class, + SignalFxPropertiesConfigAdapter.class, "publishDeltaHistogram", "publishCumulativeHistogram"); } } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimplePropertiesConfigAdapterTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimplePropertiesConfigAdapterTests.java index 5b7ba9a6501..70dfe644076 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimplePropertiesConfigAdapterTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimplePropertiesConfigAdapterTests.java @@ -19,8 +19,11 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.simple; import java.time.Duration; import io.micrometer.core.instrument.simple.CountingMode; +import io.micrometer.core.instrument.simple.SimpleConfig; import org.junit.jupiter.api.Test; +import org.springframework.boot.actuate.autoconfigure.metrics.export.TestConfigsToPropertiesExposure; + import static org.assertj.core.api.Assertions.assertThat; /** @@ -44,4 +47,10 @@ class SimplePropertiesConfigAdapterTests { assertThat(new SimplePropertiesConfigAdapter(properties).mode()).isEqualTo(CountingMode.STEP); } + @Test + void allConfigDefaultMethodsAreOverriddenByAdapter() { + TestConfigsToPropertiesExposure.assertThatAllConfigDefaultMethodsAreOverriddenByAdapter(SimpleConfig.class, + SimplePropertiesConfigAdapter.class); + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesConfigAdapterTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesConfigAdapterTests.java index 9b2f2fe9640..3af228cd04c 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesConfigAdapterTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesConfigAdapterTests.java @@ -19,8 +19,11 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.stackdrive import java.util.HashMap; import java.util.Map; +import io.micrometer.stackdriver.StackdriverConfig; import org.junit.jupiter.api.Test; +import org.springframework.boot.actuate.autoconfigure.metrics.export.TestConfigsToPropertiesExposure; + import static org.assertj.core.api.Assertions.assertThat; /** @@ -62,4 +65,10 @@ class StackdriverPropertiesConfigAdapterTests { assertThat(new StackdriverPropertiesConfigAdapter(properties).useSemanticMetricTypes()).isTrue(); } + @Test + void allConfigDefaultMethodsAreOverriddenByAdapter() { + TestConfigsToPropertiesExposure.assertThatAllConfigDefaultMethodsAreOverriddenByAdapter(StackdriverConfig.class, + StackdriverPropertiesConfigAdapter.class, "metricTypePrefix"); + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/statsd/StatsdPropertiesConfigAdapterTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/statsd/StatsdPropertiesConfigAdapterTests.java index 9eae3d00dc2..24af397bd1f 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/statsd/StatsdPropertiesConfigAdapterTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/statsd/StatsdPropertiesConfigAdapterTests.java @@ -18,10 +18,13 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.statsd; import java.time.Duration; +import io.micrometer.statsd.StatsdConfig; import io.micrometer.statsd.StatsdFlavor; import io.micrometer.statsd.StatsdProtocol; import org.junit.jupiter.api.Test; +import org.springframework.boot.actuate.autoconfigure.metrics.export.TestConfigsToPropertiesExposure; + import static org.assertj.core.api.Assertions.assertThat; /** @@ -104,4 +107,10 @@ class StatsdPropertiesConfigAdapterTests { assertThat(new StatsdPropertiesConfigAdapter(properties).buffered()).isEqualTo(properties.isBuffered()); } + @Test + void allConfigDefaultMethodsAreOverriddenByAdapter() { + TestConfigsToPropertiesExposure.assertThatAllConfigDefaultMethodsAreOverriddenByAdapter(StatsdConfig.class, + StatsdPropertiesConfigAdapter.class, "queueSize"); + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/wavefront/WavefrontPropertiesConfigAdapterTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/wavefront/WavefrontPropertiesConfigAdapterTests.java index f596956de1a..e49197c9e0d 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/wavefront/WavefrontPropertiesConfigAdapterTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/wavefront/WavefrontPropertiesConfigAdapterTests.java @@ -18,8 +18,10 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.wavefront; import java.net.URI; +import io.micrometer.wavefront.WavefrontConfig; import org.junit.jupiter.api.Test; +import org.springframework.boot.actuate.autoconfigure.metrics.export.TestConfigsToPropertiesExposure; import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.PushRegistryPropertiesConfigAdapterTests; import static org.assertj.core.api.Assertions.assertThat; @@ -91,4 +93,11 @@ class WavefrontPropertiesConfigAdapterTests assertThat(createConfigAdapter(properties).reportDayDistribution()).isTrue(); } + @Test + void allConfigDefaultMethodsAreOverriddenByAdapter() { + TestConfigsToPropertiesExposure.assertThatAllConfigDefaultMethodsAreOverriddenByAdapter(WavefrontConfig.class, + WavefrontPropertiesConfigAdapter.class, "distributionPort", "reportMinuteDistribution", + "reportHourDistribution", "reportDayDistribution"); + } + }