Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add parametric tests for crashtracking #2884

Merged
merged 9 commits into from
Aug 19, 2024
Merged

Add parametric tests for crashtracking #2884

merged 9 commits into from
Aug 19, 2024

Conversation

kevingosse
Copy link
Contributor

@kevingosse kevingosse commented Aug 14, 2024

Motivation

Validates the behavior of crashtracking across tracers.

Changes

  • Added a new test scenario (crashtracking)
  • Added a method on test_agent to trigger a crash. It does so by calling the /trace/crash HTTP endpoint (needs to be implemented for each language)
  • Used .NET to validate the test

Workflow

  1. ⚠️ Create your PR as draft ⚠️
  2. Work on you PR until the CI passes (if something not related to your task is failing, you can ignore it)
  3. Mark it as ready for review
    • Test logic is modified? -> Get a review from RFC owner. We're working on refining the codeowners file quickly.
    • Framework is modified, or non obvious usage of it -> get a review from R&P team

🚀 Once your PR is reviewed, you can merge it!

🛟 #apm-shared-testing 🛟

Reviewer checklist

  • If PR title starts with [<language>], double-check that only <language> is impacted by the change
  • No system-tests internal is modified. Otherwise, I have the approval from R&P team
  • CI is green, or failing jobs are not related to this change (and you are 100% sure about this statement)
  • A docker base image is modified?
    • the relevant build-XXX-image label is present
  • A scenario is added (or removed)?

Copy link
Member

@Kyle-Verhoog Kyle-Verhoog left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@@ -469,6 +469,7 @@ def dotnet_library_factory():
ENV CORECLR_ENABLE_PROFILING=0
ENV CORECLR_PROFILER={{846F5F1C-F9AE-4B07-969E-05C26BC060D8}}
ENV CORECLR_PROFILER_PATH=/opt/datadog/Datadog.Trace.ClrProfiler.Native.so
ENV LD_PRELOAD=/opt/datadog/continuousprofiler/Datadog.Linux.ApiWrapper.x64.so
Copy link
Member

@lucaspimentel lucaspimentel Aug 16, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it ok to add this to all .NET parametric tests, or should we add it to the new tests only?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's better to add it to all tests. My reasoning is that it shouldn't impact the other tests, so that's a good way to make sure it doesn't.

