Skip to content
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
682a31d
feat(telemetry): add app-extended-heartbeat parametric tests
khanayan123 Feb 18, 2026
36d138b
feat(telemetry): register app-extended-heartbeat tests in manifests
khanayan123 Feb 18, 2026
011f076
fix(manifests): use missing_feature instead of -dev version strings
khanayan123 Feb 24, 2026
736c5cc
simplify(telemetry): reduce app-extended-heartbeat tests to core func…
khanayan123 Feb 24, 2026
10c756f
remove md file
khanayan123 Feb 24, 2026
6be060e
test(manifests): enable Test_ExtendedHeartbeat for Node.js only
khanayan123 Feb 24, 2026
ee72e96
chore(lint): fix linting issues for app-extended-heartbeat tests
khanayan123 Feb 24, 2026
2cf6d0c
test(manifests): enable Test_ExtendedHeartbeat for Java
khanayan123 Feb 25, 2026
0650819
Merge main into ayan.khan/app-extended-heartbeat
khanayan123 Mar 31, 2026
f3e3558
chore: revert pyproject.toml and remove heartbeat interval override
khanayan123 Mar 31, 2026
1939816
fix(telemetry): improve extended heartbeat config assertion logic
khanayan123 Mar 31, 2026
2afc8ef
update tests and manifest file
khanayan123 Mar 31, 2026
f13a0a7
enable python system tests
khanayan123 Mar 31, 2026
6014da1
Merge main into ayan.khan/app-extended-heartbeat
khanayan123 Mar 31, 2026
b8d7d40
Add end-to-end test for app-extended-heartbeat telemetry
khanayan123 Apr 1, 2026
1b11a18
Move extended heartbeat env var to DEFAULT scenario definition
khanayan123 Apr 1, 2026
58f28a8
Remove parametric Test_ExtendedHeartbeat in favor of e2e test
khanayan123 Apr 1, 2026
e5dfac1
Merge branch 'main' into ayan.khan/app-extended-heartbeat
khanayan123 Apr 1, 2026
efab352
Fix ruff formatting: remove trailing blank line
khanayan123 Apr 1, 2026
bb0ca10
Move extended heartbeat test to dedicated scenario
khanayan123 Apr 1, 2026
f3639ff
Set DD_TELEMETRY_HEARTBEAT_INTERVAL=1 in extended heartbeat scenario
khanayan123 Apr 1, 2026
24690ab
Update cpp manifest for extended heartbeat to v2.1.0
khanayan123 Apr 1, 2026
8228995
Fix cpp manifest version for extended heartbeat
khanayan123 Apr 1, 2026
ee40a2d
Fix cpp manifest entries for extended heartbeat
khanayan123 Apr 1, 2026
4dfaa04
enable ruby system tests
khanayan123 Apr 1, 2026
1bfb4b8
fix(telemetry): improve extended heartbeat config assertion logic
khanayan123 Apr 1, 2026
63b9cf4
Revert "fix(telemetry): improve extended heartbeat config assertion l…
khanayan123 Apr 1, 2026
388375a
fix(telemetry): improve extended heartbeat config assertion logic
khanayan123 Apr 1, 2026
5f083a1
Add setup method with sleep to extended heartbeat test
khanayan123 Apr 2, 2026
0c14d55
Fix setup method name and use wait_for for extended heartbeat
khanayan123 Apr 2, 2026
03bca5b
Fix wait_for lambda to handle non-telemetry data safely
khanayan123 Apr 2, 2026
b554ffd
Use time.sleep instead of wait_for in extended heartbeat setup
khanayan123 Apr 2, 2026
7024834
Use tracer_time for ordering extended heartbeat config comparison
khanayan123 Apr 2, 2026
bd71581
Filter telemetry events by runtime_id for extended heartbeat test
khanayan123 Apr 2, 2026
ef468b2
Rework extended heartbeat test to check across all heartbeats
khanayan123 Apr 2, 2026
d27ca17
Simplify extended heartbeat test to check config name presence
khanayan123 Apr 2, 2026
c44e4f3
Remove unnecessary sleep from extended heartbeat setup
khanayan123 Apr 2, 2026
11e4845
Enable extended heartbeat test for next Go release
khanayan123 Apr 2, 2026
d219e87
Revert golang extended heartbeat to missing_feature
khanayan123 Apr 2, 2026
0ed912f
pass golang
khanayan123 Apr 7, 2026
4b9c4ec
Merge branch 'main' into ayan.khan/app-extended-heartbeat
khanayan123 Apr 9, 2026
9d3aa89
Enable extended heartbeat test for next Node.js release
khanayan123 Apr 9, 2026
e9f257e
enable php
khanayan123 Apr 14, 2026
0742b54
Merge branch 'main' into ayan.khan/app-extended-heartbeat
khanayan123 Apr 14, 2026
9477f2c
fix version for golang
khanayan123 Apr 14, 2026
1512829
Mark PHP extended heartbeat as missing_feature
khanayan123 Apr 15, 2026
b55785e
enable php
khanayan123 Apr 22, 2026
ca5ad27
revert
khanayan123 Apr 22, 2026
dca9b64
Merge branch 'main' into ayan.khan/app-extended-heartbeat
khanayan123 Apr 22, 2026
38137fa
Merge branch 'main' into ayan.khan/app-extended-heartbeat
khanayan123 Apr 22, 2026
49f6dc1
Merge branch 'main' into ayan.khan/app-extended-heartbeat
khanayan123 Apr 22, 2026
4f7f76e
Register TELEMETRY_EXTENDED_HEARTBEAT in run-end-to-end workflow
khanayan123 Apr 22, 2026
c78fad7
Mark Test_ExtendedHeartbeat missing_feature where tracers don't yet emit
khanayan123 Apr 28, 2026
45986b7
Merge remote-tracking branch 'origin/main' into ayan.khan/app-extende…
khanayan123 May 6, 2026
dfbe966
Make conf_key_value.value optional; enable Test_ExtendedHeartbeat for…
khanayan123 May 8, 2026
edb2b6a
Enable Test_ExtendedHeartbeat for golang, cpp_nginx, cpp_httpd
khanayan123 May 12, 2026
319932b
Fix golang.yml: drop 'v' prefix in NPM-style range
khanayan123 May 12, 2026
d1cd94d
Enable Test_ExtendedHeartbeat for php >=1.20.0
khanayan123 May 12, 2026
9ee1183
Merge branch 'main' into ayan.khan/app-extended-heartbeat
khanayan123 May 12, 2026
e0e3525
Restrict java Test_ExtendedHeartbeat to spring-boot only
khanayan123 May 12, 2026
4aabacf
Revert PHP Test_ExtendedHeartbeat to missing_feature
khanayan123 May 12, 2026
9b2dc9b
Use !cancelled() for TELEMETRY_EXTENDED_HEARTBEAT step
khanayan123 May 12, 2026
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
1 change: 1 addition & 0 deletions manifests/cpp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,7 @@ manifest:
tests/parametric/test_telemetry.py::Test_Consistent_Configs: missing_feature
tests/parametric/test_telemetry.py::Test_Environment::test_telemetry_otel_env_hiding: missing_feature (Not implemented)
tests/parametric/test_telemetry.py::Test_Environment::test_telemetry_otel_env_invalid: missing_feature (Not implemented)
tests/parametric/test_telemetry.py::Test_ExtendedHeartbeat: missing_feature
tests/parametric/test_telemetry.py::Test_Stable_Configuration_Origin: missing_feature
? tests/parametric/test_telemetry.py::Test_Stable_Configuration_Origin::test_stable_configuration_origin_extended_configs_good_use_case
: missing_feature (extended configs are not supported)
Expand Down
1 change: 1 addition & 0 deletions manifests/dotnet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -995,6 +995,7 @@ manifest:
tests/parametric/test_telemetry.py::Test_Environment: v2.49.0
tests/parametric/test_telemetry.py::Test_Environment::test_telemetry_otel_env_hiding: missing_feature (Not implemented)
tests/parametric/test_telemetry.py::Test_Environment::test_telemetry_otel_env_invalid: missing_feature (Not implemented)
tests/parametric/test_telemetry.py::Test_ExtendedHeartbeat: v3.39.0
tests/parametric/test_telemetry.py::Test_Stable_Configuration_Origin: v3.28.0
tests/parametric/test_telemetry.py::Test_Stable_Configuration_Origin::test_stable_configuration_config_id: missing_feature (Not implemented)
? tests/parametric/test_telemetry.py::Test_Stable_Configuration_Origin::test_stable_configuration_origin_extended_configs_temporary_use_case
Expand Down
1 change: 1 addition & 0 deletions manifests/golang.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1182,6 +1182,7 @@ manifest:
tests/parametric/test_telemetry.py::Test_Consistent_Configs: missing_feature (APMAPI-745)
tests/parametric/test_telemetry.py::Test_Defaults: missing_feature
tests/parametric/test_telemetry.py::Test_Environment: missing_feature
tests/parametric/test_telemetry.py::Test_ExtendedHeartbeat: missing_feature
tests/parametric/test_telemetry.py::Test_Stable_Configuration_Origin: v2.1.0-dev.2
? tests/parametric/test_telemetry.py::Test_Stable_Configuration_Origin::test_stable_configuration_origin_extended_configs_good_use_case
: missing_feature (extended configs are not supported)
Expand Down
1 change: 1 addition & 0 deletions manifests/java.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3732,6 +3732,7 @@ manifest:
tests/parametric/test_telemetry.py::Test_Environment: v1.61.0-SNAPSHOT # Normalization of telemetry keys updated in https://github.com/DataDog/dd-trace-java/pull/10823
tests/parametric/test_telemetry.py::Test_Environment::test_telemetry_otel_env_hiding: missing_feature (Not implemented)
tests/parametric/test_telemetry.py::Test_Environment::test_telemetry_otel_env_invalid: missing_feature (Not implemented)
tests/parametric/test_telemetry.py::Test_ExtendedHeartbeat: v1.23.0 # Java supports configurable extended heartbeat interval
tests/parametric/test_telemetry.py::Test_Stable_Configuration_Origin: 1.61.0-SNAPSHOT # Normalization of telemetry keys updated in https://github.com/DataDog/dd-trace-java/pull/10823
tests/parametric/test_telemetry.py::Test_Stable_Configuration_Origin::test_stable_configuration_config_id: 1.61.0-SNAPSHOT # Normalization of telemetry keys updated in https://github.com/DataDog/dd-trace-java/pull/10823
? tests/parametric/test_telemetry.py::Test_Stable_Configuration_Origin::test_stable_configuration_origin_extended_configs_temporary_use_case
Expand Down
2 changes: 2 additions & 0 deletions manifests/nodejs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ refs:
- &ref_5_88_0 '>=5.88.0'
- &ref_5_89_0 '>=5.89.0'
- &ref_5_90_0 '>=5.90.0'
- &ref_5_94_0 '>=5.94.0'
- &ref_6_0_0 '>=6.0.0-pre'
manifest:
tests/ai_guard/test_ai_guard_sdk.py::Test_ContentParts:
Expand Down Expand Up @@ -2078,6 +2079,7 @@ manifest:
tests/parametric/test_telemetry.py::Test_Defaults: *ref_5_6_0
tests/parametric/test_telemetry.py::Test_Environment: *ref_5_6_0
tests/parametric/test_telemetry.py::Test_Environment::test_telemetry_otel_env_invalid: missing_feature (does not collect otel_env.invalid metrics for otel_resource_attributes)
tests/parametric/test_telemetry.py::Test_ExtendedHeartbeat: *ref_5_94_0
tests/parametric/test_telemetry.py::Test_Stable_Configuration_Origin: *ref_5_41_0
tests/parametric/test_telemetry.py::Test_Stable_Configuration_Origin::test_stable_configuration_config_id: missing_feature (Not implemented)
? tests/parametric/test_telemetry.py::Test_Stable_Configuration_Origin::test_stable_configuration_origin_extended_configs_good_use_case
Expand Down
1 change: 1 addition & 0 deletions manifests/php.yml
Original file line number Diff line number Diff line change
Expand Up @@ -840,6 +840,7 @@ manifest:
tests/parametric/test_telemetry.py::Test_Environment: missing_feature
tests/parametric/test_telemetry.py::Test_Environment::test_telemetry_otel_env_hiding: missing_feature (Not implemented)
tests/parametric/test_telemetry.py::Test_Environment::test_telemetry_otel_env_invalid: missing_feature (Not implemented)
tests/parametric/test_telemetry.py::Test_ExtendedHeartbeat: missing_feature
tests/parametric/test_telemetry.py::Test_Stable_Configuration_Origin: v1.9.0
? tests/parametric/test_telemetry.py::Test_Stable_Configuration_Origin::test_stable_configuration_origin_extended_configs_temporary_use_case
: irrelevant (temporary use case for python, ruby and nodejs)
Expand Down
1 change: 1 addition & 0 deletions manifests/python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1771,6 +1771,7 @@ manifest:
component_version: <=2.16.0
tests/parametric/test_telemetry.py::Test_Environment::test_telemetry_otel_env_hiding: missing_feature (OTEL Sampling config is mapped to a different datadog config)
tests/parametric/test_telemetry.py::Test_Environment::test_telemetry_otel_env_invalid: missing_feature (OTEL Sampling config is mapped to a different datadog config)
tests/parametric/test_telemetry.py::Test_ExtendedHeartbeat: v4.6.5
tests/parametric/test_telemetry.py::Test_Stable_Configuration_Origin: v3.7.0.dev
? tests/parametric/test_telemetry.py::Test_Stable_Configuration_Origin::test_stable_configuration_origin_extended_configs_good_use_case
: bug (APMAPI-1630)
Expand Down
1 change: 1 addition & 0 deletions manifests/ruby.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1534,6 +1534,7 @@ manifest:
tests/parametric/test_telemetry.py::Test_Environment: missing_feature
tests/parametric/test_telemetry.py::Test_Environment::test_telemetry_otel_env_hiding: missing_feature (Not implemented)
tests/parametric/test_telemetry.py::Test_Environment::test_telemetry_otel_env_invalid: missing_feature (Not implemented)
tests/parametric/test_telemetry.py::Test_ExtendedHeartbeat: missing_feature
tests/parametric/test_telemetry.py::Test_Stable_Configuration_Origin: v2.31.0-dev
? tests/parametric/test_telemetry.py::Test_Stable_Configuration_Origin::test_stable_configuration_origin_extended_configs_good_use_case
: bug (APMAPI-1631)
Expand Down
64 changes: 64 additions & 0 deletions tests/parametric/test_telemetry.py
Original file line number Diff line number Diff line change
Expand Up @@ -1304,3 +1304,67 @@ def test_telemetry_sca_enabled_not_propagated(self, test_agent: TestAgentAPI, te
assert cfg_appsec_enabled[0].get("value") is None
else:
assert all(config_name not in configuration_by_name for config_name in dd_appsec_sca_enabled_names)


@scenarios.parametric
@rfc("https://datadoghq.atlassian.net/wiki/spaces/AP/pages/")
@features.app_extended_heartbeat_event
class Test_ExtendedHeartbeat:
"""Test app-extended-heartbeat telemetry event"""

@pytest.mark.parametrize(
"library_env",
[
{
"DD_TELEMETRY_HEARTBEAT_INTERVAL": "1",
"_DD_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL": "2",
"DD_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL": "2",
}
],
)
def test_extended_heartbeat_config_matches(self, test_agent: TestAgentAPI, test_library: APMLibrary):
"""Test that app-extended-heartbeat configuration is a superset of app-started
and includes any updates from app-client-configuration-change.
"""

with test_library.dd_start_span("test"):
pass

time.sleep(5)

events = test_agent.telemetry(clear=False)

app_started = None
extended_hb = None
config_changes = []

for event in events:
if test_agent._get_telemetry_event(event, "app-started"): # noqa: SLF001
app_started = test_agent._get_telemetry_event(event, "app-started") # noqa: SLF001
if test_agent._get_telemetry_event(event, "app-extended-heartbeat"): # noqa: SLF001
extended_hb = test_agent._get_telemetry_event(event, "app-extended-heartbeat") # noqa: SLF001
if test_agent._get_telemetry_event(event, "app-client-configuration-change"): # noqa: SLF001
config_changes.append(test_agent._get_telemetry_event(event, "app-client-configuration-change")) # noqa: SLF001

assert app_started is not None, "app-started event not found"
assert extended_hb is not None, "app-extended-heartbeat event not found"

started_config = {c["name"]: c.get("value") for c in app_started["payload"].get("configuration", [])}
extended_config = {c["name"]: c.get("value") for c in extended_hb["payload"].get("configuration", [])}

# Build expected config: start with app-started, then apply any config changes on top
expected_config = dict(started_config)
for change_event in config_changes:
change_config = {c["name"]: c.get("value") for c in change_event["payload"].get("configuration", [])}
expected_config.update(change_config)

# All expected configs should be present in app-extended-heartbeat with matching values
for name, value in expected_config.items():
assert name in extended_config, (
f"Config '{name}' missing in app-extended-heartbeat. "
f"Expected keys: {sorted(expected_config.keys())}, "
f"Got keys: {sorted(extended_config.keys())}"
)
assert extended_config[name] == value, (
f"Config '{name}' value mismatch. Expected: {value}, Got: {extended_config[name]}"
)
Loading