Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
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
3 changes: 3 additions & 0 deletions .github/workflows/run-end-to-end.yml
Original file line number Diff line number Diff line change
Expand Up @@ -427,6 +427,9 @@ jobs:
- name: Run TELEMETRY_DEPENDENCY_LOADED_TEST_FOR_DEPENDENCY_COLLECTION_DISABLED scenario
if: steps.build.outcome == 'success' && !cancelled() && contains(inputs.scenarios, '"TELEMETRY_DEPENDENCY_LOADED_TEST_FOR_DEPENDENCY_COLLECTION_DISABLED"')
run: ./run.sh TELEMETRY_DEPENDENCY_LOADED_TEST_FOR_DEPENDENCY_COLLECTION_DISABLED
- name: Run DEBUGGER_CAPTURE_TIMEOUT scenario
if: steps.build.outcome == 'success' && !cancelled() && contains(inputs.scenarios, '"DEBUGGER_CAPTURE_TIMEOUT"')
run: ./run.sh DEBUGGER_CAPTURE_TIMEOUT
- name: Run DEBUGGER_PROBES_SNAPSHOT scenario
if: steps.build.outcome == 'success' && !cancelled() && contains(inputs.scenarios, '"DEBUGGER_PROBES_SNAPSHOT"')
run: ./run.sh DEBUGGER_PROBES_SNAPSHOT
Expand Down
6 changes: 6 additions & 0 deletions docs/understand/weblogs/end-to-end_weblog.md
Original file line number Diff line number Diff line change
Expand Up @@ -929,6 +929,12 @@ Additionally, the method supports the following query parameters to use the sdk

These endpoints are used for the `Dynamic Instrumentation` tests.

#### GET /debugger/snapshot/capture-timeout

Creates a collection containing `collectionSize` object chains. Each chain has a leaf wrapped by
`nestingDepth` nested objects and is exposed through `largeCollection` at the probe line. It is used
to test the snapshot capture time budget without exceeding tracer collection-size guardrails.

### GET /exceptionreplay/*

