[Exception Replay] Added test suite for ASP.NET Core#5821
Conversation
ab0ae58 to
b3495da
Compare
Datadog ReportBranch report: ❌ 1 Failed (1 Known Flaky), 80346 Passed, 229 Skipped, 54m 19.22s Total Time ❌ Failed Tests (1)
|
Execution-Time Benchmarks Report ⏱️Execution-time results for samples comparing the following branches/commits: Execution-time benchmarks measure the whole time it takes to execute a program. And are intended to measure the one-off costs. Cases where the execution time results for the PR are worse than latest master results are shown in red. The following thresholds were used for comparing the execution times:
Note that these results are based on a single point-in-time result for each branch. For full results, see the dashboard. Graphs show the p99 interval based on the mean and StdDev of the test run, as well as the mean value of the run (shown as a diamond below the graph). |
Benchmarks Report for tracer 🐌Benchmarks for #5821 compared to master:
The following thresholds were used for comparing the benchmark speeds:
Allocation changes below 0.5% are ignored. Benchmark detailsBenchmarks.Trace.ActivityBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.AgentWriterBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.AspNetCoreBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.DbCommandBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.ElasticsearchBenchmark - Same speed ✔️ Same allocations ✔️Raw results
Benchmarks.Trace.GraphQLBenchmark - Slower
|
| Benchmark | diff/base | Base Median (ns) | Diff Median (ns) | Modality |
|---|---|---|---|---|
| Benchmarks.Trace.GraphQLBenchmark.ExecuteAsync‑net6.0 | 1.122 | 1,177.64 | 1,321.82 |
Raw results
| Branch | Method | Toolchain | Mean | StdError | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated |
|---|---|---|---|---|---|---|---|---|---|
| master | ExecuteAsync |
net6.0 | 1.18μs | 1.12ns | 4.33ns | 0.0129 | 0 | 0 | 952 B |
| master | ExecuteAsync |
netcoreapp3.1 | 1.56μs | 1.35ns | 4.87ns | 0.0124 | 0 | 0 | 952 B |
| master | ExecuteAsync |
net472 | 1.75μs | 1.41ns | 5.47ns | 0.145 | 0 | 0 | 915 B |
| #5821 | ExecuteAsync |
net6.0 | 1.32μs | 2.11ns | 7.88ns | 0.0138 | 0 | 0 | 952 B |
| #5821 | ExecuteAsync |
netcoreapp3.1 | 1.66μs | 2.73ns | 10.6ns | 0.0132 | 0 | 0 | 952 B |
| #5821 | ExecuteAsync |
net472 | 1.77μs | 1.27ns | 4.75ns | 0.145 | 0 | 0 | 915 B |
Benchmarks.Trace.HttpClientBenchmark - Same speed ✔️ Same allocations ✔️
Raw results
| Branch | Method | Toolchain | Mean | StdError | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated |
|---|---|---|---|---|---|---|---|---|---|
| master | SendAsync |
net6.0 | 4.2μs | 18ns | 67.5ns | 0.0304 | 0 | 0 | 2.22 KB |
| master | SendAsync |
netcoreapp3.1 | 5.12μs | 3.12ns | 12.1ns | 0.036 | 0 | 0 | 2.76 KB |
| master | SendAsync |
net472 | 7.94μs | 6.26ns | 24.2ns | 0.5 | 0 | 0 | 3.15 KB |
| #5821 | SendAsync |
net6.0 | 4.29μs | 2.36ns | 8.84ns | 0.0301 | 0 | 0 | 2.22 KB |
| #5821 | SendAsync |
netcoreapp3.1 | 5.1μs | 2.26ns | 8.47ns | 0.0359 | 0 | 0 | 2.76 KB |
| #5821 | SendAsync |
net472 | 7.78μs | 1.5ns | 5.82ns | 0.496 | 0 | 0 | 3.15 KB |
Benchmarks.Trace.ILoggerBenchmark - Same speed ✔️ Same allocations ✔️
Raw results
| Branch | Method | Toolchain | Mean | StdError | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated |
|---|---|---|---|---|---|---|---|---|---|
| master | EnrichedLog |
net6.0 | 1.52μs | 0.61ns | 2.36ns | 0.0236 | 0 | 0 | 1.64 KB |
| master | EnrichedLog |
netcoreapp3.1 | 2.23μs | 1.4ns | 5.06ns | 0.0222 | 0 | 0 | 1.64 KB |
| master | EnrichedLog |
net472 | 2.69μs | 2.15ns | 8.06ns | 0.249 | 0 | 0 | 1.57 KB |
| #5821 | EnrichedLog |
net6.0 | 1.63μs | 1.13ns | 4.22ns | 0.0228 | 0 | 0 | 1.64 KB |
| #5821 | EnrichedLog |
netcoreapp3.1 | 2.29μs | 0.765ns | 2.76ns | 0.0227 | 0 | 0 | 1.64 KB |
| #5821 | EnrichedLog |
net472 | 2.66μs | 1.95ns | 7.54ns | 0.249 | 0 | 0 | 1.57 KB |
Benchmarks.Trace.Log4netBenchmark - Same speed ✔️ Same allocations ✔️
Raw results
| Branch | Method | Toolchain | Mean | StdError | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated |
|---|---|---|---|---|---|---|---|---|---|
| master | EnrichedLog |
net6.0 | 118μs | 163ns | 630ns | 0.059 | 0 | 0 | 4.28 KB |
| master | EnrichedLog |
netcoreapp3.1 | 120μs | 162ns | 629ns | 0.0598 | 0 | 0 | 4.28 KB |
| master | EnrichedLog |
net472 | 150μs | 150ns | 583ns | 0.674 | 0.225 | 0 | 4.46 KB |
| #5821 | EnrichedLog |
net6.0 | 116μs | 295ns | 1.14μs | 0.0576 | 0 | 0 | 4.28 KB |
| #5821 | EnrichedLog |
netcoreapp3.1 | 120μs | 211ns | 818ns | 0 | 0 | 0 | 4.28 KB |
| #5821 | EnrichedLog |
net472 | 148μs | 274ns | 1.02μs | 0.659 | 0.22 | 0 | 4.46 KB |
Benchmarks.Trace.NLogBenchmark - Same speed ✔️ Same allocations ✔️
Raw results
| Branch | Method | Toolchain | Mean | StdError | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated |
|---|---|---|---|---|---|---|---|---|---|
| master | EnrichedLog |
net6.0 | 3.18μs | 0.988ns | 3.7ns | 0.0303 | 0 | 0 | 2.2 KB |
| master | EnrichedLog |
netcoreapp3.1 | 4.24μs | 1.35ns | 5.23ns | 0.0298 | 0 | 0 | 2.2 KB |
| master | EnrichedLog |
net472 | 4.89μs | 1.76ns | 6.59ns | 0.319 | 0 | 0 | 2.02 KB |
| #5821 | EnrichedLog |
net6.0 | 3.09μs | 1.23ns | 4.77ns | 0.0309 | 0 | 0 | 2.2 KB |
| #5821 | EnrichedLog |
netcoreapp3.1 | 4.26μs | 1.58ns | 6.11ns | 0.0298 | 0 | 0 | 2.2 KB |
| #5821 | EnrichedLog |
net472 | 4.84μs | 2.41ns | 9.03ns | 0.318 | 0 | 0 | 2.02 KB |
Benchmarks.Trace.RedisBenchmark - Same speed ✔️ Same allocations ✔️
Raw results
| Branch | Method | Toolchain | Mean | StdError | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated |
|---|---|---|---|---|---|---|---|---|---|
| master | SendReceive |
net6.0 | 1.26μs | 0.93ns | 3.6ns | 0.0158 | 0 | 0 | 1.14 KB |
| master | SendReceive |
netcoreapp3.1 | 1.75μs | 1.23ns | 4.75ns | 0.0149 | 0 | 0 | 1.14 KB |
| master | SendReceive |
net472 | 2.23μs | 0.856ns | 3.32ns | 0.184 | 0.00113 | 0 | 1.16 KB |
| #5821 | SendReceive |
net6.0 | 1.38μs | 0.859ns | 3.33ns | 0.0159 | 0 | 0 | 1.14 KB |
| #5821 | SendReceive |
netcoreapp3.1 | 1.84μs | 0.481ns | 1.8ns | 0.0155 | 0 | 0 | 1.14 KB |
| #5821 | SendReceive |
net472 | 2.14μs | 1.51ns | 5.86ns | 0.183 | 0.00108 | 0 | 1.16 KB |
Benchmarks.Trace.SerilogBenchmark - Same speed ✔️ Same allocations ✔️
Raw results
| Branch | Method | Toolchain | Mean | StdError | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated |
|---|---|---|---|---|---|---|---|---|---|
| master | EnrichedLog |
net6.0 | 2.82μs | 1.12ns | 4.04ns | 0.0225 | 0 | 0 | 1.6 KB |
| master | EnrichedLog |
netcoreapp3.1 | 3.72μs | 1.25ns | 4.66ns | 0.0224 | 0 | 0 | 1.65 KB |
| master | EnrichedLog |
net472 | 4.2μs | 3.55ns | 13.8ns | 0.324 | 0 | 0 | 2.04 KB |
| #5821 | EnrichedLog |
net6.0 | 2.73μs | 0.743ns | 2.78ns | 0.0221 | 0 | 0 | 1.6 KB |
| #5821 | EnrichedLog |
netcoreapp3.1 | 3.97μs | 0.978ns | 3.79ns | 0.0218 | 0 | 0 | 1.65 KB |
| #5821 | EnrichedLog |
net472 | 4.37μs | 5.67ns | 22ns | 0.322 | 0 | 0 | 2.04 KB |
Benchmarks.Trace.SpanBenchmark - Slower ⚠️ Same allocations ✔️
Slower ⚠️ in #5821
Benchmark
diff/base
Base Median (ns)
Diff Median (ns)
Modality
Benchmarks.Trace.SpanBenchmark.StartFinishScope‑net6.0
1.139
469.52
534.86
Faster 🎉 in #5821
Benchmark
base/diff
Base Median (ns)
Diff Median (ns)
Modality
Benchmarks.Trace.SpanBenchmark.StartFinishSpan‑net6.0
1.284
509.46
396.71
Benchmarks.Trace.SpanBenchmark.StartFinishSpan‑net472
1.165
697.28
598.47
Benchmarks.Trace.SpanBenchmark.StartFinishScope‑netcoreapp3.1
1.115
749.58
672.00
| Benchmark | diff/base | Base Median (ns) | Diff Median (ns) | Modality |
|---|---|---|---|---|
| Benchmarks.Trace.SpanBenchmark.StartFinishScope‑net6.0 | 1.139 | 469.52 | 534.86 |
| Benchmark | base/diff | Base Median (ns) | Diff Median (ns) | Modality |
|---|---|---|---|---|
| Benchmarks.Trace.SpanBenchmark.StartFinishSpan‑net6.0 | 1.284 | 509.46 | 396.71 | |
| Benchmarks.Trace.SpanBenchmark.StartFinishSpan‑net472 | 1.165 | 697.28 | 598.47 | |
| Benchmarks.Trace.SpanBenchmark.StartFinishScope‑netcoreapp3.1 | 1.115 | 749.58 | 672.00 |
Raw results
| Branch | Method | Toolchain | Mean | StdError | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated |
|---|---|---|---|---|---|---|---|---|---|
| master | StartFinishSpan |
net6.0 | 509ns | 0.43ns | 1.67ns | 0.00812 | 0 | 0 | 576 B |
| master | StartFinishSpan |
netcoreapp3.1 | 588ns | 0.641ns | 2.4ns | 0.00765 | 0 | 0 | 576 B |
| master | StartFinishSpan |
net472 | 698ns | 0.529ns | 2.05ns | 0.0917 | 0 | 0 | 578 B |
| master | StartFinishScope |
net6.0 | 470ns | 0.343ns | 1.33ns | 0.00971 | 0 | 0 | 696 B |
| master | StartFinishScope |
netcoreapp3.1 | 750ns | 0.404ns | 1.57ns | 0.00927 | 0 | 0 | 696 B |
| master | StartFinishScope |
net472 | 819ns | 1.51ns | 5.84ns | 0.104 | 0 | 0 | 658 B |
| #5821 | StartFinishSpan |
net6.0 | 397ns | 0.218ns | 0.817ns | 0.00816 | 0 | 0 | 576 B |
| #5821 | StartFinishSpan |
netcoreapp3.1 | 588ns | 0.493ns | 1.91ns | 0.00769 | 0 | 0 | 576 B |
| #5821 | StartFinishSpan |
net472 | 597ns | 0.674ns | 2.61ns | 0.0917 | 0 | 0 | 578 B |
| #5821 | StartFinishScope |
net6.0 | 535ns | 0.317ns | 1.19ns | 0.00961 | 0 | 0 | 696 B |
| #5821 | StartFinishScope |
netcoreapp3.1 | 671ns | 0.427ns | 1.65ns | 0.00932 | 0 | 0 | 696 B |
| #5821 | StartFinishScope |
net472 | 907ns | 0.971ns | 3.76ns | 0.104 | 0 | 0 | 658 B |
Benchmarks.Trace.TraceAnnotationsBenchmark - Faster 🎉 Same allocations ✔️
Faster 🎉 in #5821
Benchmark
base/diff
Base Median (ns)
Diff Median (ns)
Modality
Benchmarks.Trace.TraceAnnotationsBenchmark.RunOnMethodBegin‑netcoreapp3.1
1.170
1,007.94
861.42
| Benchmark | base/diff | Base Median (ns) | Diff Median (ns) | Modality |
|---|---|---|---|---|
| Benchmarks.Trace.TraceAnnotationsBenchmark.RunOnMethodBegin‑netcoreapp3.1 | 1.170 | 1,007.94 | 861.42 |
Raw results
| Branch | Method | Toolchain | Mean | StdError | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated |
|---|---|---|---|---|---|---|---|---|---|
| master | RunOnMethodBegin |
net6.0 | 638ns | 0.46ns | 1.78ns | 0.00997 | 0 | 0 | 696 B |
| master | RunOnMethodBegin |
netcoreapp3.1 | 1.01μs | 1.65ns | 6.39ns | 0.00964 | 0 | 0 | 696 B |
| master | RunOnMethodBegin |
net472 | 1.01μs | 1.12ns | 4.34ns | 0.104 | 0 | 0 | 658 B |
| #5821 | RunOnMethodBegin |
net6.0 | 641ns | 0.501ns | 1.81ns | 0.00961 | 0 | 0 | 696 B |
| #5821 | RunOnMethodBegin |
netcoreapp3.1 | 862ns | 0.599ns | 2.24ns | 0.00951 | 0 | 0 | 696 B |
| #5821 | RunOnMethodBegin |
net472 | 1.09μs | 0.9ns | 3.37ns | 0.104 | 0 | 0 | 658 B |
b3495da to
216caf8
Compare
Throughput/Crank Report ⚡Throughput results for AspNetCoreSimpleController comparing the following branches/commits: Cases where throughput results for the PR are worse than latest master (5% drop or greater), results are shown in red. Note that these results are based on a single point-in-time result for each branch. For full results, see one of the many, many dashboards! gantt
title Throughput Linux x64 (Total requests)
dateFormat X
axisFormat %s
section Baseline
This PR (5821) (11.158M) : 0, 11158295
master (11.202M) : 0, 11202233
benchmarks/2.9.0 (11.711M) : 0, 11710619
section Automatic
This PR (5821) (7.435M) : 0, 7434561
master (7.538M) : 0, 7538081
benchmarks/2.9.0 (8.265M) : 0, 8264630
section Trace stats
master (7.758M) : 0, 7757943
section Manual
master (11.213M) : 0, 11212808
section Manual + Automatic
This PR (5821) (6.855M) : 0, 6854724
master (6.917M) : 0, 6917068
section DD_TRACE_ENABLED=0
master (10.379M) : 0, 10379306
gantt
title Throughput Linux arm64 (Total requests)
dateFormat X
axisFormat %s
section Baseline
This PR (5821) (9.398M) : 0, 9397785
master (9.418M) : 0, 9417716
benchmarks/2.9.0 (9.717M) : 0, 9716586
section Automatic
This PR (5821) (6.402M) : 0, 6402472
master (6.559M) : 0, 6558521
section Trace stats
master (6.837M) : 0, 6836938
section Manual
master (9.281M) : 0, 9280678
section Manual + Automatic
This PR (5821) (6.053M) : 0, 6053199
master (6.154M) : 0, 6153874
section DD_TRACE_ENABLED=0
master (8.911M) : 0, 8910789
gantt
title Throughput Windows x64 (Total requests)
dateFormat X
axisFormat %s
section Baseline
This PR (5821) (9.771M) : 0, 9770678
master (9.803M) : 0, 9802727
section Automatic
This PR (5821) (6.510M) : 0, 6509709
master (6.555M) : 0, 6555282
section Trace stats
master (7.160M) : 0, 7160457
section Manual
master (9.684M) : 0, 9684169
section Manual + Automatic
This PR (5821) (5.971M) : 0, 5971358
master (6.171M) : 0, 6171345
section DD_TRACE_ENABLED=0
master (9.305M) : 0, 9305209
|
a3dd2e7 to
293af30
Compare
293af30 to
30250ae
Compare
9f68911 to
ff1a613
Compare
ff1a613 to
061a568
Compare
f28607e to
b38e64d
Compare
| /// In .NET 6+ there's a bug that prevents Rejit-related APIs to work properly when Edit and Continue feature is turned on. | ||
| /// See https://github.com/dotnet/runtime/issues/91963 for addiitonal details. | ||
| /// </summary> | ||
| private static bool IsEnCFeatureEanbled() |
b38e64d to
11f4fd7
Compare
| tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{021efba6-c4ba-4de5-bf3f-c263ee9e20db}*SharedItemsImports = 5 | ||
| tracer\test\test-applications\Samples.Shared\Samples.Shared.projitems*{061ab58b-8235-4dae-8d56-5f081dd78f5e}*SharedItemsImports = 5 |
There was a problem hiding this comment.
I don't think these should all be added here 🤔
There was a problem hiding this comment.
Visual Studio rewrites 🤔, I've added a reference to the new sample (which in turn references the Samples.Shared proj)
0d7f6a3 to
3137b56
Compare
lucaspimentel
left a comment
There was a problem hiding this comment.
I looked only at non-debugger files. I'm a bit concerned about Datadog.Trace.sln, but if VS did that automatically and it doesn't break anyone else, it's probably fine.
3137b56 to
10cbf1a
Compare
2db9eab to
9dc3cd5
Compare
9dc3cd5 to
da4a63b
Compare
da4a63b to
fc591b4
Compare
Added the infrastructure of integration testing for Exception Replay in ASP.NET Core. To add a test, one needs to simply create a class that inherits from `IRun` / `IAsyncRun` and decorated with `ExceptionReplayTestData` attribute, providing to the attribute the amount of snapshots anticipated both in default configuration and full stack trace capture configuration. This PR also introduces the renaming of the configs of Exception Replay from Exception Debugging. In the early days we used to call Exception Replay internally Exception Debugging, thus some of the configs held this name. This PR renamed those leftovers to Exception Replay, including the enablement config of `DD_EXCEPTION_REPLAY_ENABLED`. [Introduced a PR to `dd-go`](DataDog/dd-go#146180) too where these configs were added to the `config_norm_rules.json` file. Laying the groundwork for integration testing of Exception Replay. The testing infra bootstraps the web app, queries via reflection all the tests (classes inheriting from `IRun`/`IAsyncRun` and decorated with `ExceptionReplayTestData` attribute) and list them. Upon executing a test, a request will hit an endpoint of `RunTest` with the name of the test to run (FQN of the class name). The crafted test must throw an exception to be considered valid. For a more complex test scenarios, more endpoints could be introduced. Every test runs in 4 flavors: - With Exception Replay while Dynamic Instrumentation is **enabled**, default stack trace capturing limit. - With Exception Replay while Dynamic Instrumentation is **enabled**, full stack trace capturing limit. - With Exception Replay while Dynamic Instrumentation is **disabled**, default stack trace capturing limit. - With Exception Replay while Dynamic Instrumentation is **disabled**, full stack trace capturing limit. This whole PR 🤓. I've added two tests that utilize the infra: - `ExceptionWithNonSupportedFramesTest` - `RecursiveExceptionTest` Fixes DEBUG-2681, DEBUG-2732, DEBUG-1642.
Added the infrastructure of integration testing for Exception Replay in ASP.NET Core. To add a test, one needs to simply create a class that inherits from `IRun` / `IAsyncRun` and decorated with `ExceptionReplayTestData` attribute, providing to the attribute the amount of snapshots anticipated both in default configuration and full stack trace capture configuration. This PR also introduces the renaming of the configs of Exception Replay from Exception Debugging. In the early days we used to call Exception Replay internally Exception Debugging, thus some of the configs held this name. This PR renamed those leftovers to Exception Replay, including the enablement config of `DD_EXCEPTION_REPLAY_ENABLED`. [Introduced a PR to `dd-go`](https://github.com/DataDog/dd-go/pull/146180) too where these configs were added to the `config_norm_rules.json` file. Laying the groundwork for integration testing of Exception Replay. The testing infra bootstraps the web app, queries via reflection all the tests (classes inheriting from `IRun`/`IAsyncRun` and decorated with `ExceptionReplayTestData` attribute) and list them. Upon executing a test, a request will hit an endpoint of `RunTest` with the name of the test to run (FQN of the class name). The crafted test must throw an exception to be considered valid. For a more complex test scenarios, more endpoints could be introduced. Every test runs in 4 flavors: - With Exception Replay while Dynamic Instrumentation is **enabled**, default stack trace capturing limit. - With Exception Replay while Dynamic Instrumentation is **enabled**, full stack trace capturing limit. - With Exception Replay while Dynamic Instrumentation is **disabled**, default stack trace capturing limit. - With Exception Replay while Dynamic Instrumentation is **disabled**, full stack trace capturing limit. This whole PR 🤓. I've added two tests that utilize the infra: - `ExceptionWithNonSupportedFramesTest` - `RecursiveExceptionTest` Fixes DEBUG-2681, DEBUG-2732, DEBUG-1642.
…5970) Added the infrastructure of integration testing for Exception Replay in ASP.NET Core. To add a test, one needs to simply create a class that inherits from `IRun` / `IAsyncRun` and decorated with `ExceptionReplayTestData` attribute, providing to the attribute the amount of snapshots anticipated both in default configuration and full stack trace capture configuration. This PR also introduces the renaming of the configs of Exception Replay from Exception Debugging. In the early days we used to call Exception Replay internally Exception Debugging, thus some of the configs held this name. This PR renamed those leftovers to Exception Replay, including the enablement config of `DD_EXCEPTION_REPLAY_ENABLED`. [Introduced a PR to `dd-go`](DataDog/dd-go#146180) too where these configs were added to the `config_norm_rules.json` file. Laying the groundwork for integration testing of Exception Replay. The testing infra bootstraps the web app, queries via reflection all the tests (classes inheriting from `IRun`/`IAsyncRun` and decorated with `ExceptionReplayTestData` attribute) and list them. Upon executing a test, a request will hit an endpoint of `RunTest` with the name of the test to run (FQN of the class name). The crafted test must throw an exception to be considered valid. For a more complex test scenarios, more endpoints could be introduced. Every test runs in 4 flavors: - With Exception Replay while Dynamic Instrumentation is **enabled**, default stack trace capturing limit. - With Exception Replay while Dynamic Instrumentation is **enabled**, full stack trace capturing limit. - With Exception Replay while Dynamic Instrumentation is **disabled**, default stack trace capturing limit. - With Exception Replay while Dynamic Instrumentation is **disabled**, full stack trace capturing limit. This whole PR 🤓. I've added two tests that utilize the infra: - `ExceptionWithNonSupportedFramesTest` - `RecursiveExceptionTest` Fixes DEBUG-2681, DEBUG-2732, DEBUG-1642. Backport of #5821 Co-authored-by: Matan Green <[email protected]>
Summary of changes
Added the infrastructure of integration testing for Exception Replay in ASP.NET Core.
To add a test, one needs to simply create a class that inherits from
IRun/IAsyncRunand decorated withExceptionReplayTestDataattribute, providing to the attribute the amount of snapshots anticipated both in default configuration and full stack trace capture configuration.This PR also introduces the renaming of the configs of Exception Replay from Exception Debugging. In the early days we used to call Exception Replay internally Exception Debugging, thus some of the configs held this name. This PR renamed those leftovers to Exception Replay, including the enablement config of
DD_EXCEPTION_REPLAY_ENABLED. Introduced a PR todd-gotoo where these configs were added to theconfig_norm_rules.jsonfile.Reason for change
Laying the groundwork for integration testing of Exception Replay.
Implementation details
The testing infra bootstraps the web app, queries via reflection all the tests (classes inheriting from
IRun/IAsyncRunand decorated withExceptionReplayTestDataattribute) and list them. Upon executing a test, a request will hit an endpoint ofRunTestwith the name of the test to run (FQN of the class name). The crafted test must throw an exception to be considered valid.For a more complex test scenarios, more endpoints could be introduced.
Every test runs in 4 flavors:
Test coverage
This whole PR 🤓. I've added two tests that utilize the infra:
ExceptionWithNonSupportedFramesTestRecursiveExceptionTestOther details
Fixes DEBUG-2681, DEBUG-2732, DEBUG-1642.