Skip to content

Commit 01d5da1

Browse files
committed
make telemetry_mapping a string; include DD_TRACE_DEBUG for golang key
1 parent 71e7dba commit 01d5da1

File tree

1 file changed

+102
-66
lines changed

1 file changed

+102
-66
lines changed

tests/parametric/test_telemetry.py

Lines changed: 102 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383
"java": "trace_debug",
8484
"ruby": "DD_TRACE_DEBUG",
8585
"python": "DD_TRACE_DEBUG",
86-
"golang": "DD_TRACE_DEBUG", # Before v2.5.0-dev, the telemetry name was "trace_debug_enabled" — see _mapped_telemetry_name
86+
"golang": ["trace_debug_enabled", "DD_TRACE_DEBUG"],
8787
},
8888
"tags": {
8989
"java": "trace_tags",
@@ -98,18 +98,14 @@
9898
}
9999

100100

101-
def _mapped_telemetry_name(apm_telemetry_name: str):
101+
def _mapped_telemetry_name(apm_telemetry_name: str) -> list[str]:
102102
if apm_telemetry_name in telemetry_name_mapping:
103103
mapped_name = telemetry_name_mapping[apm_telemetry_name].get(context.library.name)
104104
if mapped_name is not None:
105-
if (
106-
apm_telemetry_name == "trace_debug_enabled"
107-
and context.library.name == "golang"
108-
and context.library <= "[email protected]"
109-
):
110-
return "trace_debug_enabled"
111-
return mapped_name
112-
return apm_telemetry_name
105+
if isinstance(mapped_name, list):
106+
return mapped_name
107+
return [mapped_name]
108+
return [apm_telemetry_name]
113109

114110

115111
def _find_configuration_by_origin(config_list: list[dict], origin: str) -> dict | None:
@@ -225,22 +221,26 @@ def test_library_settings(self, library_env: dict[str, str], test_agent: TestAge
225221
if context.library == "python" and apm_telemetry_name in ("trace_sample_rate",):
226222
# DD_TRACE_SAMPLE_RATE is not supported in ddtrace>=3.x
227223
continue
228-
mapped_apm_telemetry_name = _mapped_telemetry_name(apm_telemetry_name)
224+
mapped_apm_telemetry_names = _mapped_telemetry_name(apm_telemetry_name)
229225

230-
cfg_item = test_agent.get_telemetry_config_by_origin(
231-
configuration_by_name, mapped_apm_telemetry_name, "default"
232-
)
226+
cfg_item = None
227+
for mapped_name in mapped_apm_telemetry_names:
228+
cfg_item = test_agent.get_telemetry_config_by_origin(
229+
configuration_by_name, mapped_name, "default"
230+
)
231+
if cfg_item is not None:
232+
break
233233
assert (
234234
cfg_item is not None
235-
), f"No configuration found for '{mapped_apm_telemetry_name}' with origin 'default'"
235+
), f"No configuration found for any of '{mapped_apm_telemetry_names}' with origin 'default'"
236236
assert isinstance(cfg_item, dict)
237237
if isinstance(value, tuple):
238238
assert (
239239
cfg_item.get("value") in value
240-
), f"Unexpected value for '{mapped_apm_telemetry_name}' ('{context.library}')"
240+
), f"Unexpected value for '{mapped_apm_telemetry_names}' ('{context.library}')"
241241
else:
242-
assert cfg_item.get("value") == value, f"Unexpected value for '{mapped_apm_telemetry_name}'"
243-
assert cfg_item.get("origin") == "default", f"Unexpected origin for '{mapped_apm_telemetry_name}'"
242+
assert cfg_item.get("value") == value, f"Unexpected value for '{mapped_apm_telemetry_names}'"
243+
assert cfg_item.get("origin") == "default", f"Unexpected origin for '{mapped_apm_telemetry_names}'"
244244

245245

