mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-04-17 22:50:05 +02:00
Fix WireMockContainerBuilder (duplicate entries) (#1222)
This commit is contained in:
@@ -44,6 +44,7 @@
|
|||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Sigil/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Sigil/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Stef/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Stef/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=templated/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=templated/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Testcontainers/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Victoor/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Victoor/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Webhook/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Webhook/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Webhooks/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Webhooks/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
// Copyright © WireMock.Net
|
// Copyright © WireMock.Net
|
||||||
|
|
||||||
using DotNet.Testcontainers.Configurations;
|
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using DotNet.Testcontainers.Builders;
|
||||||
|
using DotNet.Testcontainers.Configurations;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using WireMock.Net.Testcontainers;
|
using WireMock.Net.Testcontainers;
|
||||||
|
|
||||||
@@ -9,100 +10,27 @@ namespace WireMock.Net.TestcontainersExample;
|
|||||||
|
|
||||||
internal class Program
|
internal class Program
|
||||||
{
|
{
|
||||||
|
private static readonly ConsoleColor OriginalColor = Console.ForegroundColor;
|
||||||
|
|
||||||
private static async Task Main(string[] args)
|
private static async Task Main(string[] args)
|
||||||
{
|
{
|
||||||
var original = Console.ForegroundColor;
|
await TestLinux();
|
||||||
|
|
||||||
try
|
await TestAutomatic();
|
||||||
{
|
|
||||||
Console.ForegroundColor = ConsoleColor.DarkGreen;
|
|
||||||
Console.WriteLine("Copy");
|
|
||||||
await TestCopyAsync();
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Console.WriteLine(e);
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
Console.ForegroundColor = original;
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
await TestLinuxWithVersionTag();
|
||||||
{
|
|
||||||
Console.ForegroundColor = ConsoleColor.DarkRed;
|
|
||||||
Console.WriteLine("Automatic");
|
|
||||||
await TestAsync();
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
Console.ForegroundColor = original;
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
await TestLinuxAlpineWithVersionTag();
|
||||||
{
|
|
||||||
Console.ForegroundColor = ConsoleColor.Yellow;
|
|
||||||
Console.WriteLine("Linux");
|
|
||||||
await TestAsync("sheyenrath/wiremock.net:1.6.5");
|
|
||||||
await Task.Delay(1_000);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Console.WriteLine(e);
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
Console.ForegroundColor = original;
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
await TestWindowsWithVersionTag();
|
||||||
{
|
|
||||||
Console.ForegroundColor = ConsoleColor.White;
|
|
||||||
Console.WriteLine("Linux Alpine");
|
|
||||||
await TestAsync("sheyenrath/wiremock.net-alpine:1.6.5");
|
|
||||||
await Task.Delay(1_000);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Console.WriteLine(e);
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
Console.ForegroundColor = original;
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
await TestWindows();
|
||||||
{
|
|
||||||
Console.ForegroundColor = ConsoleColor.Gray;
|
|
||||||
Console.WriteLine("WithLinux");
|
|
||||||
await TestAsync("WithLinux");
|
|
||||||
await Task.Delay(1_000);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Console.WriteLine(e);
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
Console.ForegroundColor = original;
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
await TestCopy();
|
||||||
{
|
}
|
||||||
Console.ForegroundColor = ConsoleColor.Cyan;
|
|
||||||
Console.WriteLine("Windows");
|
|
||||||
await TestAsync("sheyenrath/wiremock.net-windows:1.6.5");
|
|
||||||
await Task.Delay(1_000);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Console.WriteLine(e);
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
Console.ForegroundColor = original;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
private static async Task TestWindows()
|
||||||
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Console.ForegroundColor = ConsoleColor.Blue;
|
Console.ForegroundColor = ConsoleColor.Blue;
|
||||||
@@ -116,11 +44,119 @@ internal class Program
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
Console.ForegroundColor = original;
|
Console.ForegroundColor = OriginalColor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async Task TestCopyAsync()
|
private static async Task TestWindowsWithVersionTag()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = ConsoleColor.Cyan;
|
||||||
|
Console.WriteLine("Windows");
|
||||||
|
await TestAsync("sheyenrath/wiremock.net-windows:1.6.5");
|
||||||
|
await Task.Delay(1_000);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine(e);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = OriginalColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task TestLinux()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = ConsoleColor.Gray;
|
||||||
|
Console.WriteLine("WithLinux");
|
||||||
|
await TestAsync("WithLinux");
|
||||||
|
await Task.Delay(1_000);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine(e);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = OriginalColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task TestLinuxAlpineWithVersionTag()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = ConsoleColor.White;
|
||||||
|
Console.WriteLine("Linux Alpine");
|
||||||
|
await TestAsync("sheyenrath/wiremock.net-alpine:1.6.5");
|
||||||
|
await Task.Delay(1_000);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine(e);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = OriginalColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task TestLinuxWithVersionTag()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = ConsoleColor.Yellow;
|
||||||
|
Console.WriteLine("Linux");
|
||||||
|
await TestAsync("sheyenrath/wiremock.net:1.6.5");
|
||||||
|
await Task.Delay(1_000);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine(e);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = OriginalColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task TestAutomatic()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = ConsoleColor.DarkRed;
|
||||||
|
Console.WriteLine("Automatic");
|
||||||
|
await TestAsync();
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = OriginalColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task TestCopy()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = ConsoleColor.DarkGreen;
|
||||||
|
Console.WriteLine("Copy");
|
||||||
|
await TestWindowsCopyAsync();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine(e);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = OriginalColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task TestWindowsCopyAsync()
|
||||||
{
|
{
|
||||||
var builder = new WireMockContainerBuilder()
|
var builder = new WireMockContainerBuilder()
|
||||||
.WithWatchStaticMappings(true)
|
.WithWatchStaticMappings(true)
|
||||||
@@ -152,9 +188,6 @@ internal class Program
|
|||||||
|
|
||||||
await Task.Delay(1_000);
|
await Task.Delay(1_000);
|
||||||
|
|
||||||
//Console.WriteLine("Press any key to stop.");
|
|
||||||
//Console.ReadKey();
|
|
||||||
|
|
||||||
await container.StopAsync();
|
await container.StopAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,11 +195,18 @@ internal class Program
|
|||||||
{
|
{
|
||||||
var mappingsPath = Path.Combine(Directory.GetCurrentDirectory(), "..", "..", "..", "..", "WireMock.Net.Console.NET6", "__admin", "mappings");
|
var mappingsPath = Path.Combine(Directory.GetCurrentDirectory(), "..", "..", "..", "..", "WireMock.Net.Console.NET6", "__admin", "mappings");
|
||||||
|
|
||||||
|
var dummyNetwork = new NetworkBuilder()
|
||||||
|
.WithName($"Dummy Network for {image ?? "null"}")
|
||||||
|
.WithReuse(true)
|
||||||
|
.WithCleanUp(true)
|
||||||
|
.Build();
|
||||||
|
|
||||||
var builder = new WireMockContainerBuilder()
|
var builder = new WireMockContainerBuilder()
|
||||||
|
.WithNetwork(dummyNetwork)
|
||||||
.WithAdminUserNameAndPassword("x", "y")
|
.WithAdminUserNameAndPassword("x", "y")
|
||||||
.WithMappings(mappingsPath)
|
.WithMappings(mappingsPath)
|
||||||
.WithWatchStaticMappings(true)
|
.WithWatchStaticMappings(true)
|
||||||
.WithAutoRemove(true)
|
// .WithAutoRemove(true)
|
||||||
.WithCleanUp(true);
|
.WithCleanUp(true);
|
||||||
|
|
||||||
if (image != null)
|
if (image != null)
|
||||||
@@ -202,16 +242,10 @@ internal class Program
|
|||||||
var result = await client.GetStringAsync("/static/mapping");
|
var result = await client.GetStringAsync("/static/mapping");
|
||||||
Console.WriteLine("result = " + result);
|
Console.WriteLine("result = " + result);
|
||||||
|
|
||||||
//if (image == null)
|
|
||||||
//{
|
|
||||||
// Console.WriteLine("Press any key to stop.");
|
|
||||||
// Console.ReadKey();
|
|
||||||
//}
|
|
||||||
|
|
||||||
await container.StopAsync();
|
await container.StopAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Lazy<Task<OSPlatform>> GetImageOSAsync = new(async () =>
|
private static readonly Lazy<Task<OSPlatform>> GetImageOSAsync = new(async () =>
|
||||||
{
|
{
|
||||||
if (TestcontainersSettings.OS.DockerEndpointAuthConfig == null)
|
if (TestcontainersSettings.OS.DockerEndpointAuthConfig == null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -7,8 +7,14 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace WireMock.Net.Testcontainers.Utils;
|
namespace WireMock.Net.Testcontainers.Utils;
|
||||||
|
|
||||||
internal static class ContainerUtils
|
/// <summary>
|
||||||
|
/// Some utility methods for containers.
|
||||||
|
/// </summary>
|
||||||
|
public static class TestcontainersUtils
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Get the OS platform of the Docker image.
|
||||||
|
/// </summary>
|
||||||
public static Lazy<Task<OSPlatform>> GetImageOSAsync = new(async () =>
|
public static Lazy<Task<OSPlatform>> GetImageOSAsync = new(async () =>
|
||||||
{
|
{
|
||||||
if (TestcontainersSettings.OS.DockerEndpointAuthConfig == null)
|
if (TestcontainersSettings.OS.DockerEndpointAuthConfig == null)
|
||||||
@@ -164,7 +164,7 @@ public sealed class WireMockContainer : DockerContainer
|
|||||||
|
|
||||||
private static async Task<bool> PathStartsWithContainerMappingsPath(string value)
|
private static async Task<bool> PathStartsWithContainerMappingsPath(string value)
|
||||||
{
|
{
|
||||||
var imageOs = await ContainerUtils.GetImageOSAsync.Value;
|
var imageOs = await TestcontainersUtils.GetImageOSAsync.Value;
|
||||||
|
|
||||||
return value.StartsWith(ContainerInfoProvider.Info[imageOs].MappingsPath);
|
return value.StartsWith(ContainerInfoProvider.Info[imageOs].MappingsPath);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ public sealed class WireMockContainerBuilder : ContainerBuilder<WireMockContaine
|
|||||||
[PublicAPI]
|
[PublicAPI]
|
||||||
public WireMockContainerBuilder WithImage()
|
public WireMockContainerBuilder WithImage()
|
||||||
{
|
{
|
||||||
_imageOS ??= ContainerUtils.GetImageOSAsync.Value.GetAwaiter().GetResult();
|
_imageOS ??= TestcontainersUtils.GetImageOSAsync.Value.GetAwaiter().GetResult();
|
||||||
return WithImage(_imageOS.Value);
|
return WithImage(_imageOS.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,9 +108,10 @@ public sealed class WireMockContainerBuilder : ContainerBuilder<WireMockContaine
|
|||||||
[PublicAPI]
|
[PublicAPI]
|
||||||
public WireMockContainerBuilder WithWatchStaticMappings(bool includeSubDirectories)
|
public WireMockContainerBuilder WithWatchStaticMappings(bool includeSubDirectories)
|
||||||
{
|
{
|
||||||
return Merge(DockerResourceConfiguration, DockerResourceConfiguration.WithWatchStaticMappings(includeSubDirectories))
|
DockerResourceConfiguration.WithWatchStaticMappings(includeSubDirectories);
|
||||||
.WithCommand("--WatchStaticMappings true")
|
return
|
||||||
.WithCommand($"--WatchStaticMappingsInSubdirectories {includeSubDirectories}");
|
WithCommand("--WatchStaticMappings true").
|
||||||
|
WithCommand("--WatchStaticMappingsInSubdirectories", includeSubDirectories);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -124,9 +125,16 @@ public sealed class WireMockContainerBuilder : ContainerBuilder<WireMockContaine
|
|||||||
{
|
{
|
||||||
Guard.NotNullOrEmpty(path);
|
Guard.NotNullOrEmpty(path);
|
||||||
|
|
||||||
return Merge(DockerResourceConfiguration, DockerResourceConfiguration.WithStaticMappingsPath(path))
|
DockerResourceConfiguration.WithStaticMappingsPath(path);
|
||||||
.WithReadStaticMappings()
|
|
||||||
.WithCommand($"--WatchStaticMappingsInSubdirectories {includeSubDirectories}");
|
return
|
||||||
|
WithReadStaticMappings().
|
||||||
|
WithCommand("--WatchStaticMappingsInSubdirectories", includeSubDirectories);
|
||||||
|
}
|
||||||
|
|
||||||
|
private WireMockContainerBuilder WithCommand(string param, bool value)
|
||||||
|
{
|
||||||
|
return !value ? this : WithCommand($"{param} true");
|
||||||
}
|
}
|
||||||
|
|
||||||
private WireMockContainerBuilder(WireMockConfiguration dockerResourceConfiguration) : base(dockerResourceConfiguration)
|
private WireMockContainerBuilder(WireMockConfiguration dockerResourceConfiguration) : base(dockerResourceConfiguration)
|
||||||
|
|||||||
19
test/WireMock.Net.Tests/Facts/RunOnDockerPlatformFact.cs
Normal file
19
test/WireMock.Net.Tests/Facts/RunOnDockerPlatformFact.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
// Copyright © WireMock.Net
|
||||||
|
#if NET6_0_OR_GREATER
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using WireMock.Net.Testcontainers.Utils;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace WireMock.Net.Tests.Facts;
|
||||||
|
|
||||||
|
public sealed class RunOnDockerPlatformFact : FactAttribute
|
||||||
|
{
|
||||||
|
public RunOnDockerPlatformFact(string platform)
|
||||||
|
{
|
||||||
|
if (TestcontainersUtils.GetImageOSAsync.Value.Result != OSPlatform.Create(platform))
|
||||||
|
{
|
||||||
|
Skip = $"Only run test when Docker OS Platform {platform} is used.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@@ -4,9 +4,11 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using DotNet.Testcontainers.Builders;
|
||||||
using FluentAssertions;
|
using FluentAssertions;
|
||||||
using FluentAssertions.Execution;
|
using FluentAssertions.Execution;
|
||||||
using WireMock.Net.Testcontainers;
|
using WireMock.Net.Testcontainers;
|
||||||
|
using WireMock.Net.Tests.Facts;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace WireMock.Net.Tests.Testcontainers;
|
namespace WireMock.Net.Tests.Testcontainers;
|
||||||
@@ -27,7 +29,27 @@ public class TestcontainersTests
|
|||||||
|
|
||||||
await StartTestAndStopAsync(wireMockContainer);
|
await StartTestAndStopAsync(wireMockContainer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://github.com/testcontainers/testcontainers-dotnet/issues/1322
|
||||||
|
[RunOnDockerPlatformFact("Linux")]
|
||||||
|
public async Task WireMockContainer_Build_WithNoImageAndNetwork_And_StartAsync_and_StopAsync()
|
||||||
|
{
|
||||||
|
// Act
|
||||||
|
var dummyNetwork = new NetworkBuilder()
|
||||||
|
.WithName("Dummy Network for TestcontainersTests")
|
||||||
|
.WithCleanUp(true)
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var wireMockContainer = new WireMockContainerBuilder()
|
||||||
|
.WithNetwork(dummyNetwork)
|
||||||
|
.WithWatchStaticMappings(true)
|
||||||
|
.WithAutoRemove(true)
|
||||||
|
.WithCleanUp(true)
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
await StartTestAndStopAsync(wireMockContainer);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task WireMockContainer_Build_WithImage_And_StartAsync_and_StopAsync()
|
public async Task WireMockContainer_Build_WithImage_And_StartAsync_and_StopAsync()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user