@@ -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