File tree Expand file tree Collapse file tree 3 files changed +73
-2
lines changed
main/java/datadog/trace/bootstrap/config/provider/stableconfig
test/groovy/datadog/trace/bootstrap/config/provider Expand file tree Collapse file tree 3 files changed +73
-2
lines changed Original file line number Diff line number Diff line change @@ -18,9 +18,13 @@ public final class StableConfig {
1818 public StableConfig (Object yaml ) {
1919 Map <Object , Object > map = (Map <Object , Object >) yaml ;
2020 this .configId = map .get ("config_id" ) == null ? null : String .valueOf (map .get ("config_id" ));
21+
22+ // getOrDefault returns null if key exists with null value, so we need explicit null check
23+ Map <String , Object > apmConfigDefault =
24+ (Map <String , Object >) map .get ("apm_configuration_default" );
2125 this .apmConfigurationDefault =
22- unmodifiableMap (
23- ( Map < String , Object >) map . getOrDefault ( "apm_configuration_default" , emptyMap ()));
26+ unmodifiableMap (apmConfigDefault != null ? apmConfigDefault : emptyMap ());
27+
2428 this .apmConfigurationRules = parseRules (map );
2529 }
2630
Original file line number Diff line number Diff line change @@ -298,4 +298,46 @@ apm_configuration_rules:
298298 " {{environment_variables['']}}" | " Empty environment variable name in template"
299299 " {{environment_variables['DD_KEY']}" | " Unterminated template in config"
300300 }
301+
302+ def " test null and empty values in YAML" () {
303+ given :
304+ Path filePath = Files . createTempFile(" testFile_" , " .yaml" )
305+
306+ when :
307+ String yaml = """
308+ config_id: "12345"
309+ apm_configuration_default:
310+ apm_configuration_rules:
311+ """
312+ Files . write(filePath, yaml. getBytes())
313+ StableConfigSource.StableConfig cfg = StableConfigParser . parse(filePath. toString())
314+
315+ then :
316+ cfg. getConfigId() == " 12345"
317+ cfg. getKeys(). isEmpty()
318+
319+ cleanup :
320+ Files . delete(filePath)
321+ }
322+
323+ def " test completely empty values in YAML" () {
324+ given :
325+ Path filePath = Files . createTempFile(" testFile_" , " .yaml" )
326+
327+ when :
328+ String yaml = """
329+ config_id: "12345"
330+ apm_configuration_default:
331+ apm_configuration_rules:
332+ """
333+ Files . write(filePath, yaml. getBytes())
334+ StableConfigSource.StableConfig cfg = StableConfigParser . parse(filePath. toString())
335+
336+ then :
337+ cfg. getConfigId() == " 12345"
338+ cfg. getKeys(). isEmpty()
339+
340+ cleanup :
341+ Files . delete(filePath)
342+ }
301343}
Original file line number Diff line number Diff line change @@ -71,6 +71,31 @@ class StableConfigSourceTest extends DDSpecification {
7171 " 12345" | " this is not yaml format!"
7272 }
7373
74+ def " test null values in YAML" () {
75+ when :
76+ Path filePath = Files . createTempFile(" testFile_" , " .yaml" )
77+ then :
78+ if (filePath == null ) {
79+ throw new AssertionError (" Failed to create: " + filePath)
80+ }
81+
82+ when :
83+ // Test the scenario where YAML contains null values for apm_configuration_default and apm_configuration_rules
84+ String yaml = """
85+ config_id: "12345"
86+ apm_configuration_default:
87+ apm_configuration_rules:
88+ """
89+ Files . write(filePath, yaml. getBytes())
90+ StableConfigSource stableCfg = new StableConfigSource (filePath. toString(), ConfigOrigin . LOCAL_STABLE_CONFIG )
91+
92+ then :
93+ // Should not throw NullPointerException and should handle null values gracefully
94+ stableCfg. getConfigId() == " 12345"
95+ stableCfg. getKeys(). size() == 0
96+ Files . delete(filePath)
97+ }
98+
7499 def " test file valid format" () {
75100 given :
76101 Path filePath = Files . createTempFile(" testFile_" , " .yaml" )
You can’t perform that action at this time.
0 commit comments