246246
@scenarios.parametric
@@ -438,17 +438,21 @@ def test_library_settings(self, library_env: dict[str, str], test_agent: TestAge
438438
# DD_TRACE_SAMPLE_RATE is not supported in ddtrace>=3.x
439439
continue
440440

441-
mapped_apm_telemetry_name = _mapped_telemetry_name(apm_telemetry_name)
442-
cfg_item = test_agent.get_telemetry_config_by_origin(
443-
configuration_by_name, mapped_apm_telemetry_name, "env_var"
444-
)
445-
assert cfg_item is not None, f"Missing telemetry config item for '{mapped_apm_telemetry_name}'"
441+
mapped_apm_telemetry_names = _mapped_telemetry_name(apm_telemetry_name)
442+
cfg_item = None
443+
for mapped_name in mapped_apm_telemetry_names:
444+
cfg_item = test_agent.get_telemetry_config_by_origin(
445+
configuration_by_name, mapped_name, "env_var"
446+
)
447+
if cfg_item is not None:
448+
break
449+
assert cfg_item is not None, f"Missing telemetry config item for any of '{mapped_apm_telemetry_names}'"
446450
assert isinstance(cfg_item, dict)
447451
if isinstance(environment_value, tuple):
448-
assert cfg_item.get("value") in environment_value, f"Unexpected value for '{mapped_apm_telemetry_name}'"
452+
assert cfg_item.get("value") in environment_value, f"Unexpected value for '{mapped_apm_telemetry_names}'"
449453
else:
450-
assert cfg_item.get("value") == environment_value, f"Unexpected value for '{mapped_apm_telemetry_name}'"
451-
assert cfg_item.get("origin") == "env_var", f"Unexpected origin for '{mapped_apm_telemetry_name}'"
454+
assert cfg_item.get("value") == environment_value, f"Unexpected value for '{mapped_apm_telemetry_names}'"
455+
assert cfg_item.get("origin") == "env_var", f"Unexpected origin for '{mapped_apm_telemetry_names}'"
452456

453457
@missing_feature(context.library == "dotnet", reason="Not implemented")
454458
@missing_feature(context.library == "java", reason="Not implemented")
@@ -694,13 +698,17 @@ def test_stable_configuration_origin(
694698
# The Go tracer does not support logs injection.
695699
if context.library == "golang" and cfg_name == "logs_injection_enabled":
696700
continue
697-
apm_telemetry_name = _mapped_telemetry_name(cfg_name)
698-
telemetry_item = test_agent.get_telemetry_config_by_origin(
699-
configuration_by_name, apm_telemetry_name, expected_origin
700-
)
701+
apm_telemetry_names = _mapped_telemetry_name(cfg_name)
702+
telemetry_item = None
703+
for apm_name in apm_telemetry_names:
704+
telemetry_item = test_agent.get_telemetry_config_by_origin(
705+
configuration_by_name, apm_name, expected_origin
706+
)
707+
if telemetry_item is not None:
708+
break
701709
assert (
702710
telemetry_item is not None
703-
), f"No configuration found for '{apm_telemetry_name}' with origin '{expected_origin}'"
711+
), f"No configuration found for any of '{apm_telemetry_names}' with origin '{expected_origin}'"
704712
assert isinstance(telemetry_item, dict)
705713
assert telemetry_item["origin"] == expected_origin, f"wrong origin for {telemetry_item}"
706714
assert telemetry_item["value"]
@@ -755,25 +763,33 @@ def test_stable_configuration_config_id(
755763
test_library.dd_start_span("test")
756764
configuration_by_name = test_agent.wait_for_telemetry_configurations()
757765
# Configuration set via fleet config should have the config_id set
758-
apm_telemetry_name = _mapped_telemetry_name("trace_debug_enabled")
759-
telemetry_item = test_agent.get_telemetry_config_by_origin(
760-
configuration_by_name, apm_telemetry_name, "fleet_stable_config"
761-
)
766+
apm_telemetry_names = _mapped_telemetry_name("trace_debug_enabled")
767+
telemetry_item = None
768+
for apm_name in apm_telemetry_names:
769+
telemetry_item = test_agent.get_telemetry_config_by_origin(
770+
configuration_by_name, apm_name, "fleet_stable_config"
771+
)
772+
if telemetry_item is not None:
773+
break
762774
assert (
763775
telemetry_item is not None
764-
), f"No configuration found for '{apm_telemetry_name}' with origin 'fleet_stable_config'"
776+
), f"No configuration found for any of '{apm_telemetry_names}' with origin 'fleet_stable_config'"
765777
assert isinstance(telemetry_item, dict)
766778
assert telemetry_item["origin"] == "fleet_stable_config"
767779
assert telemetry_item["config_id"] == fleet_config_id
768780

769781
# Configuration set via local config should not have the config_id set
770-
apm_telemetry_name = _mapped_telemetry_name("dynamic_instrumentation_enabled")
771-
telemetry_item = test_agent.get_telemetry_config_by_origin(
772-
configuration_by_name, apm_telemetry_name, "local_stable_config"
773-
)
782+
apm_telemetry_names = _mapped_telemetry_name("dynamic_instrumentation_enabled")
783+
telemetry_item = None
784+
for apm_name in apm_telemetry_names:
785+
telemetry_item = test_agent.get_telemetry_config_by_origin(
786+
configuration_by_name, apm_name, "local_stable_config"
787+
)
788+
if telemetry_item is not None:
789+
break
774790
assert (
775791
telemetry_item is not None
776-
), f"No configuration found for '{apm_telemetry_name}' with origin 'local_stable_config'"
792+
), f"No configuration found for any of '{apm_telemetry_names}' with origin 'local_stable_config'"
777793
assert isinstance(telemetry_item, dict)
778794
assert telemetry_item["origin"] == "local_stable_config"
779795
assert "config_id" not in telemetry_item or telemetry_item["config_id"] is None
@@ -842,13 +858,17 @@ def test_stable_configuration_origin_extended_configs_good_use_case(
842858
test_library.dd_start_span("test")
843859
configuration_by_name = test_agent.wait_for_telemetry_configurations()
844860
for cfg_name, expected_origin in expected_origins.items():
845-
apm_telemetry_name = _mapped_telemetry_name(cfg_name)
846-
telemetry_item = test_agent.get_telemetry_config_by_origin(
847-
configuration_by_name, apm_telemetry_name, expected_origin
848-
)
861+
apm_telemetry_names = _mapped_telemetry_name(cfg_name)
862+
telemetry_item = None
863+
for apm_name in apm_telemetry_names:
864+
telemetry_item = test_agent.get_telemetry_config_by_origin(
865+
configuration_by_name, apm_name, expected_origin
866+
)
867+
if telemetry_item is not None:
868+
break
849869
assert (
850870
telemetry_item is not None
851-
), f"No configuration found for '{apm_telemetry_name}' with origin '{expected_origin}'. Full configuration_by_name: {configuration_by_name}"
871+
), f"No configuration found for any of '{apm_telemetry_names}' with origin '{expected_origin}'. Full configuration_by_name: {configuration_by_name}"
852872

