Skip to content

Commit 3c24a75

Browse files
committed
add relevant tests
1 parent 9cacbfa commit 3c24a75

File tree

3 files changed

+107
-11
lines changed

3 files changed

+107
-11
lines changed

bin/format

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ docker_clang_format() {
6464
process_arg "$arg"
6565
done | xargs -0 \
6666
docker run \
67+
--platform linux/amd64 \
6768
--interactive \
6869
--rm \
6970
--volume /etc/passwd:/etc/passwd:ro \

test/telemetry/test_telemetry.cpp

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -194,8 +194,12 @@ TELEMETRY_IMPLEMENTATION_TEST("Tracer telemetry lifecycle") {
194194
product.configurations =
195195
std::unordered_map<ConfigName, std::vector<ConfigMetadata>>{
196196
{ConfigName::SERVICE_NAME,
197-
{ConfigMetadata(ConfigName::SERVICE_NAME, "foo",
198-
ConfigMetadata::Origin::CODE)}},
197+
{ConfigMetadata(ConfigName::SERVICE_NAME, "default-service",
198+
ConfigMetadata::Origin::DEFAULT),
199+
ConfigMetadata(ConfigName::SERVICE_NAME, "code-service",
200+
ConfigMetadata::Origin::CODE),
201+
ConfigMetadata(ConfigName::SERVICE_NAME, "env-service",
202+
ConfigMetadata::Origin::ENVIRONMENT_VARIABLE)}},
199203
};
200204

201205
Configuration cfg;
@@ -219,18 +223,38 @@ TELEMETRY_IMPLEMENTATION_TEST("Tracer telemetry lifecycle") {
219223

220224
auto cfg_payload = app_started_payload["payload"]["configuration"];
221225
REQUIRE(cfg_payload.is_array());
222-
REQUIRE(cfg_payload.size() == 1);
226+
REQUIRE(cfg_payload.size() == 3);
223227

228+
// Each configuration source is sent with an incrementing seq_id
224229
// clang-format off
225-
const auto expected_conf = nlohmann::json({
226-
{"name", "service"},
227-
{"value", "foo"},
228-
{"seq_id", 1},
229-
{"origin", "code"},
230-
});
230+
const std::unordered_map<std::string, nlohmann::json> expected_configs{
231+
{"default-service", nlohmann::json({
232+
{"name", "service"},
233+
{"value", "default-service"},
234+
{"seq_id", 1},
235+
{"origin", "default"},
236+
})},
237+
{"code-service", nlohmann::json({
238+
{"name", "service"},
239+
{"value", "code-service"},
240+
{"seq_id", 2},
241+
{"origin", "code"},
242+
})},
243+
{"env-service", nlohmann::json({
244+
{"name", "service"},
245+
{"value", "env-service"},
246+
{"seq_id", 3},
247+
{"origin", "env_var"},
248+
})},
249+
};
231250
// clang-format on
232251

233-
CHECK(cfg_payload[0] == expected_conf);
252+
// Verify all three configuration sources are present
253+
for (const auto& conf : cfg_payload) {
254+
auto value = conf["value"].get<std::string>();
255+
REQUIRE(expected_configs.count(value) == 1);
256+
CHECK(conf == expected_configs.at(value));
257+
}
234258

235259
SECTION("generates a configuration change event") {
236260
SECTION("empty configuration do not generate a valid payload") {
@@ -269,7 +293,8 @@ TELEMETRY_IMPLEMENTATION_TEST("Tracer telemetry lifecycle") {
269293
nlohmann::json{
270294
{"name", "service"},
271295
{"value", "increase seq_id"},
272-
{"seq_id", 2},
296+
{"seq_id",
297+
4}, // seq_id 4 (after DEFAULT=1, CODE=2, ENV=3)
273298
{"origin", "env_var"},
274299
},
275300
},

test/test_tracer_config.cpp

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1463,3 +1463,73 @@ TRACER_CONFIG_TEST("baggage") {
14631463
false);
14641464
}
14651465
}
1466+
1467+
TRACER_CONFIG_TEST("telemetry products contain configuration precedence") {
1468+
// Verifies that finalize_config produces telemetry products with
1469+
// configurations in the correct precedence order. Each configuration source
1470+
// (DEFAULT, CODE, ENVIRONMENT_VARIABLE) is tracked separately and will
1471+
// receive sequential seq_id values (1, 2, 3, etc.) when sent to telemetry.
1472+
1473+
SECTION("all three sources: DEFAULT -> CODE -> ENVIRONMENT_VARIABLE") {
1474+
TracerConfig config;
1475+
config.service = "code-service";
1476+
EnvGuard env{"DD_SERVICE", "env-service"};
1477+
1478+
auto finalized = finalize_config(config);
1479+
REQUIRE(finalized);
1480+
1481+
const auto& configs = finalized->telemetry.products[0].configurations.at(
1482+
ConfigName::SERVICE_NAME);
1483+
1484+
// All three sources in order (will receive seq_id 1, 2, 3)
1485+
REQUIRE(configs.size() == 3);
1486+
CHECK(configs[0].origin == ConfigMetadata::Origin::DEFAULT);
1487+
CHECK(configs[1].origin == ConfigMetadata::Origin::CODE);
1488+
CHECK(configs[1].value == "code-service");
1489+
CHECK(configs[2].origin == ConfigMetadata::Origin::ENVIRONMENT_VARIABLE);
1490+
CHECK(configs[2].value == "env-service");
1491+
1492+
// Metadata contains final value (highest precedence)
1493+
CHECK(finalized->metadata.at(ConfigName::SERVICE_NAME).value ==
1494+
"env-service");
1495+
}
1496+
1497+
SECTION("two sources: CODE -> ENVIRONMENT_VARIABLE (no default)") {
1498+
TracerConfig config;
1499+
config.service = "test";
1500+
config.environment = "dev";
1501+
EnvGuard env{"DD_ENV", "prod"};
1502+
1503+
auto finalized = finalize_config(config);
1504+
REQUIRE(finalized);
1505+
1506+
const auto& configs = finalized->telemetry.products[0].configurations.at(
1507+
ConfigName::SERVICE_ENV);
1508+
1509+
// Two sources (will receive seq_id 1, 2)
1510+
REQUIRE(configs.size() == 2);
1511+
CHECK(configs[0].origin == ConfigMetadata::Origin::CODE);
1512+
CHECK(configs[0].value == "dev");
1513+
CHECK(configs[1].origin == ConfigMetadata::Origin::ENVIRONMENT_VARIABLE);
1514+
CHECK(configs[1].value == "prod");
1515+
1516+
CHECK(finalized->metadata.at(ConfigName::SERVICE_ENV).value == "prod");
1517+
}
1518+
1519+
SECTION("single source: CODE only") {
1520+
TracerConfig config;
1521+
config.service = "test";
1522+
config.version = "1.2.3";
1523+
1524+
auto finalized = finalize_config(config);
1525+
REQUIRE(finalized);
1526+
1527+
const auto& configs = finalized->telemetry.products[0].configurations.at(
1528+
ConfigName::SERVICE_VERSION);
1529+
1530+
// Single source (will receive seq_id 1)
1531+
REQUIRE(configs.size() == 1);
1532+
CHECK(configs[0].origin == ConfigMetadata::Origin::CODE);
1533+
CHECK(configs[0].value == "1.2.3");
1534+
}
1535+
}

0 commit comments

Comments
 (0)