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

View File

@@ -8,10 +8,7 @@ namespace WireMock.Net.Aspire.Tests;
[ExcludeFromCodeCoverage]
internal static class DockerUtils
{
public static bool IsDockerRunningLinuxContainerMode()
{
return IsDockerRunning() && IsLinuxContainerMode();
}
public static Lazy<bool> IsDockerRunningLinuxContainerMode => new(() => IsDockerRunning() && IsLinuxContainerMode());
private static bool IsDockerRunning()
{

View File

@@ -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;
}
}
}

View File

@@ -3,6 +3,7 @@
using System.Net.Http.Json;
using FluentAssertions;
using Projects;
using WireMock.Net.Aspire.Tests.Facts;
using Xunit.Abstractions;
namespace WireMock.Net.Aspire.Tests;
@@ -11,15 +12,9 @@ public class IntegrationTests(ITestOutputHelper output)
{
private record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary);
[Fact]
[DockerIsRunningInLinuxContainerModeFact]
public async Task StartAppHostWithWireMockAndCreateHttpClientToCallTheMockedWeatherForecastEndpoint()
{
if (!DockerUtils.IsDockerRunningLinuxContainerMode())
{
output.WriteLine("Docker is not running in Linux container mode. Skipping test.");
return;
}
// Arrange
var appHostBuilder = await DistributedApplicationTestingBuilder.CreateAsync<WireMock_Net_Aspire_TestAppHost>();
await using var app = await appHostBuilder.BuildAsync();
@@ -44,15 +39,9 @@ public class IntegrationTests(ITestOutputHelper output)
weatherForecasts2.Should().HaveCount(5);
}
[Fact]
[DockerIsRunningInLinuxContainerModeFact]
public async Task StartAppHostWithWireMockAndCreateWireMockAdminClientToCallTheAdminEndpoint()
{
if (!DockerUtils.IsDockerRunningLinuxContainerMode())
{
output.WriteLine("Docker is not running in Linux container mode. Skipping test.");
return;
}
// Arrange
var appHostBuilder = await DistributedApplicationTestingBuilder.CreateAsync<WireMock_Net_Aspire_TestAppHost>();
await using var app = await appHostBuilder.BuildAsync();

View File

@@ -7,16 +7,16 @@ namespace WireMock.Net.Tests.Facts;
public sealed class IgnoreOnContinuousIntegrationFact : FactAttribute
{
private static readonly 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 _isContinuousIntegrationGithub = bool.TryParse(Environment.GetEnvironmentVariable("GITHUB_ACTIONS"), out var isGH) && isGH;
private static bool IsContinuousIntegration() => _isContinuousIntegrationAzure || _isContinuousIntegrationGithub;
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 IsContinuousIntegrationGithub = bool.TryParse(Environment.GetEnvironmentVariable("GITHUB_ACTIONS"), out var isGH) && isGH;
private static readonly bool IsContinuousIntegration = IsContinuousIntegrationAzure || IsContinuousIntegrationGithub;
public IgnoreOnContinuousIntegrationFact()
{
if (IsContinuousIntegration())
if (IsContinuousIntegration)
{
Skip = _skipReason;
Skip = SkipReason;
}
}
}
}

View File

@@ -210,7 +210,7 @@ public partial class WireMockServerTests
.ToArray();
}
[IgnoreOnContinuousIntegrationFact]
[DockerIsRunningInLinuxContainerModeFact]
public async Task WireMockServer_WithUrl0000_Should_Listen_On_All_IPs_IPv4()
{
// Arrange
@@ -236,7 +236,7 @@ public partial class WireMockServerTests
server.Stop();
}
[IgnoreOnContinuousIntegrationFact]
[DockerIsRunningInLinuxContainerModeFact]
public async Task WireMockServer_WithUrl0000_Should_Listen_On_All_IPs_IPv6()
{
// Arrange