diff --git a/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java index 59c183a4700..e58c71fa664 100644 --- a/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java +++ b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java @@ -2,11 +2,14 @@ import datadog.environment.EnvironmentVariables; import datadog.trace.api.telemetry.ConfigInversionMetricCollectorProvider; +import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -15,7 +18,7 @@ private ConfigHelper() {} /** Config Inversion strictness policy for enforcement of undocumented environment variables */ public enum StrictnessPolicy { - STRICT, + STRICT_TEST, WARNING, TEST; @@ -49,6 +52,9 @@ public String toString() { // Default to production source private SupportedConfigurationSource configSource = new SupportedConfigurationSource(); + // Collects unsupported config keys encountered in STRICT_TEST mode + private final Set unsupportedConfigs = ConcurrentHashMap.newKeySet(); + public static ConfigHelper get() { return INSTANCE; } @@ -75,9 +81,18 @@ void resetCache() { void resetToDefaults() { configSource = new SupportedConfigurationSource(); this.configInversionStrict = StrictnessPolicy.WARNING; + unsupportedConfigs.clear(); resetCache(); } + /** Returns and clears the set of unsupported config keys encountered in STRICT_TEST mode. */ + public List drainUnsupportedConfigs() { + List result = new ArrayList<>(unsupportedConfigs); + unsupportedConfigs.clear(); + Collections.sort(result); + return result; + } + public static Map env() { return get().getEnvironmentVariables(); } @@ -142,8 +157,13 @@ public String getEnvironmentVariable(String name) { ConfigInversionMetricCollectorProvider.get().setUndocumentedEnvVarMetric(name); } - if (configInversionStrict == StrictnessPolicy.STRICT) { - return null; // If strict mode is enabled, return null for unsupported configs + if (configInversionStrict == StrictnessPolicy.STRICT_TEST) { + unsupportedConfigs.add(name); + throw new IllegalArgumentException( + "Unsupported configuration: " + + name + + " is not in GeneratedSupportedConfigurations. " + + "Add it to metadata/supported-configurations.json or remove the usage."); } } diff --git a/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java b/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java index aed77304eac..9696642c8ac 100644 --- a/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java +++ b/utils/config-utils/src/test/java/datadog/trace/config/inversion/ConfigHelperTest.java @@ -62,7 +62,7 @@ static void setUp() { testSupported, testAliases, testAliasMapping, new HashMap<>()); ConfigHelper.get().setConfigurationSource(testSource); strictness = ConfigHelper.get().configInversionStrictFlag(); - ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.STRICT); + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.STRICT_TEST); } @AfterAll @@ -177,7 +177,7 @@ void testUnsupportedEnvWarningNotInTestMode() { assertEquals("banana", ConfigHelper.env("DD_FAKE_VAR")); // Cleanup - ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.STRICT); + ConfigHelper.get().setConfigInversionStrict(ConfigHelper.StrictnessPolicy.STRICT_TEST); } @Test