From ff3933bc02edd9e37710d29bafe695c301d328c5 Mon Sep 17 00:00:00 2001 From: Jack Shirazi Date: Wed, 13 May 2026 09:41:59 +0100 Subject: [PATCH 1/4] wire up first policy --- .../dynamic/policy/registry/PolicyInit.java | 5 +- .../TraceSamplingRatePolicy.java | 14 +++- .../policy/registry/PolicyInitTest.java | 77 +++++++++++++++++++ 3 files changed, 92 insertions(+), 4 deletions(-) create mode 100644 dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitTest.java diff --git a/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInit.java b/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInit.java index 62e21f8a3..8494bd07b 100644 --- a/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInit.java +++ b/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInit.java @@ -13,6 +13,7 @@ import io.opentelemetry.contrib.dynamic.policy.PolicyTypeInitializer; import io.opentelemetry.contrib.dynamic.policy.PolicyValidator; import io.opentelemetry.contrib.dynamic.policy.TelemetryPolicy; +import io.opentelemetry.contrib.dynamic.policy.tracesampling.TraceSamplingRatePolicy; import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.io.Closeable; @@ -65,9 +66,7 @@ public final class PolicyInit { private static final PolicyStore policyStore = new PolicyStore(); static { - // For now, policies will be registered here. - // TODO: register TraceSamplingRatePolicy when registerPolicyType implemented - // TraceSamplingRatePolicy.registerPolicyType(); + TraceSamplingRatePolicy.registerPolicyType(); } /** diff --git a/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/policy/tracesampling/TraceSamplingRatePolicy.java b/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/policy/tracesampling/TraceSamplingRatePolicy.java index 525b445dd..5840a31ff 100644 --- a/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/policy/tracesampling/TraceSamplingRatePolicy.java +++ b/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/policy/tracesampling/TraceSamplingRatePolicy.java @@ -5,7 +5,9 @@ package io.opentelemetry.contrib.dynamic.policy.tracesampling; +import io.opentelemetry.contrib.dynamic.policy.PolicyImplementer; import io.opentelemetry.contrib.dynamic.policy.TelemetryPolicy; +import io.opentelemetry.contrib.dynamic.policy.registry.PolicyInit; import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer; import io.opentelemetry.sdk.extension.incubator.trace.samplers.ComposableSampler; import io.opentelemetry.sdk.extension.incubator.trace.samplers.CompositeSampler; @@ -35,12 +37,18 @@ public double getProbability() { *

If the extension is configured to use this policy, this installs an opinionated sampler that * overrides any other sampler */ - public static void initialize(AutoConfigurationCustomizer autoConfiguration) { + public static PolicyImplementer initialize(AutoConfigurationCustomizer autoConfiguration) { Objects.requireNonNull(autoConfiguration, "autoConfiguration cannot be null"); Sampler initialDelegate = createSampler(1.0); DelegatingSampler delegatingSampler = new DelegatingSampler(initialDelegate); initializedSampler = delegatingSampler; autoConfiguration.addSamplerCustomizer((sampler, config) -> delegatingSampler); + return new TraceSamplingRatePolicyImplementer(delegatingSampler); + } + + public static void registerPolicyType() { + PolicyInit.registerPolicyType( + POLICY_TYPE, TraceSamplingRatePolicy.class, TraceSamplingRatePolicy::initialize); } /** @@ -69,6 +77,10 @@ public static DelegatingSampler getInitializedSampler() { return initializedSampler; } + static void resetForTest() { + initializedSampler = null; + } + @Override public boolean equals(Object obj) { if (this == obj) { diff --git a/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitTest.java b/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitTest.java new file mode 100644 index 000000000..f761db09d --- /dev/null +++ b/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitTest.java @@ -0,0 +1,77 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.contrib.dynamic.policy.registry; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import io.opentelemetry.contrib.dynamic.policy.tracesampling.TraceSamplingRatePolicy; +import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import java.lang.reflect.Method; +import java.util.Map; +import java.util.function.Function; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; + +class PolicyInitTest { + + @AfterEach + void tearDown() throws Exception { + PolicyInit.resetForTest(); + invokeStaticNoArg(TraceSamplingRatePolicy.class, "resetForTest"); + } + + @Test + void doesNotInitializePolicyFromDeclarativeOnlyConfigInAutoConfigurationMode() { + AutoConfigurationCustomizer customizer = mock(AutoConfigurationCustomizer.class); + PolicyInit.init(customizer); + Function> propertiesCustomizer = + capturePropertiesCustomizer(customizer); + + ConfigProperties config = mock(ConfigProperties.class); + when(config.getString(PolicyInitConfig.POLICY_INIT_CONFIG_PROPERTY_YAML)).thenReturn(null); + when(config.getString(PolicyInitConfig.POLICY_INIT_CONFIG_PROPERTY_JSON)).thenReturn(null); + Map ignored = propertiesCustomizer.apply(config); + + assertThat(TraceSamplingRatePolicy.getInitializedSampler()).isNull(); + assertThat(ignored).isNotNull(); + } + + @Test + void doesNotInitializePolicyWhenTopLevelTelemetryPolicyDeclarativeConfigMissing() { + AutoConfigurationCustomizer customizer = mock(AutoConfigurationCustomizer.class); + PolicyInit.init(customizer); + Function> propertiesCustomizer = + capturePropertiesCustomizer(customizer); + + ConfigProperties config = mock(ConfigProperties.class); + when(config.getString(PolicyInitConfig.POLICY_INIT_CONFIG_PROPERTY_YAML)).thenReturn(null); + when(config.getString(PolicyInitConfig.POLICY_INIT_CONFIG_PROPERTY_JSON)).thenReturn(null); + Map ignored = propertiesCustomizer.apply(config); + + assertThat(TraceSamplingRatePolicy.getInitializedSampler()).isNull(); + assertThat(ignored).isNotNull(); + } + + private static Function> capturePropertiesCustomizer( + AutoConfigurationCustomizer customizer) { + @SuppressWarnings("unchecked") + ArgumentCaptor>> captor = + ArgumentCaptor.forClass(Function.class); + verify(customizer).addPropertiesCustomizer(captor.capture()); + return captor.getValue(); + } + + private static void invokeStaticNoArg(Class targetClass, String methodName) throws Exception { + Method method = targetClass.getDeclaredMethod(methodName); + method.setAccessible(true); + method.invoke(null); + } +} From 12f7b5e0eb739ada4792ff4a397d4b063d20c221 Mon Sep 17 00:00:00 2001 From: Jack Shirazi Date: Wed, 13 May 2026 09:46:53 +0100 Subject: [PATCH 2/4] spotless --- .../contrib/dynamic/policy/registry/PolicyInit.java | 1 + 1 file changed, 1 insertion(+) diff --git a/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInit.java b/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInit.java index 8494bd07b..6d1b15247 100644 --- a/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInit.java +++ b/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInit.java @@ -66,6 +66,7 @@ public final class PolicyInit { private static final PolicyStore policyStore = new PolicyStore(); static { + // For now, policies will be registered here. TODO: move to a more dynamic way. TraceSamplingRatePolicy.registerPolicyType(); } From 57057047680b3a6b700332d1f281d5370dbccdbf Mon Sep 17 00:00:00 2001 From: Jack Shirazi Date: Wed, 13 May 2026 11:23:23 +0100 Subject: [PATCH 3/4] copilot feedback --- .../policy/registry/PolicyInitConfigTest.java | 14 ++-- .../policy/registry/PolicyInitTest.java | 76 +++++++++++++++++++ .../json/JsonPolicyInitConfigReaderTest.java | 3 +- .../yaml/YamlPolicyInitConfigReaderTest.java | 3 +- .../registry/json/policy-init-example.json | 2 +- .../registry/yaml/policy-init-example.yaml | 2 +- 6 files changed, 87 insertions(+), 13 deletions(-) diff --git a/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitConfigTest.java b/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitConfigTest.java index c82254aa7..e18ff67bb 100644 --- a/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitConfigTest.java +++ b/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitConfigTest.java @@ -89,7 +89,7 @@ void readFromConfigPropertiesReadsJsonWhenYamlPathMissing() throws Exception { assertThat(source.getLocation()).isEqualTo("vendor"); assertThat(source.getMappings()).hasSize(1); assertThat(source.getMappings().get(0).getSourceKey()).isEqualTo("sampling_rate"); - assertThat(source.getMappings().get(0).getPolicyType()).isEqualTo("trace_sampling_rate_policy"); + assertThat(source.getMappings().get(0).getPolicyType()).isEqualTo("trace-sampling"); } @Test @@ -191,7 +191,7 @@ void readFromDeclarativeConfigPropertiesReadsTelemetryPolicySources() { assertThat(source.getLocation()).isEqualTo("from-declarative"); assertThat(source.getMappings()).hasSize(1); assertThat(source.getMappings().get(0).getSourceKey()).isEqualTo("sampling_rate"); - assertThat(source.getMappings().get(0).getPolicyType()).isEqualTo("trace_sampling_rate_policy"); + assertThat(source.getMappings().get(0).getPolicyType()).isEqualTo("trace-sampling"); } @Test @@ -428,7 +428,7 @@ private static DeclarativeConfigProperties mappingConfig() { when(mapping.getString(PolicyInitConfig.SOURCE_KEY_DECLARATIVE_KEY)) .thenReturn("sampling_rate"); when(mapping.getString(PolicyInitConfig.POLICY_TYPE_DECLARATIVE_KEY)) - .thenReturn("trace_sampling_rate_policy"); + .thenReturn("trace-sampling"); return mapping; } @@ -453,13 +453,13 @@ public DeclarativeConfigProperties getGeneralConfig() { private static String minimalJsonConfig() { return "{\"sources\":[{\"kind\":\"opamp\",\"format\":\"jsonkeyvalue\",\"location\":\"vendor\"," - + "\"mappings\":[{\"sourceKey\":\"sampling_rate\",\"policyType\":\"trace_sampling_rate_policy\"}]}]}"; + + "\"mappings\":[{\"sourceKey\":\"sampling_rate\",\"policyType\":\"trace-sampling\"}]}]}"; } private static String jsonWithLocation(String location) { return "{\"sources\":[{\"kind\":\"opamp\",\"format\":\"jsonkeyvalue\",\"location\":\"" + location - + "\",\"mappings\":[{\"sourceKey\":\"sampling_rate\",\"policyType\":\"trace_sampling_rate_policy\"}]}]}"; + + "\",\"mappings\":[{\"sourceKey\":\"sampling_rate\",\"policyType\":\"trace-sampling\"}]}]}"; } private static String minimalYamlConfig() { @@ -469,7 +469,7 @@ private static String minimalYamlConfig() { + " location: vendor\n" + " mappings:\n" + " - sourceKey: sampling_rate\n" - + " policyType: trace_sampling_rate_policy\n"; + + " policyType: trace-sampling\n"; } private static String yamlWithLocation(String location) { @@ -481,6 +481,6 @@ private static String yamlWithLocation(String location) { + "\n" + " mappings:\n" + " - sourceKey: sampling_rate\n" - + " policyType: trace_sampling_rate_policy\n"; + + " policyType: trace-sampling\n"; } } diff --git a/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitTest.java b/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitTest.java index f761db09d..26c9d61a9 100644 --- a/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitTest.java +++ b/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitTest.java @@ -6,21 +6,29 @@ package io.opentelemetry.contrib.dynamic.policy.registry; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.contrib.dynamic.policy.tracesampling.TraceSamplingRatePolicy; import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.lang.reflect.Method; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Collections; import java.util.Map; import java.util.function.Function; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; import org.mockito.ArgumentCaptor; class PolicyInitTest { + @TempDir Path tempDir; @AfterEach void tearDown() throws Exception { @@ -60,6 +68,49 @@ void doesNotInitializePolicyWhenTopLevelTelemetryPolicyDeclarativeConfigMissing( assertThat(ignored).isNotNull(); } + @Test + void initializesPolicyFromInitConfigInAutoConfigurationMode() throws Exception { + AutoConfigurationCustomizer customizer = mock(AutoConfigurationCustomizer.class); + PolicyInit.init(customizer); + Function> propertiesCustomizer = + capturePropertiesCustomizer(customizer); + + Path configPath = tempDir.resolve("policy-init.json"); + Files.write(configPath, minimalJsonInitConfig().getBytes(StandardCharsets.UTF_8)); + + ConfigProperties config = mock(ConfigProperties.class); + when(config.getString(PolicyInitConfig.POLICY_INIT_CONFIG_PROPERTY_YAML)).thenReturn(null); + when(config.getString(PolicyInitConfig.POLICY_INIT_CONFIG_PROPERTY_JSON)) + .thenReturn(configPath.toString()); + + Map ignored = propertiesCustomizer.apply(config); + + assertThat(ignored).isNotNull(); + assertThat(TraceSamplingRatePolicy.getInitializedSampler()).isNotNull(); + } + + @Test + void initializesRegisteredPolicyTypeFromDeclarativeConfig() { + ConfigProperties config = mock(ConfigProperties.class); + + PolicyInit.initFromDeclarativeConfig( + telemetryPolicyNodeConfig(TraceSamplingRatePolicy.POLICY_TYPE), config); + + assertThat(TraceSamplingRatePolicy.getInitializedSampler()).isNotNull(); + } + + @Test + void throwsWhenDeclarativeConfigUsesUnknownPolicyType() { + ConfigProperties config = mock(ConfigProperties.class); + + assertThatThrownBy( + () -> + PolicyInit.initFromDeclarativeConfig( + telemetryPolicyNodeConfig("trace_sampling_rate_policy"), config)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("Unknown policyType"); + } + private static Function> capturePropertiesCustomizer( AutoConfigurationCustomizer customizer) { @SuppressWarnings("unchecked") @@ -74,4 +125,29 @@ private static void invokeStaticNoArg(Class targetClass, String methodName) t method.setAccessible(true); method.invoke(null); } + + private static DeclarativeConfigProperties telemetryPolicyNodeConfig(String policyType) { + DeclarativeConfigProperties telemetryPolicy = mock(DeclarativeConfigProperties.class); + DeclarativeConfigProperties source = mock(DeclarativeConfigProperties.class); + DeclarativeConfigProperties mapping = mock(DeclarativeConfigProperties.class); + + when(telemetryPolicy.getStructuredList(PolicyInitConfig.SOURCES_DECLARATIVE_KEY)) + .thenReturn(Collections.singletonList(source)); + when(source.getString(PolicyInitConfig.KIND_DECLARATIVE_KEY)).thenReturn("opamp"); + when(source.getString(PolicyInitConfig.FORMAT_DECLARATIVE_KEY)).thenReturn("jsonkeyvalue"); + when(source.getString(PolicyInitConfig.LOCATION_DECLARATIVE_KEY)).thenReturn("vendor"); + when(source.getStructuredList(PolicyInitConfig.MAPPINGS_DECLARATIVE_KEY)) + .thenReturn(Collections.singletonList(mapping)); + when(mapping.getString(PolicyInitConfig.SOURCE_KEY_DECLARATIVE_KEY)) + .thenReturn("sampling_rate"); + when(mapping.getString(PolicyInitConfig.POLICY_TYPE_DECLARATIVE_KEY)).thenReturn(policyType); + return telemetryPolicy; + } + + private static String minimalJsonInitConfig() { + return "{\"sources\":[{\"kind\":\"opamp\",\"format\":\"jsonkeyvalue\",\"location\":\"vendor\"," + + "\"mappings\":[{\"sourceKey\":\"sampling_rate\",\"policyType\":\"" + + TraceSamplingRatePolicy.POLICY_TYPE + + "\"}]}]}"; + } } diff --git a/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/json/JsonPolicyInitConfigReaderTest.java b/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/json/JsonPolicyInitConfigReaderTest.java index 565e12b49..0237b26fd 100644 --- a/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/json/JsonPolicyInitConfigReaderTest.java +++ b/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/json/JsonPolicyInitConfigReaderTest.java @@ -34,8 +34,7 @@ void readsSourceCentricFixture() throws Exception { assertThat(source.getLocation()).isEqualTo("vendor-specific"); assertThat(source.getMappings()).hasSize(4); assertThat(source.getMappings().get(0).getSourceKey()).isEqualTo("sampling_rate"); - assertThat(source.getMappings().get(0).getPolicyType()) - .isEqualTo("trace_sampling_rate_policy"); + assertThat(source.getMappings().get(0).getPolicyType()).isEqualTo("trace-sampling"); } } diff --git a/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/yaml/YamlPolicyInitConfigReaderTest.java b/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/yaml/YamlPolicyInitConfigReaderTest.java index 5c5b88a0b..cca7ae60e 100644 --- a/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/yaml/YamlPolicyInitConfigReaderTest.java +++ b/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/yaml/YamlPolicyInitConfigReaderTest.java @@ -34,8 +34,7 @@ void readsSourceCentricFixture() throws Exception { assertThat(source.getLocation()).isEqualTo("vendor-specific"); assertThat(source.getMappings()).hasSize(4); assertThat(source.getMappings().get(0).getSourceKey()).isEqualTo("sampling_rate"); - assertThat(source.getMappings().get(0).getPolicyType()) - .isEqualTo("trace_sampling_rate_policy"); + assertThat(source.getMappings().get(0).getPolicyType()).isEqualTo("trace-sampling"); } } diff --git a/dynamic-control/src/test/resources/io/opentelemetry/contrib/dynamic/policy/registry/json/policy-init-example.json b/dynamic-control/src/test/resources/io/opentelemetry/contrib/dynamic/policy/registry/json/policy-init-example.json index 61604356f..e07b57ca8 100644 --- a/dynamic-control/src/test/resources/io/opentelemetry/contrib/dynamic/policy/registry/json/policy-init-example.json +++ b/dynamic-control/src/test/resources/io/opentelemetry/contrib/dynamic/policy/registry/json/policy-init-example.json @@ -5,7 +5,7 @@ "format": "jsonkeyvalue", "location": "vendor-specific", "mappings": [ - { "sourceKey": "sampling_rate", "policyType": "trace_sampling_rate_policy" }, + { "sourceKey": "sampling_rate", "policyType": "trace-sampling" }, { "sourceKey": "send_logs", "policyType": "log_export_enabled_policy" }, { "sourceKey": "send_traces", "policyType": "trace_export_enabled_policy" }, { "sourceKey": "send_metrics", "policyType": "metric_export_enabled_policy" } diff --git a/dynamic-control/src/test/resources/io/opentelemetry/contrib/dynamic/policy/registry/yaml/policy-init-example.yaml b/dynamic-control/src/test/resources/io/opentelemetry/contrib/dynamic/policy/registry/yaml/policy-init-example.yaml index 82da5510d..1d613d0af 100644 --- a/dynamic-control/src/test/resources/io/opentelemetry/contrib/dynamic/policy/registry/yaml/policy-init-example.yaml +++ b/dynamic-control/src/test/resources/io/opentelemetry/contrib/dynamic/policy/registry/yaml/policy-init-example.yaml @@ -4,7 +4,7 @@ sources: location: vendor-specific mappings: - sourceKey: sampling_rate - policyType: trace_sampling_rate_policy + policyType: trace-sampling - sourceKey: send_logs policyType: log_export_enabled_policy - sourceKey: send_traces From 1da76d453a25f9b2fb58507c7f1666e49bb37e31 Mon Sep 17 00:00:00 2001 From: Jack Shirazi Date: Fri, 22 May 2026 10:15:44 +0100 Subject: [PATCH 4/4] jaydeluca feedback remove duplicated test --- .../dynamic/policy/registry/PolicyInitTest.java | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitTest.java b/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitTest.java index 26c9d61a9..da0331c88 100644 --- a/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitTest.java +++ b/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitTest.java @@ -52,22 +52,6 @@ void doesNotInitializePolicyFromDeclarativeOnlyConfigInAutoConfigurationMode() { assertThat(ignored).isNotNull(); } - @Test - void doesNotInitializePolicyWhenTopLevelTelemetryPolicyDeclarativeConfigMissing() { - AutoConfigurationCustomizer customizer = mock(AutoConfigurationCustomizer.class); - PolicyInit.init(customizer); - Function> propertiesCustomizer = - capturePropertiesCustomizer(customizer); - - ConfigProperties config = mock(ConfigProperties.class); - when(config.getString(PolicyInitConfig.POLICY_INIT_CONFIG_PROPERTY_YAML)).thenReturn(null); - when(config.getString(PolicyInitConfig.POLICY_INIT_CONFIG_PROPERTY_JSON)).thenReturn(null); - Map ignored = propertiesCustomizer.apply(config); - - assertThat(TraceSamplingRatePolicy.getInitializedSampler()).isNull(); - assertThat(ignored).isNotNull(); - } - @Test void initializesPolicyFromInitConfigInAutoConfigurationMode() throws Exception { AutoConfigurationCustomizer customizer = mock(AutoConfigurationCustomizer.class);