From e494de109d78aa6016fdcb0cf85ab3660dfe3c50 Mon Sep 17 00:00:00 2001 From: rochdev Date: Thu, 19 Sep 2024 18:00:09 -0400 Subject: [PATCH 1/7] enable crashtracking tests for nodejs --- manifests/nodejs.yml | 3 ++- utils/_context/_scenarios/parametric.py | 4 ++-- utils/build/docker/nodejs/parametric/server.js | 5 +++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/manifests/nodejs.yml b/manifests/nodejs.yml index 62192d351c..02999ef663 100644 --- a/manifests/nodejs.yml +++ b/manifests/nodejs.yml @@ -640,7 +640,8 @@ tests/: Test_Config_TraceEnabled: *ref_4_3_0 Test_Config_TraceLogDirectory: missing_feature Test_Config_UnifiedServiceTagging: *ref_5_25_0 - test_crashtracking.py: missing_feature + test_crashtracking.py: + Test_Crashtracking: *ref_5_23_0 test_dynamic_configuration.py: TestDynamicConfigSamplingRules: *ref_5_16_0 TestDynamicConfigTracingEnabled: *ref_5_4_0 diff --git a/utils/_context/_scenarios/parametric.py b/utils/_context/_scenarios/parametric.py index 19e182ef14..679083d0db 100644 --- a/utils/_context/_scenarios/parametric.py +++ b/utils/_context/_scenarios/parametric.py @@ -388,8 +388,8 @@ def node_library_factory() -> APMLibraryTestServer: container_name="node-test-client", container_tag="node-test-client", container_img=f""" -FROM node:18.10-alpine -RUN apk add --no-cache bash curl git jq +FROM node:18.10-slim +RUN apt-get update && apt-get -y install bash curl git jq WORKDIR /usr/app COPY {nodejs_reldir}/../app.sh /usr/app/ RUN printf 'node server.js' >> app.sh diff --git a/utils/build/docker/nodejs/parametric/server.js b/utils/build/docker/nodejs/parametric/server.js index 3e4f7bb08a..f0c67a3100 100644 --- a/utils/build/docker/nodejs/parametric/server.js +++ b/utils/build/docker/nodejs/parametric/server.js @@ -71,6 +71,11 @@ app.post('/trace/span/extract_headers', (req, res) => { res.json({ span_id: extractedSpanID }); }); +app.get('/trace/crash', (req, res) => { + process.kill(process.pid, 'SIGSEGV'); + res.json({}); +}); + app.post('/trace/span/start', (req, res) => { const request = req.body; let parent = spans[request.parent_id] || ddContext[request.parent_id]; From 357c13edcc2c1884eceb6d8558a662657e6a459f Mon Sep 17 00:00:00 2001 From: rochdev Date: Fri, 20 Sep 2024 10:09:40 -0400 Subject: [PATCH 2/7] add explicit test for crashtracking enabled --- tests/parametric/test_crashtracking.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tests/parametric/test_crashtracking.py b/tests/parametric/test_crashtracking.py index 9c00abfbfc..c8fd7e9872 100644 --- a/tests/parametric/test_crashtracking.py +++ b/tests/parametric/test_crashtracking.py @@ -13,10 +13,18 @@ @features.crashtracking class Test_Crashtracking: @pytest.mark.parametrize("library_env", [{"DD_CRASHTRACKING_ENABLED": "true"}]) + @missing_feature(context.library == "nodejs", reason="Only enabled for SSI by default") def test_report_crash(self, test_agent, test_library): test_library.crash() - event = test_agent.wait_for_telemetry_event("logs", wait_loops=400) + event = test_agent.wait_for_telemetry_event("logs", wait_loops=1000) + assert self.is_crash_report(test_library, event) + + @pytest.mark.parametrize("library_env", [{"DD_CRASHTRACKING_ENABLED": "true"}]) + def test_enable_crashtracking(self, test_agent, test_library): + test_library.crash() + + event = test_agent.wait_for_telemetry_event("logs", wait_loops=1000) assert self.is_crash_report(test_library, event) @pytest.mark.parametrize("library_env", [{"DD_CRASHTRACKING_ENABLED": "false"}]) From 4a407a1991183e1606f13900ebd47547705a6d8d Mon Sep 17 00:00:00 2001 From: rochdev Date: Wed, 20 Nov 2024 16:32:12 -0500 Subject: [PATCH 3/7] update version --- manifests/nodejs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/nodejs.yml b/manifests/nodejs.yml index 02999ef663..88a981b678 100644 --- a/manifests/nodejs.yml +++ b/manifests/nodejs.yml @@ -641,7 +641,7 @@ tests/: Test_Config_TraceLogDirectory: missing_feature Test_Config_UnifiedServiceTagging: *ref_5_25_0 test_crashtracking.py: - Test_Crashtracking: *ref_5_23_0 + Test_Crashtracking: *ref_5_26_0 test_dynamic_configuration.py: TestDynamicConfigSamplingRules: *ref_5_16_0 TestDynamicConfigTracingEnabled: *ref_5_4_0 From 7771a7d62898f7bdc5ab208d3bb1efdad160e9af Mon Sep 17 00:00:00 2001 From: rochdev Date: Thu, 21 Nov 2024 10:15:02 -0500 Subject: [PATCH 4/7] bump version --- manifests/nodejs.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/manifests/nodejs.yml b/manifests/nodejs.yml index 88a981b678..7b55d16caf 100644 --- a/manifests/nodejs.yml +++ b/manifests/nodejs.yml @@ -39,6 +39,7 @@ refs: - &ref_5_24_0 '>=5.24.0 || ^4.48.0' - &ref_5_25_0 '>=5.25.0 || ^4.49.0' - &ref_5_26_0 '>=5.26.0 || ^4.50.0' + - &ref_5_27_0 '>=5.27.0 || ^4.51.0' tests/: apm_tracing_e2e/: @@ -641,7 +642,7 @@ tests/: Test_Config_TraceLogDirectory: missing_feature Test_Config_UnifiedServiceTagging: *ref_5_25_0 test_crashtracking.py: - Test_Crashtracking: *ref_5_26_0 + Test_Crashtracking: *ref_5_27_0 test_dynamic_configuration.py: TestDynamicConfigSamplingRules: *ref_5_16_0 TestDynamicConfigTracingEnabled: *ref_5_4_0 From ffc2c8917decee72b177aa9929b013337bae4867 Mon Sep 17 00:00:00 2001 From: rochdev Date: Thu, 21 Nov 2024 11:45:34 -0500 Subject: [PATCH 5/7] remove env var for default crashtracking scenario --- tests/parametric/test_crashtracking.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/parametric/test_crashtracking.py b/tests/parametric/test_crashtracking.py index c8fd7e9872..3cc9373910 100644 --- a/tests/parametric/test_crashtracking.py +++ b/tests/parametric/test_crashtracking.py @@ -12,7 +12,6 @@ @scenarios.parametric @features.crashtracking class Test_Crashtracking: - @pytest.mark.parametrize("library_env", [{"DD_CRASHTRACKING_ENABLED": "true"}]) @missing_feature(context.library == "nodejs", reason="Only enabled for SSI by default") def test_report_crash(self, test_agent, test_library): test_library.crash() From c30573ffa2a76c54a9bb7f480dfc4b881872b9be Mon Sep 17 00:00:00 2001 From: rochdev Date: Thu, 21 Nov 2024 13:10:22 -0500 Subject: [PATCH 6/7] revert wait loops change --- tests/parametric/test_crashtracking.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/parametric/test_crashtracking.py b/tests/parametric/test_crashtracking.py index 3cc9373910..3c9ecd046f 100644 --- a/tests/parametric/test_crashtracking.py +++ b/tests/parametric/test_crashtracking.py @@ -16,14 +16,14 @@ class Test_Crashtracking: def test_report_crash(self, test_agent, test_library): test_library.crash() - event = test_agent.wait_for_telemetry_event("logs", wait_loops=1000) + event = test_agent.wait_for_telemetry_event("logs", wait_loops=400) assert self.is_crash_report(test_library, event) @pytest.mark.parametrize("library_env", [{"DD_CRASHTRACKING_ENABLED": "true"}]) def test_enable_crashtracking(self, test_agent, test_library): test_library.crash() - event = test_agent.wait_for_telemetry_event("logs", wait_loops=1000) + event = test_agent.wait_for_telemetry_event("logs", wait_loops=400) assert self.is_crash_report(test_library, event) @pytest.mark.parametrize("library_env", [{"DD_CRASHTRACKING_ENABLED": "false"}]) From ee83860c57acf39e68a89b7ff2016184b86ddf43 Mon Sep 17 00:00:00 2001 From: rochdev Date: Thu, 21 Nov 2024 14:15:03 -0500 Subject: [PATCH 7/7] remove additional test --- tests/parametric/test_crashtracking.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/tests/parametric/test_crashtracking.py b/tests/parametric/test_crashtracking.py index 3c9ecd046f..9c00abfbfc 100644 --- a/tests/parametric/test_crashtracking.py +++ b/tests/parametric/test_crashtracking.py @@ -12,15 +12,8 @@ @scenarios.parametric @features.crashtracking class Test_Crashtracking: - @missing_feature(context.library == "nodejs", reason="Only enabled for SSI by default") - def test_report_crash(self, test_agent, test_library): - test_library.crash() - - event = test_agent.wait_for_telemetry_event("logs", wait_loops=400) - assert self.is_crash_report(test_library, event) - @pytest.mark.parametrize("library_env", [{"DD_CRASHTRACKING_ENABLED": "true"}]) - def test_enable_crashtracking(self, test_agent, test_library): + def test_report_crash(self, test_agent, test_library): test_library.crash() event = test_agent.wait_for_telemetry_event("logs", wait_loops=400)