These endpoints will be used for `Exception Replay` tests.
Expand Down
4 changes: 4 additions & 0 deletions manifests/dotnet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -660,6 +660,10 @@ manifest:
: # TODO: a lower version might be supported
- declaration: bug (DEBUG-2560)
component_version: '<3.45.0'
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Capture_Timeout_Guardrail: v2.53.0
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Evaluation_Timeout_Line_Probe: irrelevant (Line-probe variant is only used by Node.js and Ruby)
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Evaluation_Timeout_Method_Probe: missing_feature (Debugger evaluation timeout guardrail not implemented yet)
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Snapshot_Size_Guardrail: missing_feature (Debugger snapshot size guardrail not implemented yet)
tests/debugger/test_debugger_inproduct_enablement.py::Test_Debugger_InProduct_Enablement_Code_Origin: bug (DEBUG-4637)
tests/debugger/test_debugger_inproduct_enablement.py::Test_Debugger_InProduct_Enablement_Code_Origin_Default_On: missing_feature (Temporarily disabled; enable from v3.42.0 later)
tests/debugger/test_debugger_inproduct_enablement.py::Test_Debugger_InProduct_Enablement_Dynamic_Instrumentation: bug (DEBUG-4637)
Expand Down
4 changes: 4 additions & 0 deletions manifests/golang.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1076,6 +1076,10 @@ manifest:
tests/debugger/test_debugger_exception_replay.py::Test_Debugger_Exception_Replay::test_exception_replay_recursion_inlined: irrelevant (Test for specific bug in dotnet)
tests/debugger/test_debugger_exception_replay.py::Test_Debugger_Exception_Replay::test_exception_replay_stackoverflow: missing_feature (Implemented only for dotnet)
tests/debugger/test_debugger_expression_language.py::Test_Debugger_Expression_Language: missing_feature (feature not implemented)
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Capture_Timeout_Guardrail: incomplete_test_app (No /debugger/snapshot/capture-timeout endpoint)
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Evaluation_Timeout_Line_Probe: irrelevant (Line-probe variant is only used by Node.js and Ruby)
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Evaluation_Timeout_Method_Probe: missing_feature (Debugger evaluation timeout guardrail not implemented yet)
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Snapshot_Size_Guardrail: missing_feature (Debugger snapshot size guardrail not implemented yet)
tests/debugger/test_debugger_inproduct_enablement.py::Test_Debugger_InProduct_Enablement_Code_Origin: missing_feature
tests/debugger/test_debugger_inproduct_enablement.py::Test_Debugger_InProduct_Enablement_Code_Origin_Default_On: irrelevant (Scoped to dotnet rollout in this PR)
tests/debugger/test_debugger_inproduct_enablement.py::Test_Debugger_InProduct_Enablement_Dynamic_Instrumentation: missing_feature
Expand Down
13 changes: 13 additions & 0 deletions manifests/java.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3053,6 +3053,19 @@ manifest:
spring-boot-undertow: v1.38.0
spring-boot-wildfly: v1.38.0
uds-spring-boot: v1.33.0
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Capture_Timeout_Guardrail:
- weblog_declaration:
"*": missing_feature
spring-boot: v1.38.0
spring-boot-jetty: v1.38.0
spring-boot-openliberty: v1.38.0
spring-boot-payara: v1.38.0
spring-boot-undertow: v1.38.0
spring-boot-wildfly: v1.38.0
uds-spring-boot: v1.38.0
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Evaluation_Timeout_Line_Probe: irrelevant (Line-probe variant is only used by Node.js and Ruby)
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Evaluation_Timeout_Method_Probe: missing_feature (Debugger evaluation timeout guardrail not implemented yet)
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Snapshot_Size_Guardrail: missing_feature (Debugger snapshot size guardrail not implemented yet)
tests/debugger/test_debugger_inproduct_enablement.py::Test_Debugger_InProduct_Enablement_Code_Origin:
- weblog_declaration:
"*": missing_feature
Expand Down
11 changes: 11 additions & 0 deletions manifests/nodejs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1614,6 +1614,17 @@ manifest:
tests/debugger/test_debugger_expression_language.py::Test_Debugger_Expression_Language::test_expression_language_instance_of:
- weblog_declaration:
express4-typescript: bug (DEBUG-3715)
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Capture_Timeout_Guardrail:
- weblog_declaration:
"*": incomplete_test_app (No /debugger/snapshot/capture-timeout endpoint)
express4: *ref_5_85_0
express4-typescript: *ref_5_85_0
express5: *ref_5_85_0
fastify: *ref_5_85_0
uds-express4: *ref_5_85_0
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Evaluation_Timeout_Line_Probe: missing_feature (Debugger evaluation timeout guardrail not implemented yet)
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Evaluation_Timeout_Method_Probe: irrelevant (Method-probe variant is not used by Node.js)
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Snapshot_Size_Guardrail: missing_feature (Debugger snapshot size guardrail not implemented yet)
tests/debugger/test_debugger_inproduct_enablement.py::Test_Debugger_InProduct_Enablement_Code_Origin:
- weblog_declaration:
"*": *ref_5_83_0
Expand Down
4 changes: 4 additions & 0 deletions manifests/php.yml
Original file line number Diff line number Diff line change
Expand Up @@ -671,6 +671,10 @@ manifest:
tests/debugger/test_debugger_expression_language.py::Test_Debugger_Expression_Language::test_expression_language_nulls_true: '>=1.16.0'
? tests/debugger/test_debugger_expression_language.py::Test_Debugger_Expression_Language::test_expression_language_string_operations
: '>=1.16.0'
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Capture_Timeout_Guardrail: incomplete_test_app (No /debugger/snapshot/capture-timeout endpoint)
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Evaluation_Timeout_Line_Probe: irrelevant (Line-probe variant is only used by Node.js and Ruby)
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Evaluation_Timeout_Method_Probe: missing_feature (Debugger evaluation timeout guardrail not implemented yet)
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Snapshot_Size_Guardrail: missing_feature (Debugger snapshot size guardrail not implemented yet)
tests/debugger/test_debugger_inproduct_enablement.py::Test_Debugger_InProduct_Enablement_Code_Origin: missing_feature (code origin entry spans not captured in PHP-FPM; RC toggle works but no spans to verify)
tests/debugger/test_debugger_inproduct_enablement.py::Test_Debugger_InProduct_Enablement_Code_Origin_Default_On: irrelevant (Scoped to dotnet rollout in this PR)
tests/debugger/test_debugger_inproduct_enablement.py::Test_Debugger_InProduct_Enablement_Dynamic_Instrumentation:
Expand Down
4 changes: 4 additions & 0 deletions manifests/python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1225,6 +1225,10 @@ manifest:
- weblog_declaration:
"*": missing_feature
*flask: v2.11.0
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Capture_Timeout_Guardrail: missing_feature (Configurable capture timeout is not available)
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Evaluation_Timeout_Line_Probe: irrelevant (Line-probe variant is only used by Node.js and Ruby)
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Evaluation_Timeout_Method_Probe: missing_feature (Debugger evaluation timeout guardrail not implemented yet)
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Snapshot_Size_Guardrail: missing_feature (Debugger snapshot size guardrail not implemented yet)
tests/debugger/test_debugger_inproduct_enablement.py::Test_Debugger_InProduct_Enablement_Code_Origin:
- weblog_declaration:
"*": missing_feature
Expand Down
4 changes: 4 additions & 0 deletions manifests/ruby.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1780,6 +1780,10 @@ manifest:
tests/debugger/test_debugger_expression_language.py::Test_Debugger_Expression_Language::test_expression_language_hash_operations:
- declaration: missing_feature (Hash length not implemented)
component_version: <=2.22.0
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Capture_Timeout_Guardrail: missing_feature (Configurable capture timeout is not available)
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Evaluation_Timeout_Line_Probe: missing_feature (Debugger evaluation timeout guardrail not implemented yet)
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Evaluation_Timeout_Method_Probe: irrelevant (Method-probe variant is not used by Ruby)
tests/debugger/test_debugger_guardrails.py::Test_Debugger_Snapshot_Size_Guardrail: missing_feature (Debugger snapshot size guardrail not implemented yet)
tests/debugger/test_debugger_inproduct_enablement.py::Test_Debugger_InProduct_Enablement_Code_Origin: missing_feature
tests/debugger/test_debugger_inproduct_enablement.py::Test_Debugger_InProduct_Enablement_Code_Origin_Default_On: irrelevant (Scoped to dotnet rollout in this PR)
tests/debugger/test_debugger_inproduct_enablement.py::Test_Debugger_InProduct_Enablement_Dynamic_Instrumentation: missing_feature
Expand Down
33 changes: 1 addition & 32 deletions tests/debugger/test_debugger_condition_errors.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,37 +10,6 @@
from utils import context, features, scenarios


