| File: PersistentContainerWarningTests.cs | Web Access |
| Project: src\tests\Aspire.Hosting.Tests\Aspire.Hosting.Tests.csproj (Aspire.Hosting.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #pragma warning disable ASPIREUSERSECRETS001 using Aspire.Hosting.Tests.Utils; using Aspire.Hosting.UserSecrets; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Testing; namespace Aspire.Hosting.Tests; public class PersistentContainerWarningTests(ITestOutputHelper testOutputHelper) { [Fact] public async Task PersistentContainerWithoutUserSecrets_LogsWarning() { var testSink = new TestSink(); var services = new ServiceCollection(); services.AddSingleton<IUserSecretsManager>(NoopUserSecretsManager.Instance); services.AddLogging(logging => logging.AddProvider(new TestLoggerProvider(testSink))); services.AddLogging(logging => logging.AddXunit(testOutputHelper)); var serviceProvider = services.BuildServiceProvider(); var resources = new ResourceCollection(); var container = new ContainerResource("my-container"); container.Annotations.Add(new ContainerLifetimeAnnotation { Lifetime = ContainerLifetime.Persistent }); resources.Add(container); var model = new DistributedApplicationModel(resources); var beforeStartEvent = new BeforeStartEvent(serviceProvider, model); await BuiltInDistributedApplicationEventSubscriptionHandlers.WarnPersistentContainersWithoutUserSecrets(beforeStartEvent, CancellationToken.None); Assert.Contains(testSink.Writes, w => w.LogLevel == LogLevel.Warning && w.Message?.Contains("my-container") == true); } [Fact] public async Task PersistentContainerWithUserSecrets_DoesNotLogWarning() { var testSink = new TestSink(); var services = new ServiceCollection(); services.AddSingleton<IUserSecretsManager>(new MockUserSecretsManager()); services.AddLogging(logging => logging.AddProvider(new TestLoggerProvider(testSink))); services.AddLogging(logging => logging.AddXunit(testOutputHelper)); var serviceProvider = services.BuildServiceProvider(); var resources = new ResourceCollection(); var container = new ContainerResource("my-container"); container.Annotations.Add(new ContainerLifetimeAnnotation { Lifetime = ContainerLifetime.Persistent }); resources.Add(container); var model = new DistributedApplicationModel(resources); var beforeStartEvent = new BeforeStartEvent(serviceProvider, model); await BuiltInDistributedApplicationEventSubscriptionHandlers.WarnPersistentContainersWithoutUserSecrets(beforeStartEvent, CancellationToken.None); Assert.DoesNotContain(testSink.Writes, w => w.LogLevel == LogLevel.Warning); } [Fact] public async Task SessionContainerWithoutUserSecrets_DoesNotLogWarning() { var testSink = new TestSink(); var services = new ServiceCollection(); services.AddSingleton<IUserSecretsManager>(NoopUserSecretsManager.Instance); services.AddLogging(logging => logging.AddProvider(new TestLoggerProvider(testSink))); services.AddLogging(logging => logging.AddXunit(testOutputHelper)); var serviceProvider = services.BuildServiceProvider(); var resources = new ResourceCollection(); resources.Add(new ContainerResource("my-container")); var model = new DistributedApplicationModel(resources); var beforeStartEvent = new BeforeStartEvent(serviceProvider, model); await BuiltInDistributedApplicationEventSubscriptionHandlers.WarnPersistentContainersWithoutUserSecrets(beforeStartEvent, CancellationToken.None); Assert.DoesNotContain(testSink.Writes, w => w.LogLevel == LogLevel.Warning); } }