From 676e98f8640d9180912d27b50a883c837a6a5b4c Mon Sep 17 00:00:00 2001 From: Lucas Zimerman Fraulob Date: Thu, 8 Jul 2021 16:42:44 -0300 Subject: [PATCH 1/5] Handled errors. --- CHANGELOG.md | 4 ++++ src/Sentry.AspNetCore/SentryMiddleware.cs | 3 +++ .../SentryMiddlewareTests.cs | 17 +++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b814c24ef..ea1b37e51e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Fixes + +- ASP.NET Core: fix handled not being set for Handled exceptions ([]()) + ### Fetures - Add ClearAttachments to Scope ([#1104](https://github.com/getsentry/sentry-dotnet/pull/1104)) diff --git a/src/Sentry.AspNetCore/SentryMiddleware.cs b/src/Sentry.AspNetCore/SentryMiddleware.cs index 270bd346ab..a0db75bd76 100644 --- a/src/Sentry.AspNetCore/SentryMiddleware.cs +++ b/src/Sentry.AspNetCore/SentryMiddleware.cs @@ -127,6 +127,9 @@ public async Task InvokeAsync(HttpContext context) void CaptureException(Exception e) { + e.Data[Mechanism.HandledKey] = true; + e.Data[Mechanism.MechanismKey] = "SentryMiddleware"; + var evt = new SentryEvent(e); _logger.LogTrace("Sending event '{SentryEvent}' to Sentry.", evt); diff --git a/test/Sentry.AspNetCore.Tests/SentryMiddlewareTests.cs b/test/Sentry.AspNetCore.Tests/SentryMiddlewareTests.cs index f593142451..78e7375978 100644 --- a/test/Sentry.AspNetCore.Tests/SentryMiddlewareTests.cs +++ b/test/Sentry.AspNetCore.Tests/SentryMiddlewareTests.cs @@ -88,6 +88,23 @@ public async Task InvokeAsync_ExceptionThrown_SameRethrown() Assert.Same(expected, actual); } + [Fact] + public async Task InvokeAsync_ExceptionThrown_HandledSet() + { + var expected = new Exception("test"); + _fixture.RequestDelegate = _ => throw expected; + + _fixture.Hub.When(h => h.CaptureEvent(Arg.Any())) + .Do(c => Assert.True((bool)c.Arg().Exception.Data[Mechanism.HandledKey])); + + var sut = _fixture.GetSut(); + + var actual = await Assert.ThrowsAsync( + async () => await sut.InvokeAsync(_fixture.HttpContext)); + + Assert.Same(expected, actual); + } + [Fact] public async Task InvokeAsync_FeatureFoundWithNoError_DoesNotCapturesEvent() { From c5b60c989cc9a25223dded23842a9948cdf53886 Mon Sep 17 00:00:00 2001 From: Lucas Zimerman Fraulob Date: Thu, 8 Jul 2021 16:45:52 -0300 Subject: [PATCH 2/5] true => false --- src/Sentry.AspNetCore/SentryMiddleware.cs | 2 +- test/Sentry.AspNetCore.Tests/SentryMiddlewareTests.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Sentry.AspNetCore/SentryMiddleware.cs b/src/Sentry.AspNetCore/SentryMiddleware.cs index a0db75bd76..091efd2469 100644 --- a/src/Sentry.AspNetCore/SentryMiddleware.cs +++ b/src/Sentry.AspNetCore/SentryMiddleware.cs @@ -127,7 +127,7 @@ public async Task InvokeAsync(HttpContext context) void CaptureException(Exception e) { - e.Data[Mechanism.HandledKey] = true; + e.Data[Mechanism.HandledKey] = false; e.Data[Mechanism.MechanismKey] = "SentryMiddleware"; var evt = new SentryEvent(e); diff --git a/test/Sentry.AspNetCore.Tests/SentryMiddlewareTests.cs b/test/Sentry.AspNetCore.Tests/SentryMiddlewareTests.cs index 78e7375978..89a12b1b27 100644 --- a/test/Sentry.AspNetCore.Tests/SentryMiddlewareTests.cs +++ b/test/Sentry.AspNetCore.Tests/SentryMiddlewareTests.cs @@ -89,13 +89,13 @@ public async Task InvokeAsync_ExceptionThrown_SameRethrown() } [Fact] - public async Task InvokeAsync_ExceptionThrown_HandledSet() + public async Task InvokeAsync_ExceptionThrown_HandledSetFalse() { var expected = new Exception("test"); _fixture.RequestDelegate = _ => throw expected; _fixture.Hub.When(h => h.CaptureEvent(Arg.Any())) - .Do(c => Assert.True((bool)c.Arg().Exception.Data[Mechanism.HandledKey])); + .Do(c => Assert.False((bool)c.Arg().Exception.Data[Mechanism.HandledKey])); var sut = _fixture.GetSut(); From a0d7f11e598fc6d3d7a40fcd099f59321fa41c6e Mon Sep 17 00:00:00 2001 From: LucasZF Date: Thu, 8 Jul 2021 16:48:22 -0300 Subject: [PATCH 3/5] Update CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ea1b37e51e..95184f6253 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,8 @@ ### Fixes -- ASP.NET Core: fix handled not being set for Handled exceptions ([]()) +- ASP.NET Core: fix handled not being set for Handled exceptions ([#1111](https://github.com/getsentry/sentry-dotnet/pull/1111)) + ### Fetures From 7914a0234cabfa6a501be1387fd772588e23c345 Mon Sep 17 00:00:00 2001 From: LucasZF Date: Thu, 8 Jul 2021 18:15:18 -0300 Subject: [PATCH 4/5] Update CHANGELOG.md Co-authored-by: Alexey Golub --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95184f6253..28c84c7c0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,6 @@ - ASP.NET Core: fix handled not being set for Handled exceptions ([#1111](https://github.com/getsentry/sentry-dotnet/pull/1111)) - ### Fetures - Add ClearAttachments to Scope ([#1104](https://github.com/getsentry/sentry-dotnet/pull/1104)) From 723c9bbf20d0dac68390423e03aaa1fbbfdbdbfd Mon Sep 17 00:00:00 2001 From: Lucas Zimerman Fraulob Date: Mon, 12 Jul 2021 11:21:28 -0300 Subject: [PATCH 5/5] Differentiate Exception mechanism between Unhandled exception and IExceptionHandlerFeature --- src/Sentry.AspNetCore/SentryMiddleware.cs | 8 ++++---- .../SentryMiddlewareTests.cs | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/Sentry.AspNetCore/SentryMiddleware.cs b/src/Sentry.AspNetCore/SentryMiddleware.cs index 091efd2469..c2fd8aad87 100644 --- a/src/Sentry.AspNetCore/SentryMiddleware.cs +++ b/src/Sentry.AspNetCore/SentryMiddleware.cs @@ -115,20 +115,20 @@ public async Task InvokeAsync(HttpContext context) var exceptionFeature = context.Features.Get(); if (exceptionFeature?.Error != null) { - CaptureException(exceptionFeature.Error); + CaptureException(exceptionFeature.Error, "IExceptionHandlerFeature"); } } catch (Exception e) { - CaptureException(e); + CaptureException(e, "SentryMiddleware.UnhandledException"); ExceptionDispatchInfo.Capture(e).Throw(); } - void CaptureException(Exception e) + void CaptureException(Exception e, string mechanism) { e.Data[Mechanism.HandledKey] = false; - e.Data[Mechanism.MechanismKey] = "SentryMiddleware"; + e.Data[Mechanism.MechanismKey] = mechanism; var evt = new SentryEvent(e); diff --git a/test/Sentry.AspNetCore.Tests/SentryMiddlewareTests.cs b/test/Sentry.AspNetCore.Tests/SentryMiddlewareTests.cs index 89a12b1b27..621842a3e7 100644 --- a/test/Sentry.AspNetCore.Tests/SentryMiddlewareTests.cs +++ b/test/Sentry.AspNetCore.Tests/SentryMiddlewareTests.cs @@ -119,6 +119,21 @@ public async Task InvokeAsync_FeatureFoundWithNoError_DoesNotCapturesEvent() _ = _fixture.Hub.DidNotReceive().CaptureEvent(Arg.Any()); } + [Fact] + public async Task InvokeAsync_FeatureFoundWithError_CapturesEvent() + { + var exception = new Exception(); + var feature = Substitute.For(); + _ = feature.Error.Returns(exception); + _ = _fixture.HttpContext.Features.Get().Returns(feature); + var sut = _fixture.GetSut(); + + await sut.InvokeAsync(_fixture.HttpContext); + + _ = _fixture.Hub.Received().CaptureEvent(Arg.Any()); + Assert.Equal("IExceptionHandlerFeature", exception.Data[Mechanism.MechanismKey]); + } + [Fact] public async Task InvokeAsync_ScopePushed_BeforeConfiguringScope() {