def _capture_point_contains_data(point: object) -> bool:
"""Return True iff a single capture point (entry / return / one line entry) contains data."""
if not isinstance(point, dict):
return False
for key in ("arguments", "locals", "staticFields"):
if point.get(key):
return True
return bool(point.get("throwable"))


def _captures_contain_data(captures: object) -> bool:
"""Return True iff the ``captures`` field of a snapshot contains any captured probe data.

A snapshot whose ``captures`` is missing, ``None``, or only contains empty
``entry`` / ``return`` / ``lines`` sub-structures (i.e. no captured arguments,
locals, static fields, or throwable) returns False -- it is an empty captures
container and acceptable as part of an evaluation-error snapshot.
"""
if not isinstance(captures, dict):
return False
for key, value in captures.items():
# `entry` and `return` map directly to a capture-point dict.
# `lines` maps line-numbers to capture-point dicts, so descend one level.
if key == "lines" and isinstance(value, dict):
if any(_capture_point_contains_data(v) for v in value.values()):
return True
elif _capture_point_contains_data(value):
return True
return False


class _ConditionTestBase(debugger.BaseDebuggerTest):
"""Shared base for the condition-error compliance tests."""

Expand Down Expand Up @@ -214,7 +183,7 @@ def test_runtime_condition_error_emits_error_only_snapshot(self) -> None:
)

captures = snap.get("captures")
assert not _captures_contain_data(captures), (
assert not debugger.captures_contain_data(captures), (
f"The probe emitted a snapshot whose ``captures`` field contains captured "
f"data ({captures!r}); an eval-error snapshot must have empty captures "
f"because the condition was not successfully evaluated."
Expand Down
Loading
Loading