diff --git a/src/Aspire.Hosting.Testing/ResourceLoggerForwarderService.cs b/src/Aspire.Hosting.Testing/ResourceLoggerForwarderService.cs index 5a47b55fbe..65eb24b3ff 100644 --- a/src/Aspire.Hosting.Testing/ResourceLoggerForwarderService.cs +++ b/src/Aspire.Hosting.Testing/ResourceLoggerForwarderService.cs @@ -34,40 +34,54 @@ protected override Task ExecuteAsync(CancellationToken stoppingToken) private async Task WatchNotifications(CancellationToken cancellationToken) { - var loggingResourceIds = new HashSet(); - var logWatchTasks = new List(); - - await foreach (var resourceEvent in resourceNotificationService.WatchAsync(cancellationToken).ConfigureAwait(false)) + try { - var resourceId = resourceEvent.ResourceId; + var loggingResourceIds = new HashSet(); + var logWatchTasks = new List(); - if (loggingResourceIds.Add(resourceId)) + await foreach (var resourceEvent in resourceNotificationService.WatchAsync(cancellationToken).ConfigureAwait(false)) { - // Start watching the logs for this resource ID - logWatchTasks.Add(WatchResourceLogs(resourceEvent.Resource, resourceId, cancellationToken)); + var resourceId = resourceEvent.ResourceId; + + if (loggingResourceIds.Add(resourceId)) + { + // Start watching the logs for this resource ID + logWatchTasks.Add(WatchResourceLogs(resourceEvent.Resource, resourceId, cancellationToken)); + } } - } - await Task.WhenAll(logWatchTasks).ConfigureAwait(false); + await Task.WhenAll(logWatchTasks).ConfigureAwait(false); + } + catch (TaskCanceledException) when (cancellationToken.IsCancellationRequested) + { + // this was expected as the token was canceled + } } private async Task WatchResourceLogs(IResource resource, string resourceId, CancellationToken cancellationToken) { - var applicationName = hostEnvironment.ApplicationName; - var logger = loggerFactory.CreateLogger($"{applicationName}.Resources.{resource.Name}"); - await foreach (var logEvent in resourceLoggerService.WatchAsync(resourceId).WithCancellation(cancellationToken).ConfigureAwait(false)) + try { - foreach (var line in logEvent) + var applicationName = hostEnvironment.ApplicationName; + var logger = loggerFactory.CreateLogger($"{applicationName}.Resources.{resource.Name}"); + await foreach (var logEvent in resourceLoggerService.WatchAsync(resourceId).WithCancellation(cancellationToken).ConfigureAwait(false)) { - var logLevel = line.IsErrorMessage ? LogLevel.Error : LogLevel.Information; - - if (logger.IsEnabled(logLevel)) + foreach (var line in logEvent) { - // Log message format here approximates the format shown in the dashboard - logger.Log(logLevel, "{LineNumber}: {LineContent}", line.LineNumber, line.Content); - OnResourceLog?.Invoke(resourceId); + var logLevel = line.IsErrorMessage ? LogLevel.Error : LogLevel.Information; + + if (logger.IsEnabled(logLevel)) + { + // Log message format here approximates the format shown in the dashboard + logger.Log(logLevel, "{LineNumber}: {LineContent}", line.LineNumber, line.Content); + OnResourceLog?.Invoke(resourceId); + } } } } + catch (TaskCanceledException) when (cancellationToken.IsCancellationRequested) + { + // this was expected as the token was canceled + } } } diff --git a/tests/Aspire.EndToEnd.Tests/Aspire.EndToEnd.Tests.csproj b/tests/Aspire.EndToEnd.Tests/Aspire.EndToEnd.Tests.csproj index 01aa87ce9a..f8a914bf16 100644 --- a/tests/Aspire.EndToEnd.Tests/Aspire.EndToEnd.Tests.csproj +++ b/tests/Aspire.EndToEnd.Tests/Aspire.EndToEnd.Tests.csproj @@ -33,6 +33,8 @@ + + diff --git a/tests/testproject/TestProject.AppHost/TestProgram.cs b/tests/testproject/TestProject.AppHost/TestProgram.cs index e12c5071c7..d9fe03fbc8 100644 --- a/tests/testproject/TestProject.AppHost/TestProgram.cs +++ b/tests/testproject/TestProject.AppHost/TestProgram.cs @@ -5,6 +5,7 @@ using System.Text.Json; using System.Text.Json.Nodes; using Aspire.Hosting.Lifecycle; +using Aspire.Hosting.Testing; using Aspire.TestProject; using Microsoft.Extensions.DependencyInjection; @@ -101,6 +102,7 @@ private TestProgram( } } + AppBuilder.Services.AddHostedService(); AppBuilder.Services.AddLifecycleHook(); AppBuilder.Services.AddHttpClient(); } diff --git a/tests/testproject/TestProject.AppHost/TestProject.AppHost.csproj b/tests/testproject/TestProject.AppHost/TestProject.AppHost.csproj index b55b013379..f1d7563b41 100644 --- a/tests/testproject/TestProject.AppHost/TestProject.AppHost.csproj +++ b/tests/testproject/TestProject.AppHost/TestProject.AppHost.csproj @@ -23,6 +23,10 @@ + + +