{
var thread = new Thread(() =>
{
throw new BadImageFormatException("Expected");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just curious, why throw the exception from another thread?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If I throw it from the current thread, aspnetcore will catch it and it won't crash the app

event = test_agent.wait_for_telemetry_event("logs", wait_loops=400)
assert self.is_crash_report(event)

@missing_feature(context.library == "dotnet", reason="Not implemented")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not implemented?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Currently .NET uses the wrong environment variable, there is a pending PR to fix that

@kevingosse kevingosse merged commit 0dc100a into main Aug 19, 2024
322 of 328 checks passed
@kevingosse kevingosse deleted the kevin/crashtracking branch August 19, 2024 08:51
erikayasuda added a commit to DataDog/dd-trace-py that referenced this pull request Aug 26, 2024
…ed via env var (#10233)

### Change Overview
This PR enables the `wait_for_receiver` field to be set via
`DD_CRASHTRACKING_WAIT_FOR_RECEIVER` environment variable. If unset, the
default is `true`.

### Motivation
[System-tests for
crashtracking](DataDog/system-tests#2884)
exposed that the Python crashtracker needs the `wait_for_receiver` field
to be set to `true` to capture crashes and reliably send telemetry
events to the agent. While set to `false`, telemetry events for crashes
would work very rarely. When set to `true`, this would become reliably
consistent.

The value for `wait_for_receiver` is [unset in
`libdatadog`](https://github.com/DataDog/libdatadog/blob/16528ffee456f7af5fe9ad80a6294fb5dcd38918/crashtracker/src/shared/configuration.rs#L28),
which means it is set to `false` by default. This default needs to be
updated on the `libdatadog` end. However, in order to unblock
crashtracking functionality for `dd-trace-py`, we are also enabling this
to be configured on the `dd-trace-py` side as well.

## Checklist
- [x] PR author has checked that all the criteria below are met
- The PR description includes an overview of the change
- The PR description articulates the motivation for the change
- The change includes tests OR the PR description describes a testing
strategy
- The PR description notes risks associated with the change, if any
- Newly-added code is easy to change
- The change follows the [library release note
guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html)
- The change includes or references documentation updates if necessary
- Backport labels are set (if
[applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting))

## Reviewer Checklist
- [x] Reviewer has checked that all the criteria below are met 
- Title is accurate
- All changes are related to the pull request's stated goal
- Avoids breaking
[API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces)
changes
- Testing strategy adequately addresses listed risks
- Newly-added code is easy to change
- Release note makes sense to a user of the library
- If necessary, author has acknowledged and discussed the performance
implications of this PR as reported in the benchmarks PR comment
- Backport labels are set in a manner that is consistent with the
[release branch maintenance
policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)
github-actions bot pushed a commit to DataDog/dd-trace-py that referenced this pull request Aug 26, 2024
…ed via env var (#10233)

### Change Overview
This PR enables the `wait_for_receiver` field to be set via
`DD_CRASHTRACKING_WAIT_FOR_RECEIVER` environment variable. If unset, the
default is `true`.

### Motivation
[System-tests for
crashtracking](DataDog/system-tests#2884)
exposed that the Python crashtracker needs the `wait_for_receiver` field
to be set to `true` to capture crashes and reliably send telemetry
events to the agent. While set to `false`, telemetry events for crashes
would work very rarely. When set to `true`, this would become reliably
consistent.

The value for `wait_for_receiver` is [unset in
`libdatadog`](https://github.com/DataDog/libdatadog/blob/16528ffee456f7af5fe9ad80a6294fb5dcd38918/crashtracker/src/shared/configuration.rs#L28),
which means it is set to `false` by default. This default needs to be
updated on the `libdatadog` end. However, in order to unblock
crashtracking functionality for `dd-trace-py`, we are also enabling this
to be configured on the `dd-trace-py` side as well.

## Checklist
- [x] PR author has checked that all the criteria below are met
- The PR description includes an overview of the change
- The PR description articulates the motivation for the change
- The change includes tests OR the PR description describes a testing
strategy
- The PR description notes risks associated with the change, if any
- Newly-added code is easy to change
- The change follows the [library release note
guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html)
- The change includes or references documentation updates if necessary
- Backport labels are set (if
[applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting))

## Reviewer Checklist
- [x] Reviewer has checked that all the criteria below are met
- Title is accurate
- All changes are related to the pull request's stated goal
- Avoids breaking
[API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces)
changes
- Testing strategy adequately addresses listed risks
- Newly-added code is easy to change
- Release note makes sense to a user of the library
- If necessary, author has acknowledged and discussed the performance
implications of this PR as reported in the benchmarks PR comment
- Backport labels are set in a manner that is consistent with the
[release branch maintenance
policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)

(cherry picked from commit bb82a8e)
github-actions bot pushed a commit to DataDog/dd-trace-py that referenced this pull request Aug 26, 2024
…ed via env var (#10233)

### Change Overview
This PR enables the `wait_for_receiver` field to be set via
`DD_CRASHTRACKING_WAIT_FOR_RECEIVER` environment variable. If unset, the
default is `true`.

### Motivation
[System-tests for
crashtracking](DataDog/system-tests#2884)
exposed that the Python crashtracker needs the `wait_for_receiver` field
to be set to `true` to capture crashes and reliably send telemetry
events to the agent. While set to `false`, telemetry events for crashes
would work very rarely. When set to `true`, this would become reliably
consistent.

The value for `wait_for_receiver` is [unset in
`libdatadog`](https://github.com/DataDog/libdatadog/blob/16528ffee456f7af5fe9ad80a6294fb5dcd38918/crashtracker/src/shared/configuration.rs#L28),
which means it is set to `false` by default. This default needs to be
updated on the `libdatadog` end. However, in order to unblock
crashtracking functionality for `dd-trace-py`, we are also enabling this
to be configured on the `dd-trace-py` side as well.

## Checklist
- [x] PR author has checked that all the criteria below are met
- The PR description includes an overview of the change
- The PR description articulates the motivation for the change
- The change includes tests OR the PR description describes a testing
strategy
- The PR description notes risks associated with the change, if any
- Newly-added code is easy to change
- The change follows the [library release note
guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html)
- The change includes or references documentation updates if necessary
- Backport labels are set (if
[applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting))

## Reviewer Checklist
- [x] Reviewer has checked that all the criteria below are met
- Title is accurate
- All changes are related to the pull request's stated goal
- Avoids breaking
[API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces)
changes
- Testing strategy adequately addresses listed risks
- Newly-added code is easy to change
- Release note makes sense to a user of the library
- If necessary, author has acknowledged and discussed the performance
implications of this PR as reported in the benchmarks PR comment
- Backport labels are set in a manner that is consistent with the
[release branch maintenance
policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)

(cherry picked from commit bb82a8e)
erikayasuda added a commit to DataDog/dd-trace-py that referenced this pull request Aug 26, 2024
…ed via env var [backport 2.11] (#10380)

Backport bb82a8e from #10233 to 2.11.

### Change Overview
This PR enables the `wait_for_receiver` field to be set via
`DD_CRASHTRACKING_WAIT_FOR_RECEIVER` environment variable. If unset, the
default is `true`.

### Motivation
[System-tests for
crashtracking](DataDog/system-tests#2884)
exposed that the Python crashtracker needs the `wait_for_receiver` field
to be set to `true` to capture crashes and reliably send telemetry
events to the agent. While set to `false`, telemetry events for crashes
would work very rarely. When set to `true`, this would become reliably
consistent.

The value for `wait_for_receiver` is [unset in
`libdatadog`](https://github.com/DataDog/libdatadog/blob/16528ffee456f7af5fe9ad80a6294fb5dcd38918/crashtracker/src/shared/configuration.rs#L28),
which means it is set to `false` by default. This default needs to be
updated on the `libdatadog` end. However, in order to unblock
crashtracking functionality for `dd-trace-py`, we are also enabling this
to be configured on the `dd-trace-py` side as well.

## Checklist
- [x] PR author has checked that all the criteria below are met
- The PR description includes an overview of the change
- The PR description articulates the motivation for the change
- The change includes tests OR the PR description describes a testing
strategy
- The PR description notes risks associated with the change, if any
- Newly-added code is easy to change
- The change follows the [library release note
guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html)
- The change includes or references documentation updates if necessary
- Backport labels are set (if
[applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting))

## Reviewer Checklist
- [x] Reviewer has checked that all the criteria below are met 
- Title is accurate
- All changes are related to the pull request's stated goal
- Avoids breaking
[API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces)
changes
- Testing strategy adequately addresses listed risks
- Newly-added code is easy to change
- Release note makes sense to a user of the library
- If necessary, author has acknowledged and discussed the performance
implications of this PR as reported in the benchmarks PR comment
- Backport labels are set in a manner that is consistent with the
[release branch maintenance
policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)

Co-authored-by: erikayasuda <153395705+erikayasuda@users.noreply.github.com>
taegyunkim pushed a commit to DataDog/dd-trace-py that referenced this pull request Aug 28, 2024
…ed via env var [backport 2.12] (#10381)

Backport bb82a8e from #10233 to 2.12.

### Change Overview
This PR enables the `wait_for_receiver` field to be set via
`DD_CRASHTRACKING_WAIT_FOR_RECEIVER` environment variable. If unset, the
default is `true`.

### Motivation
[System-tests for
crashtracking](DataDog/system-tests#2884)
exposed that the Python crashtracker needs the `wait_for_receiver` field
to be set to `true` to capture crashes and reliably send telemetry
events to the agent. While set to `false`, telemetry events for crashes
would work very rarely. When set to `true`, this would become reliably
consistent.

The value for `wait_for_receiver` is [unset in
`libdatadog`](https://github.com/DataDog/libdatadog/blob/16528ffee456f7af5fe9ad80a6294fb5dcd38918/crashtracker/src/shared/configuration.rs#L28),
which means it is set to `false` by default. This default needs to be
updated on the `libdatadog` end. However, in order to unblock
crashtracking functionality for `dd-trace-py`, we are also enabling this
to be configured on the `dd-trace-py` side as well.

## Checklist
- [x] PR author has checked that all the criteria below are met
- The PR description includes an overview of the change
- The PR description articulates the motivation for the change
- The change includes tests OR the PR description describes a testing
strategy
- The PR description notes risks associated with the change, if any
- Newly-added code is easy to change
- The change follows the [library release note
guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html)
- The change includes or references documentation updates if necessary
- Backport labels are set (if
[applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting))

## Reviewer Checklist
- [x] Reviewer has checked that all the criteria below are met 
- Title is accurate
- All changes are related to the pull request's stated goal
- Avoids breaking
[API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces)
changes
- Testing strategy adequately addresses listed risks
- Newly-added code is easy to change
- Release note makes sense to a user of the library
- If necessary, author has acknowledged and discussed the performance
implications of this PR as reported in the benchmarks PR comment
- Backport labels are set in a manner that is consistent with the
[release branch maintenance
policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)

Co-authored-by: erikayasuda <153395705+erikayasuda@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants