Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion utils/config-utils/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ extra["excludedClassesCoverage"] = listOf(
"datadog.trace.bootstrap.config.provider.stableconfig.Selector",
// tested in internal-api
"datadog.trace.bootstrap.config.provider.StableConfigParser",
"datadog.trace.bootstrap.config.provider.SystemPropertiesConfigSource"
"datadog.trace.bootstrap.config.provider.SystemPropertiesConfigSource",
"datadog.trace.config.inversion.SupportedConfiguration"
)

extra["excludedClassesBranchCoverage"] = listOf(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,34 @@ void testConfigIdExistsInConfigCollectorWhenUsingStableConfigSource() throws Exc
}
}

@Test
void testStableConfigGetHandlesPresentAndMissingKeys() {
Map<String, Object> configMap = new HashMap<>();
configMap.put("DD_SERVICE", "test-service");
configMap.put("DD_PORT", 8126);

StableConfigSource.StableConfig config =
new StableConfigSource.StableConfig("config-123", configMap);

// Present String value: hits the non-null branch of the ternary in get()
assertEquals("test-service", config.get("DD_SERVICE"));
// Present non-String value: exercises String.valueOf on a non-null, non-String object
assertEquals("8126", config.get("DD_PORT"));
// Missing key: hits the null branch of the ternary in get()
assertNull(config.get("DD_MISSING"));

assertEquals("config-123", config.getConfigId());
assertEquals(configMap.keySet(), config.getKeys());
}

@Test
void testStableConfigEmpty() {
StableConfigSource.StableConfig empty = StableConfigSource.StableConfig.EMPTY;
assertNull(empty.get("DD_SERVICE"));
assertNull(empty.getConfigId());
assertEquals(0, empty.getKeys().size());
}

private static void writeFileYaml(
Path filePath, String configId, Map<String, String> defaultConfigs) throws IOException {
Map<String, Object> yamlData = new HashMap<>();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package datadog.trace.bootstrap.config.provider.stableconfig;

import static java.util.Arrays.asList;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Test;

class RuleTest {

@Test
void testNoArgConstructorYieldsEmptyState() {
Rule rule = new Rule();
assertTrue(rule.getSelectors().isEmpty());
assertTrue(rule.getConfiguration().isEmpty());
}

@Test
void testConstructorExposesValuesViaGetters() {
Selector selector = new Selector("process_arguments", "-Dfoo", asList("bar"), "equals");
Map<String, Object> configuration = new HashMap<>();
configuration.put("DD_SERVICE", "test");

Rule rule = new Rule(asList(selector), configuration);

assertEquals(1, rule.getSelectors().size());
assertSame(selector, rule.getSelectors().get(0));
assertSame(configuration, rule.getConfiguration());
}

@Test
void testFromParsesValidRule() {
Map<String, Object> selectorMap = new LinkedHashMap<>();
selectorMap.put("origin", "process_arguments");
selectorMap.put("key", "-Dfoo");
selectorMap.put("matches", asList("bar"));
selectorMap.put("operator", "equals");

Map<String, Object> configuration = new LinkedHashMap<>();
configuration.put("DD_SERVICE", "test");

Map<String, Object> ruleMap = new LinkedHashMap<>();
ruleMap.put("selectors", asList(selectorMap));
ruleMap.put("configuration", configuration);

Rule rule = Rule.from(ruleMap);

List<Selector> selectors = rule.getSelectors();
assertEquals(1, selectors.size());
Selector selector = selectors.get(0);
assertEquals("process_arguments", selector.getOrigin());
assertEquals("-Dfoo", selector.getKey());
assertEquals(asList("bar"), selector.getMatches());
assertEquals("equals", selector.getOperator());

assertEquals("test", rule.getConfiguration().get("DD_SERVICE"));
}

@Test
void testFromSkipsNullSelectorEntries() {
Map<String, Object> selectorMap = new LinkedHashMap<>();
selectorMap.put("origin", "process_arguments");
selectorMap.put("key", "-Dfoo");
selectorMap.put("matches", asList("bar"));
selectorMap.put("operator", "equals");

Map<String, Object> configuration = new LinkedHashMap<>();
configuration.put("DD_SERVICE", "test");

Map<String, Object> ruleMap = new LinkedHashMap<>();
ruleMap.put("selectors", asList(null, selectorMap));
ruleMap.put("configuration", configuration);

Rule rule = Rule.from(ruleMap);

// The null entry is filtered out, leaving only the valid selector.
assertEquals(1, rule.getSelectors().size());
assertEquals("process_arguments", rule.getSelectors().get(0).getOrigin());
}
}
Loading