Skip unit tests when Docker is not running in Linux container mode using DockerIsRunningInLinuxContainerModeFact

This commit is contained in:
Stef Heyenrath
2024-09-09 18:43:18 +02:00
parent af124d556d
commit 11d090037e
5 changed files with 30 additions and 28 deletions
@@ -8,10 +8,7 @@ namespace WireMock.Net.Aspire.Tests;
[ExcludeFromCodeCoverage] [ExcludeFromCodeCoverage]
internal static class DockerUtils internal static class DockerUtils
{ {
public static bool IsDockerRunningLinuxContainerMode() public static Lazy<bool> IsDockerRunningLinuxContainerMode => new(() => IsDockerRunning() && IsLinuxContainerMode());
{
return IsDockerRunning() && IsLinuxContainerMode();
}
private static bool IsDockerRunning() private static bool IsDockerRunning()
{ {
@@ -0,0 +1,16 @@
// Copyright © WireMock.Net
namespace WireMock.Net.Aspire.Tests.Facts;
public sealed class DockerIsRunningInLinuxContainerModeFact : FactAttribute
{
private const string SkipReason = "Docker is not running in Linux container mode. Skipping test.";
public DockerIsRunningInLinuxContainerModeFact()
{
if (!DockerUtils.IsDockerRunningLinuxContainerMode.Value)
{
Skip = SkipReason;
}
}
}
@@ -3,6 +3,7 @@
using System.Net.Http.Json; using System.Net.Http.Json;
using FluentAssertions; using FluentAssertions;
using Projects; using Projects;
using WireMock.Net.Aspire.Tests.Facts;
using Xunit.Abstractions; using Xunit.Abstractions;
namespace WireMock.Net.Aspire.Tests; namespace WireMock.Net.Aspire.Tests;
@@ -11,15 +12,9 @@ public class IntegrationTests(ITestOutputHelper output)
{ {
private record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary); private record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary);
[Fact] [DockerIsRunningInLinuxContainerModeFact]
public async Task StartAppHostWithWireMockAndCreateHttpClientToCallTheMockedWeatherForecastEndpoint() public async Task StartAppHostWithWireMockAndCreateHttpClientToCallTheMockedWeatherForecastEndpoint()
{ {
if (!DockerUtils.IsDockerRunningLinuxContainerMode())
{
output.WriteLine("Docker is not running in Linux container mode. Skipping test.");
return;
}
// Arrange // Arrange
var appHostBuilder = await DistributedApplicationTestingBuilder.CreateAsync<WireMock_Net_Aspire_TestAppHost>(); var appHostBuilder = await DistributedApplicationTestingBuilder.CreateAsync<WireMock_Net_Aspire_TestAppHost>();
await using var app = await appHostBuilder.BuildAsync(); await using var app = await appHostBuilder.BuildAsync();
@@ -44,15 +39,9 @@ public class IntegrationTests(ITestOutputHelper output)
weatherForecasts2.Should().HaveCount(5); weatherForecasts2.Should().HaveCount(5);
} }
[Fact] [DockerIsRunningInLinuxContainerModeFact]
public async Task StartAppHostWithWireMockAndCreateWireMockAdminClientToCallTheAdminEndpoint() public async Task StartAppHostWithWireMockAndCreateWireMockAdminClientToCallTheAdminEndpoint()
{ {
if (!DockerUtils.IsDockerRunningLinuxContainerMode())
{
output.WriteLine("Docker is not running in Linux container mode. Skipping test.");
return;
}
// Arrange // Arrange
var appHostBuilder = await DistributedApplicationTestingBuilder.CreateAsync<WireMock_Net_Aspire_TestAppHost>(); var appHostBuilder = await DistributedApplicationTestingBuilder.CreateAsync<WireMock_Net_Aspire_TestAppHost>();
await using var app = await appHostBuilder.BuildAsync(); await using var app = await appHostBuilder.BuildAsync();
@@ -7,16 +7,16 @@ namespace WireMock.Net.Tests.Facts;
public sealed class IgnoreOnContinuousIntegrationFact : FactAttribute public sealed class IgnoreOnContinuousIntegrationFact : FactAttribute
{ {
private static readonly string _skipReason = "Ignore when run via CI/CD"; private const string SkipReason = "Ignore when run via CI/CD";
private static readonly bool _isContinuousIntegrationAzure = bool.TryParse(Environment.GetEnvironmentVariable("TF_BUILD"), out var isTF) && isTF; private static readonly bool IsContinuousIntegrationAzure = bool.TryParse(Environment.GetEnvironmentVariable("TF_BUILD"), out var isTF) && isTF;
private static readonly bool _isContinuousIntegrationGithub = bool.TryParse(Environment.GetEnvironmentVariable("GITHUB_ACTIONS"), out var isGH) && isGH; private static readonly bool IsContinuousIntegrationGithub = bool.TryParse(Environment.GetEnvironmentVariable("GITHUB_ACTIONS"), out var isGH) && isGH;
private static bool IsContinuousIntegration() => _isContinuousIntegrationAzure || _isContinuousIntegrationGithub; private static readonly bool IsContinuousIntegration = IsContinuousIntegrationAzure || IsContinuousIntegrationGithub;
public IgnoreOnContinuousIntegrationFact() public IgnoreOnContinuousIntegrationFact()
{ {
if (IsContinuousIntegration()) if (IsContinuousIntegration)
{ {
Skip = _skipReason; Skip = SkipReason;
} }
} }
} }
@@ -210,7 +210,7 @@ public partial class WireMockServerTests
.ToArray(); .ToArray();
} }
[IgnoreOnContinuousIntegrationFact] [DockerIsRunningInLinuxContainerModeFact]
public async Task WireMockServer_WithUrl0000_Should_Listen_On_All_IPs_IPv4() public async Task WireMockServer_WithUrl0000_Should_Listen_On_All_IPs_IPv4()
{ {
// Arrange // Arrange
@@ -236,7 +236,7 @@ public partial class WireMockServerTests
server.Stop(); server.Stop();
} }
[IgnoreOnContinuousIntegrationFact] [DockerIsRunningInLinuxContainerModeFact]
public async Task WireMockServer_WithUrl0000_Should_Listen_On_All_IPs_IPv6() public async Task WireMockServer_WithUrl0000_Should_Listen_On_All_IPs_IPv6()
{ {
// Arrange // Arrange