853873
assert isinstance(telemetry_item, dict)
854874
actual_origin = telemetry_item.get("origin", "<missing>")
@@ -929,13 +949,17 @@ def test_stable_configuration_origin_extended_configs_temporary_use_case(
929949
elif cfg_name == "tags" and context.library.name in ["ruby"]:
930950
continue
931951
else:
932-
apm_telemetry_name = _mapped_telemetry_name(cfg_name)
933-
telemetry_item = test_agent.get_telemetry_config_by_origin(
934-
configuration_by_name, apm_telemetry_name, expected_origin
935-
)
952+
apm_telemetry_names = _mapped_telemetry_name(cfg_name)
953+
telemetry_item = None
954+
for apm_name in apm_telemetry_names:
955+
telemetry_item = test_agent.get_telemetry_config_by_origin(
956+
configuration_by_name, apm_name, expected_origin
957+
)
958+
if telemetry_item is not None:
959+
break
936960
assert (
937961
telemetry_item is not None
938-
), f"No configuration found for '{apm_telemetry_name}' with origin '{expected_origin}'. Full configuration_by_name: {configuration_by_name}"
962+
), f"No configuration found for any of '{apm_telemetry_names}' with origin '{expected_origin}'. Full configuration_by_name: {configuration_by_name}"
939963
assert isinstance(telemetry_item, dict)
940964
actual_origin = telemetry_item.get("origin", "<missing>")
941965
assert (
@@ -1087,11 +1111,15 @@ def test_injection_enabled(
10871111
test_agent.wait_for_telemetry_configurations()
10881112

10891113
configuration_by_name = test_agent.wait_for_telemetry_configurations(service="service_test")
1090-
ssi_enabled_telemetry_name = _mapped_telemetry_name("ssi_injection_enabled")
1091-
inject_enabled = test_agent.get_telemetry_config_by_origin(
1092-
configuration_by_name, ssi_enabled_telemetry_name, "env_var", fallback_to_first=(expected_value is None)
1093-
)
1094-
assert inject_enabled is not None, f"No configuration found for '{ssi_enabled_telemetry_name}'"
1114+
ssi_enabled_telemetry_names = _mapped_telemetry_name("ssi_injection_enabled")
1115+
inject_enabled = None
1116+
for ssi_name in ssi_enabled_telemetry_names:
1117+
inject_enabled = test_agent.get_telemetry_config_by_origin(
1118+
configuration_by_name, ssi_name, "env_var", fallback_to_first=(expected_value is None)
1119+
)
1120+
if inject_enabled is not None:
1121+
break
1122+
assert inject_enabled is not None, f"No configuration found for any of '{ssi_enabled_telemetry_names}'"
10951123
assert isinstance(inject_enabled, dict)
10961124
assert inject_enabled.get("value") == expected_value
10971125
if expected_value is not None:
@@ -1138,11 +1166,15 @@ def test_inject_force(
11381166
test_agent.wait_for_telemetry_configurations()
11391167
configuration_by_name = test_agent.wait_for_telemetry_configurations(service="service_test")
11401168
# # Check that the tags name match the expected value
1141-
inject_force_telemetry_name = _mapped_telemetry_name("ssi_forced_injection_enabled")
1142-
inject_force = test_agent.get_telemetry_config_by_origin(
1143-
configuration_by_name, inject_force_telemetry_name, "env_var", fallback_to_first=(expected_value == "none")
1144-
)
1145-
assert inject_force is not None, f"No configuration found for '{inject_force_telemetry_name}'"
1169+
inject_force_telemetry_names = _mapped_telemetry_name("ssi_forced_injection_enabled")
1170+
inject_force = None
1171+
for inject_force_name in inject_force_telemetry_names:
1172+
inject_force = test_agent.get_telemetry_config_by_origin(
1173+
configuration_by_name, inject_force_name, "env_var", fallback_to_first=(expected_value == "none")
1174+
)
1175+
if inject_force is not None:
1176+
break
1177+
assert inject_force is not None, f"No configuration found for any of '{inject_force_telemetry_names}'"
11461178
assert isinstance(inject_force, dict)
11471179
assert str(inject_force.get("value")).lower() == expected_value
11481180
if expected_value != "none":
@@ -1160,14 +1192,18 @@ def test_instrumentation_source_non_ssi(
11601192
test_agent.wait_for_telemetry_configurations()
11611193
configuration_by_name = test_agent.wait_for_telemetry_configurations(service="service_test")
11621194
# Check that the tags name match the expected value
1163-
instrumentation_source_telemetry_name = _mapped_telemetry_name("instrumentation_source")
1195+
instrumentation_source_telemetry_names = _mapped_telemetry_name("instrumentation_source")
11641196
# Take any configuration (origin doesn't matter for this test)
1165-
instrumentation_source = test_agent.get_telemetry_config_by_origin(
1166-
configuration_by_name, instrumentation_source_telemetry_name, "default", fallback_to_first=True
1167-
)
1197+
instrumentation_source = None
1198+
for instrumentation_source_name in instrumentation_source_telemetry_names:
1199+
instrumentation_source = test_agent.get_telemetry_config_by_origin(
1200+
configuration_by_name, instrumentation_source_name, "default", fallback_to_first=True
1201+
)
1202+
if instrumentation_source is not None:
1203+
break
11681204
assert (
11691205
instrumentation_source is not None
1170-
), f"No configuration found for '{instrumentation_source_telemetry_name}'"
1206+
), f"No configuration found for any of '{instrumentation_source_telemetry_names}'"
11711207
assert isinstance(instrumentation_source, dict)
11721208
value: str | None = instrumentation_source.get("value")
11731209
assert value is not None

0 commit comments

Comments
 (0)