mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-01-11 22:30:41 +01:00
156 lines
5.4 KiB
C#
156 lines
5.4 KiB
C#
// Copyright © WireMock.Net
|
|
|
|
#if NET6_0_OR_GREATER
|
|
using System;
|
|
using System.Runtime.InteropServices;
|
|
using System.Threading.Tasks;
|
|
using DotNet.Testcontainers.Builders;
|
|
using FluentAssertions;
|
|
using FluentAssertions.Execution;
|
|
using Meziantou.Extensions.Logging.Xunit;
|
|
using Microsoft.Extensions.Logging;
|
|
using WireMock.Net.Testcontainers;
|
|
using WireMock.Net.Testcontainers.Utils;
|
|
using WireMock.Net.Tests.Facts;
|
|
using Xunit;
|
|
using Xunit.Abstractions;
|
|
|
|
namespace WireMock.Net.Tests.Testcontainers;
|
|
|
|
public class TestcontainersTests(ITestOutputHelper testOutputHelper)
|
|
{
|
|
private readonly ILogger _logger = new XUnitLogger(testOutputHelper, new LoggerExternalScopeProvider(), nameof(TestcontainersTests), new XUnitLoggerOptions
|
|
{
|
|
IncludeCategory = true,
|
|
TimestampFormat = "yyy-MM-dd HH:mm:ss.fff"
|
|
});
|
|
|
|
[Fact]
|
|
public async Task WireMockContainer_Build_And_StartAsync_and_StopAsync()
|
|
{
|
|
// Act
|
|
var adminUsername = $"username_{Guid.NewGuid()}";
|
|
var adminPassword = $"password_{Guid.NewGuid()}";
|
|
var wireMockContainer = new WireMockContainerBuilder()
|
|
.WithLogger(_logger)
|
|
.WithAdminUserNameAndPassword(adminUsername, adminPassword)
|
|
.WithAutoRemove(true)
|
|
.WithCleanUp(true)
|
|
.Build();
|
|
|
|
await StartTestAsync(wireMockContainer);
|
|
await StopAsync(wireMockContainer);
|
|
}
|
|
|
|
// https://github.com/testcontainers/testcontainers-dotnet/issues/1322
|
|
[RunOnDockerPlatformFact("Linux")]
|
|
public async Task WireMockContainer_Build_WithNetwork_And_StartAsync_and_StopAsync()
|
|
{
|
|
// Act
|
|
var dummyNetwork = new NetworkBuilder()
|
|
.WithName("Dummy Network for TestcontainersTests")
|
|
.Build();
|
|
|
|
var wireMockContainer = new WireMockContainerBuilder()
|
|
.WithLogger(_logger)
|
|
.WithNetwork(dummyNetwork)
|
|
.WithWatchStaticMappings(true)
|
|
.Build();
|
|
|
|
await StartTestAsync(wireMockContainer);
|
|
await StopAsync(wireMockContainer);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task WireMockContainer_Build_WithImage_And_StartAsync_and_StopAsync()
|
|
{
|
|
// Arrange
|
|
var adminUsername = $"username_{Guid.NewGuid()}";
|
|
var adminPassword = $"password_{Guid.NewGuid()}";
|
|
var wireMockContainerBuilder = new WireMockContainerBuilder()
|
|
.WithLogger(_logger)
|
|
.WithAdminUserNameAndPassword(adminUsername, adminPassword);
|
|
|
|
var imageOS = await TestcontainersUtils.GetImageOSAsync.Value;
|
|
if (imageOS == OSPlatform.Windows)
|
|
{
|
|
wireMockContainerBuilder = wireMockContainerBuilder.WithWindowsImage();
|
|
}
|
|
else
|
|
{
|
|
wireMockContainerBuilder = wireMockContainerBuilder.WithLinuxImage();
|
|
}
|
|
|
|
var wireMockContainer = wireMockContainerBuilder.Build();
|
|
|
|
await StartTestAsync(wireMockContainer);
|
|
await StopAsync(wireMockContainer);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task WireMockContainer_Build_WithImageAsText_And_StartAsync_and_StopAsync()
|
|
{
|
|
// Arrange
|
|
var adminUsername = $"username_{Guid.NewGuid()}";
|
|
var adminPassword = $"password_{Guid.NewGuid()}";
|
|
var wireMockContainerBuilder = new WireMockContainerBuilder()
|
|
.WithLogger(_logger)
|
|
.WithAdminUserNameAndPassword(adminUsername, adminPassword);
|
|
|
|
var imageOS = await TestcontainersUtils.GetImageOSAsync.Value;
|
|
if (imageOS == OSPlatform.Windows)
|
|
{
|
|
wireMockContainerBuilder = wireMockContainerBuilder.WithImage("sheyenrath/wiremock.net-windows");
|
|
}
|
|
else
|
|
{
|
|
wireMockContainerBuilder = wireMockContainerBuilder.WithImage("sheyenrath/wiremock.net-alpine");
|
|
}
|
|
|
|
var wireMockContainer = wireMockContainerBuilder.Build();
|
|
|
|
await StartTestAsync(wireMockContainer);
|
|
await StopAsync(wireMockContainer);
|
|
}
|
|
|
|
private static async Task StartTestAsync(WireMockContainer wireMockContainer)
|
|
{
|
|
// Start
|
|
await wireMockContainer.StartAsync().ConfigureAwait(false);
|
|
|
|
// Assert
|
|
using (new AssertionScope())
|
|
{
|
|
var url = wireMockContainer.GetPublicUrl();
|
|
url.Should().NotBeNullOrWhiteSpace();
|
|
|
|
var adminClient = wireMockContainer.CreateWireMockAdminClient();
|
|
|
|
var settings = await adminClient.GetSettingsAsync();
|
|
settings.Should().NotBeNull();
|
|
}
|
|
}
|
|
|
|
private async Task StopAsync(WireMockContainer wireMockContainer)
|
|
{
|
|
try
|
|
{
|
|
await wireMockContainer.StopAsync();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
// Sometimes we get this exception, so for now ignore it.
|
|
/*
|
|
Failed WireMock.Net.Tests.Testcontainers.TestcontainersTests.WireMockContainer_Build_WithImageAsText_And_StartAsync_and_StopAsync [9 s]
|
|
Error Message:
|
|
System.NullReferenceException : Object reference not set to an instance of an object.
|
|
Stack Trace:
|
|
at DotNet.Testcontainers.Containers.DockerContainer.UnsafeStopAsync(CancellationToken ct) in /_/src/Testcontainers/Containers/DockerContainer.cs:line 567
|
|
at DotNet.Testcontainers.Containers.DockerContainer.StopAsync(CancellationToken ct) in /_/src/Testcontainers/Containers/DockerContainer.cs:line 319
|
|
*/
|
|
|
|
testOutputHelper.WriteLine($"Exception during StopAsync: {ex}");
|
|
}
|
|
}
|
|
}
|
|
#endif |