diff --git a/src/HealthChecks/HealthChecks/src/DefaultHealthCheckService.cs b/src/HealthChecks/HealthChecks/src/DefaultHealthCheckService.cs index d1d6374cba..f2dcc4f5b7 100644 --- a/src/HealthChecks/HealthChecks/src/DefaultHealthCheckService.cs +++ b/src/HealthChecks/HealthChecks/src/DefaultHealthCheckService.cs @@ -125,7 +125,8 @@ namespace Microsoft.Extensions.Diagnostics.HealthChecks description: "A timeout occurred while running check.", duration: duration, exception: ex, - data: null); + data: null, + tags: registration.Tags); Log.HealthCheckError(_logger, registration, ex, duration); } @@ -139,7 +140,8 @@ namespace Microsoft.Extensions.Diagnostics.HealthChecks description: ex.Message, duration: duration, exception: ex, - data: null); + data: null, + tags: registration.Tags); Log.HealthCheckError(_logger, registration, ex, duration); } diff --git a/src/HealthChecks/HealthChecks/test/DefaultHealthCheckServiceTest.cs b/src/HealthChecks/HealthChecks/test/DefaultHealthCheckServiceTest.cs index 50cf7ebeae..1cb5b7420b 100644 --- a/src/HealthChecks/HealthChecks/test/DefaultHealthCheckServiceTest.cs +++ b/src/HealthChecks/HealthChecks/test/DefaultHealthCheckServiceTest.cs @@ -113,6 +113,47 @@ namespace Microsoft.Extensions.Diagnostics.HealthChecks }); } + [Fact] + public async Task CheckAsync_TagsArePresentInHealthReportEntryIfExceptionOccurs() + { + const string ExceptionMessage = "exception-message"; + const string OperationCancelledMessage = "operation-cancelled-message"; + var exceptionTags = new[] { "unhealthy-check-tag" }; + var operationExceptionTags = new[] { "degraded-check-tag" }; + + // Arrange + var service = CreateHealthChecksService(b => + { + b.AddAsyncCheck("ExceptionCheck", _ => throw new Exception(ExceptionMessage), exceptionTags); + b.AddAsyncCheck("OperationExceptionCheck", _ => throw new OperationCanceledException(OperationCancelledMessage), operationExceptionTags); + }); + + // Act + var results = await service.CheckHealthAsync(); + + // Assert + Assert.Collection( + results.Entries.OrderBy(kvp => kvp.Key), + actual => + { + Assert.Equal("ExceptionCheck", actual.Key); + Assert.Equal(ExceptionMessage, actual.Value.Description); + Assert.Equal(HealthStatus.Unhealthy, actual.Value.Status); + Assert.Equal(ExceptionMessage, actual.Value.Exception.Message); + Assert.Empty(actual.Value.Data); + Assert.Equal(actual.Value.Tags, exceptionTags); + }, + actual => + { + Assert.Equal("OperationExceptionCheck", actual.Key); + Assert.Equal("A timeout occurred while running check.", actual.Value.Description); + Assert.Equal(HealthStatus.Unhealthy, actual.Value.Status); + Assert.Equal(OperationCancelledMessage, actual.Value.Exception.Message); + Assert.Empty(actual.Value.Data); + Assert.Equal(actual.Value.Tags, operationExceptionTags); + }); + } + [Fact] public async Task CheckAsync_RunsFilteredChecksAndAggregatesResultsAsync() {