| File: Dcp\DcpDependencyCheckTests.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. using Aspire.Hosting.Dcp; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Testing; namespace Aspire.Hosting.Tests.Dcp; [Trait("Partition", "4")] public sealed class DcpDependencyCheckTests { [Fact] public void CheckDcpInfoAndLogErrors_UnhealthyRuntimeSurfacesErrorAtWarningAndInException() { const string error = "docker CLI version 23.0.6 is not supported; DCP requires Docker CLI version 25.0.0 or newer"; var logger = new FakeLogger(); var options = new DcpOptions { ContainerRuntime = "docker" }; var dcpInfo = new DcpInfo { Containers = new DcpContainersInfo { Installed = true, Running = false, Error = error } }; var (message, linkUrl) = DcpDependencyCheck.BuildContainerRuntimeUnhealthyMessage("docker"); var exception = Assert.Throws<DistributedApplicationException>( () => DcpDependencyCheck.CheckDcpInfoAndLogErrors(logger, options, dcpInfo, throwIfUnhealthy: true)); Assert.Equal( $"{message}{Environment.NewLine}The error from the container runtime check was: {error}", exception.Message); var warning = Assert.Single(logger.Collector.GetSnapshot()); Assert.Equal(LogLevel.Warning, warning.Level); Assert.Equal( $"{message} For more information, visit: {linkUrl}{Environment.NewLine}The error from the container runtime check was: {error}", warning.Message); } [Fact] public void CheckDcpInfoAndLogErrors_MissingRuntimeSurfacesErrorAtWarningAndInException() { const string error = "exec: \"docker\": executable file not found in PATH"; const string message = "Container runtime 'docker' could not be found. See https://aka.ms/aspire/containers for more details on supported container runtimes."; var logger = new FakeLogger(); var options = new DcpOptions { ContainerRuntime = "docker" }; var dcpInfo = new DcpInfo { Containers = new DcpContainersInfo { Installed = false, Running = false, Error = error } }; var exception = Assert.Throws<DistributedApplicationException>( () => DcpDependencyCheck.CheckDcpInfoAndLogErrors(logger, options, dcpInfo, throwIfUnhealthy: true)); Assert.Equal( $"{message}{Environment.NewLine}The error from the container runtime check was: {error}", exception.Message); var warning = Assert.Single(logger.Collector.GetSnapshot()); Assert.Equal(LogLevel.Warning, warning.Level); Assert.Equal( $"{message}{Environment.NewLine}The error from the container runtime check was: {error}", warning.Message); } [Theory] [InlineData(null)] [InlineData("")] [InlineData(" ")] public void CheckDcpInfoAndLogErrors_WithoutErrorPreservesGenericDiagnostic(string? error) { var logger = new FakeLogger(); var options = new DcpOptions { ContainerRuntime = "docker" }; var dcpInfo = new DcpInfo { Containers = new DcpContainersInfo { Installed = true, Running = false, Error = error } }; var (message, linkUrl) = DcpDependencyCheck.BuildContainerRuntimeUnhealthyMessage("docker"); var exception = Assert.Throws<DistributedApplicationException>( () => DcpDependencyCheck.CheckDcpInfoAndLogErrors(logger, options, dcpInfo, throwIfUnhealthy: true)); Assert.Equal(message, exception.Message); var warning = Assert.Single(logger.Collector.GetSnapshot()); Assert.Equal(LogLevel.Warning, warning.Level); Assert.Equal($"{message} For more information, visit: {linkUrl}", warning.Message); } }