diff --git a/examples/WireMock.Net.TestcontainersExample/Program.cs b/examples/WireMock.Net.TestcontainersExample/Program.cs
index 38a23149..a634d93f 100644
--- a/examples/WireMock.Net.TestcontainersExample/Program.cs
+++ b/examples/WireMock.Net.TestcontainersExample/Program.cs
@@ -198,7 +198,7 @@ private static async Task TestAsync(string? image = null)
var dummyNetwork = new NetworkBuilder()
.WithName($"Dummy Network for {image ?? "null"}")
.WithReuse(true)
- .WithCleanUp(true)
+ // .WithCleanUp(true)
.Build();
var builder = new WireMockContainerBuilder()
diff --git a/src/WireMock.Net.Testcontainers/WireMock.Net.Testcontainers.csproj b/src/WireMock.Net.Testcontainers/WireMock.Net.Testcontainers.csproj
index 5154a8e0..a0c36b8e 100644
--- a/src/WireMock.Net.Testcontainers/WireMock.Net.Testcontainers.csproj
+++ b/src/WireMock.Net.Testcontainers/WireMock.Net.Testcontainers.csproj
@@ -21,6 +21,8 @@
+
+
@@ -28,6 +30,10 @@
all
runtime; build; native; contentfiles; analyzers; buildtransitive
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
diff --git a/src/WireMock.Net.Testcontainers/WireMockConfiguration.cs b/src/WireMock.Net.Testcontainers/WireMockConfiguration.cs
index 17fdc0f2..159e9901 100644
--- a/src/WireMock.Net.Testcontainers/WireMockConfiguration.cs
+++ b/src/WireMock.Net.Testcontainers/WireMockConfiguration.cs
@@ -1,5 +1,7 @@
// Copyright © WireMock.Net
+using System.Collections.Generic;
+using System.Linq;
using Docker.DotNet.Models;
using DotNet.Testcontainers.Builders;
using DotNet.Testcontainers.Configurations;
@@ -24,6 +26,8 @@ public sealed class WireMockConfiguration : ContainerConfiguration
public bool HasBasicAuthentication => !string.IsNullOrEmpty(Username) && !string.IsNullOrEmpty(Password);
+ public List AdditionalUrls { get; private set; } = [];
+
public WireMockConfiguration(string? username = null, string? password = null)
{
Username = username;
@@ -70,6 +74,7 @@ public WireMockConfiguration(WireMockConfiguration oldValue, WireMockConfigurati
StaticMappingsPath = BuildConfiguration.Combine(oldValue.StaticMappingsPath, newValue.StaticMappingsPath);
WatchStaticMappings = BuildConfiguration.Combine(oldValue.WatchStaticMappings, newValue.WatchStaticMappings);
WatchStaticMappingsInSubdirectories = BuildConfiguration.Combine(oldValue.WatchStaticMappingsInSubdirectories, newValue.WatchStaticMappingsInSubdirectories);
+ AdditionalUrls = BuildConfiguration.Combine(oldValue.AdditionalUrls.AsEnumerable(), newValue.AdditionalUrls.AsEnumerable()).ToList();
}
///
@@ -94,4 +99,15 @@ public WireMockConfiguration WithWatchStaticMappings(bool includeSubDirectories)
WatchStaticMappingsInSubdirectories = includeSubDirectories;
return this;
}
+
+ ///
+ /// An additional Url on which WireMock listens.
+ ///
+ /// The url to add.
+ ///
+ public WireMockConfiguration WithAdditionalUrl(string url)
+ {
+ AdditionalUrls.Add(url);
+ return this;
+ }
}
\ No newline at end of file
diff --git a/src/WireMock.Net.Testcontainers/WireMockContainer.cs b/src/WireMock.Net.Testcontainers/WireMockContainer.cs
index 141f03a4..b03a10bb 100644
--- a/src/WireMock.Net.Testcontainers/WireMockContainer.cs
+++ b/src/WireMock.Net.Testcontainers/WireMockContainer.cs
@@ -1,7 +1,9 @@
// Copyright © WireMock.Net
using System;
+using System.Collections.Generic;
using System.IO;
+using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
@@ -30,6 +32,7 @@ public sealed class WireMockContainer : DockerContainer
private IWireMockAdminApi? _adminApi;
private EnhancedFileSystemWatcher? _enhancedFileSystemWatcher;
+ private IDictionary? _publicUris;
///
/// Initializes a new instance of the class.
@@ -48,6 +51,21 @@ public WireMockContainer(WireMockConfiguration configuration) : base(configurati
[PublicAPI]
public string GetPublicUrl() => GetPublicUri().ToString();
+ ///
+ /// Gets the public Urls as a dictionary with the internal port as the key.
+ ///
+ [PublicAPI]
+ public IDictionary GetPublicUrls() => GetPublicUris().ToDictionary(kvp => kvp.Key, kvp => kvp.Value.ToString());
+
+ ///
+ /// Gets the mapped public port for the given container port.
+ ///
+ [PublicAPI]
+ public string GetMappedPublicUrl(int containerPort)
+ {
+ return GetPublicUris()[containerPort].ToString();
+ }
+
///
/// Create a RestEase Admin client which can be used to call the admin REST endpoint.
///
@@ -121,7 +139,7 @@ public HttpClient CreateClient(HttpMessageHandler innerHandler, params Delegatin
await ReloadStaticMappingsAsync(target, ct);
}
}
-
+
///
/// Reload the static mappings.
///
@@ -198,7 +216,14 @@ private void WireMockContainer_Started(object sender, EventArgs e)
private async void FileCreatedChangedOrDeleted(object sender, FileSystemEventArgs args)
{
- await ReloadStaticMappingsAsync(args.FullPath);
+ try
+ {
+ await ReloadStaticMappingsAsync(args.FullPath);
+ }
+ catch (Exception ex)
+ {
+ Logger.LogWarning(ex, "Error reloading static mappings from '{FullPath}'.", args.FullPath);
+ }
}
private async Task ReloadStaticMappingsAsync(string path, CancellationToken cancellationToken = default)
@@ -207,5 +232,27 @@ private async Task ReloadStaticMappingsAsync(string path, CancellationToken canc
await ReloadStaticMappingsAsync(cancellationToken);
}
- private Uri GetPublicUri() => new UriBuilder(Uri.UriSchemeHttp, Hostname, GetMappedPublicPort(ContainerPort)).Uri;
+ private Uri GetPublicUri() => GetPublicUris()[ContainerPort];
+
+ private IDictionary GetPublicUris()
+ {
+ if (_publicUris != null)
+ {
+ return _publicUris;
+ }
+
+ _publicUris = _configuration.ExposedPorts.Keys
+ .Select(int.Parse)
+ .ToDictionary(port => port, port => new UriBuilder(Uri.UriSchemeHttp, Hostname, GetMappedPublicPort(port)).Uri);
+
+ foreach (var url in _configuration.AdditionalUrls)
+ {
+ if (PortUtils.TryExtract(url, out _, out _, out _, out _, out var port))
+ {
+ _publicUris[port] = new UriBuilder(Uri.UriSchemeHttp, Hostname, GetMappedPublicPort(port)).Uri;
+ }
+ }
+
+ return _publicUris;
+ }
}
\ No newline at end of file
diff --git a/src/WireMock.Net.Testcontainers/WireMockContainerBuilder.cs b/src/WireMock.Net.Testcontainers/WireMockContainerBuilder.cs
index 9ec17b05..ea2e9074 100644
--- a/src/WireMock.Net.Testcontainers/WireMockContainerBuilder.cs
+++ b/src/WireMock.Net.Testcontainers/WireMockContainerBuilder.cs
@@ -1,6 +1,7 @@
// Copyright © WireMock.Net
using System;
+using System.Linq;
using System.Runtime.InteropServices;
using Docker.DotNet.Models;
using DotNet.Testcontainers.Builders;
@@ -8,6 +9,7 @@
using JetBrains.Annotations;
using Stef.Validation;
using WireMock.Net.Testcontainers.Utils;
+using WireMock.Util;
namespace WireMock.Net.Testcontainers;
@@ -132,6 +134,36 @@ public WireMockContainerBuilder WithMappings(string path, bool includeSubDirecto
WithCommand("--WatchStaticMappingsInSubdirectories", includeSubDirectories);
}
+ ///
+ /// Use Http version 2.
+ ///
+ /// A configured instance of
+ [PublicAPI]
+ public WireMockContainerBuilder WithHttp2()
+ {
+ return WithCommand("--UseHttp2 true");
+ }
+
+ ///
+ /// Adds another URL to the WireMock container. By default, the WireMock container will listen on http://*:80.
+ ///
+ /// This method can be used to also host the WireMock container on another port or protocol (like grpc).
+ ///
+ /// grpc://*:9090
+ /// A configured instance of
+ [PublicAPI]
+ public WireMockContainerBuilder AddUrl(string url)
+ {
+ if (!PortUtils.TryExtract(Guard.NotNullOrEmpty(url), out _, out _, out _, out _, out var port))
+ {
+ throw new ArgumentException("The URL is not valid.", nameof(url));
+ }
+
+ DockerResourceConfiguration.WithAdditionalUrl(url);
+
+ return WithPortBinding(port, true);
+ }
+
private WireMockContainerBuilder WithCommand(string param, bool value)
{
return !value ? this : WithCommand($"{param} true");
@@ -172,6 +204,11 @@ public override WireMockContainer Build()
builder = builder.WithBindMount(builder.DockerResourceConfiguration.StaticMappingsPath, ContainerInfoProvider.Info[_imageOS.Value].MappingsPath);
}
+ if (builder.DockerResourceConfiguration.AdditionalUrls.Any())
+ {
+ builder = builder.WithCommand($"--Urls http://*:80 {string.Join(" ", builder.DockerResourceConfiguration.AdditionalUrls)}");
+ }
+
builder.Validate();
return new WireMockContainer(builder.DockerResourceConfiguration);
diff --git a/src/WireMock.Net/Util/PortUtils.cs b/src/WireMock.Net/Util/PortUtils.cs
index f50a106d..5605dfc8 100644
--- a/src/WireMock.Net/Util/PortUtils.cs
+++ b/src/WireMock.Net/Util/PortUtils.cs
@@ -83,32 +83,6 @@ public static IReadOnlyList FindFreeTcpPorts(int count)
}
}
- /////
- ///// Finds free TCP ports.
- /////
- //public static IReadOnlyList FindFreeTcpPorts(int numPorts)
- //{
- // var freePorts = new List();
-
- // TcpListener? tcpListener = null;
- // try
- // {
- // for (var i = 0; i < numPorts; i++)
- // {
- // tcpListener = new TcpListener(IPAddress.Loopback, 0);
- // tcpListener.Start();
-
- // freePorts.Add(((IPEndPoint)tcpListener.LocalEndpoint).Port);
- // }
- // }
- // finally
- // {
- // tcpListener?.Stop();
- // }
-
- // return freePorts;
- //}
-
///
/// Extract the isHttps, isHttp2, protocol, host and port from a URL.
///
@@ -118,7 +92,7 @@ public static bool TryExtract(string url, out bool isHttps, out bool isHttp2, [N
isHttp2 = false;
protocol = null;
host = null;
- port = default;
+ port = 0;
var match = UrlDetailsRegex.Match(url);
if (match.Success)
diff --git a/test/WireMock.Net.Tests/Grpc/WireMockServerTests.Grpc.cs b/test/WireMock.Net.Tests/Grpc/WireMockServerTests.Grpc.cs
index 68acd4f8..807acd85 100644
--- a/test/WireMock.Net.Tests/Grpc/WireMockServerTests.Grpc.cs
+++ b/test/WireMock.Net.Tests/Grpc/WireMockServerTests.Grpc.cs
@@ -12,7 +12,7 @@
using Google.Protobuf.WellKnownTypes;
using Greet;
using Grpc.Net.Client;
-using NarrowIntegrationTest.Lookup;
+using ExampleIntegrationTest.Lookup;
using WireMock.Constants;
using WireMock.Matchers;
using WireMock.RequestBuilders;
@@ -668,7 +668,7 @@ public async Task WireMockServer_WithBodyAsProtoBuf_Enum_UsingPolicyGrpcGenerate
.RespondWith(Response.Create()
.WithHeader("Content-Type", "application/grpc")
.WithTrailingHeader("grpc-status", "0")
- .WithBodyAsProtoBuf(definition, "NarrowIntegrationTest.Lookup.GetVersionResponse",
+ .WithBodyAsProtoBuf(definition, "ExampleIntegrationTest.Lookup.GetVersionResponse",
new GetVersionResponse
{
Version = version,
@@ -677,9 +677,9 @@ public async Task WireMockServer_WithBodyAsProtoBuf_Enum_UsingPolicyGrpcGenerate
Seconds = seconds,
Nanos = nanos
},
- Client = new NarrowIntegrationTest.Lookup.Client
+ Client = new ExampleIntegrationTest.Lookup.Client
{
- ClientName = NarrowIntegrationTest.Lookup.Client.Types.Clients.BillingCenter,
+ ClientName = ExampleIntegrationTest.Lookup.Client.Types.Clients.Test,
CorrelationId = correlationId
}
}
@@ -695,23 +695,34 @@ public async Task WireMockServer_WithBodyAsProtoBuf_Enum_UsingPolicyGrpcGenerate
// Assert
reply.Version.Should().Be(version);
reply.DateHired.Should().Be(new Timestamp { Seconds = seconds, Nanos = nanos });
- reply.Client.ClientName.Should().Be(NarrowIntegrationTest.Lookup.Client.Types.Clients.BillingCenter);
+ reply.Client.ClientName.Should().Be(ExampleIntegrationTest.Lookup.Client.Types.Clients.Test);
reply.Client.CorrelationId.Should().Be(correlationId);
}
+ [Fact]
+ public async Task WireMockServer_WithBodyAsProtoBuf_FromJson_UsingGrpcGeneratedClient()
+ {
+ var server = Given_When_ServerStarted_And_RunningOnHttpAndGrpc();
+ await Given_When_ProtoBufMappingIsAddedViaAdminInterfaceAsync(server, "protobuf-mapping-1.json");
+
+ var reply = await When_GrpcClient_Calls_SayHelloAsync(server.Urls[1]);
+
+ Then_ReplyMessage_Should_BeCorrect(reply);
+ }
+
[Fact]
public async Task WireMockServer_WithBodyAsProtoBuf_ServerProtoDefinitionFromJson_UsingGrpcGeneratedClient()
{
- var server = Given_When_ServerStartedUsingHttp2();
+ var server = Given_When_ServerStarted_And_RunningOnHttpAndGrpc();
Given_ProtoDefinition_IsAddedOnServerLevel(server);
- await Given_When_ProtoBufMappingIsAddedViaAdminInterfaceAsync(server);
+ await Given_When_ProtoBufMappingIsAddedViaAdminInterfaceAsync(server, "protobuf-mapping-3.json");
var reply = await When_GrpcClient_Calls_SayHelloAsync(server.Urls[1]);
Then_ReplyMessage_Should_BeCorrect(reply);
}
- private static WireMockServer Given_When_ServerStartedUsingHttp2()
+ private static WireMockServer Given_When_ServerStarted_And_RunningOnHttpAndGrpc()
{
var ports = PortUtils.FindFreeTcpPorts(2);
@@ -728,9 +739,9 @@ private static void Given_ProtoDefinition_IsAddedOnServerLevel(WireMockServer se
server.AddProtoDefinition("my-greeter", ReadProtoFile("greet.proto"));
}
- private static async Task Given_When_ProtoBufMappingIsAddedViaAdminInterfaceAsync(WireMockServer server)
+ private static async Task Given_When_ProtoBufMappingIsAddedViaAdminInterfaceAsync(WireMockServer server, string filename)
{
- var mappingsJson = ReadMappingFile("protobuf-mapping-3.json");
+ var mappingsJson = ReadMappingFile(filename);
using var httpClient = server.CreateClient();
diff --git a/test/WireMock.Net.Tests/Grpc/policy.proto b/test/WireMock.Net.Tests/Grpc/policy.proto
index 57551fda..4b7fb322 100644
--- a/test/WireMock.Net.Tests/Grpc/policy.proto
+++ b/test/WireMock.Net.Tests/Grpc/policy.proto
@@ -1,6 +1,6 @@
syntax = "proto3";
-option csharp_namespace = "NarrowIntegrationTest.Lookup";
+option csharp_namespace = "ExampleIntegrationTest.Lookup";
import "google/protobuf/timestamp.proto";
@@ -24,17 +24,8 @@ message Client {
string CorrelationId = 1;
enum Clients {
Unknown = 0;
- QMS = 1;
- BillingCenter = 2;
- PAS = 3;
- Payroll = 4;
- Portal = 5;
- SFO = 6;
- QuoteAndBind = 7;
- LegacyConversion = 8;
- BindNow = 9;
- PaymentPortal = 10 ;
- PricingEngine = 11;
+ Other = 1;
+ Test = 2;
}
Clients ClientName = 2;
}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/Testcontainers/TestcontainersTests.Grpc.cs b/test/WireMock.Net.Tests/Testcontainers/TestcontainersTests.Grpc.cs
new file mode 100644
index 00000000..365ccc58
--- /dev/null
+++ b/test/WireMock.Net.Tests/Testcontainers/TestcontainersTests.Grpc.cs
@@ -0,0 +1,186 @@
+// Copyright © WireMock.Net
+
+#if NET6_0_OR_GREATER
+using System;
+using System.IO;
+using System.Linq;
+using System.Net.Http;
+using System.Text;
+using System.Threading.Tasks;
+using FluentAssertions;
+using FluentAssertions.Execution;
+using Greet;
+using Grpc.Net.Client;
+using WireMock.Constants;
+using WireMock.Net.Testcontainers;
+using Xunit;
+
+namespace WireMock.Net.Tests.Testcontainers;
+
+public partial class TestcontainersTests
+{
+ [Fact]
+ public async Task WireMockContainer_Build_Grpc_TestPortsAndUrls1()
+ {
+ // Act
+ var adminUsername = $"username_{Guid.NewGuid()}";
+ var adminPassword = $"password_{Guid.NewGuid()}";
+ var wireMockContainer = new WireMockContainerBuilder()
+ .WithAutoRemove(true)
+ .WithCleanUp(true)
+ .WithAdminUserNameAndPassword(adminUsername, adminPassword)
+ .WithCommand("--UseHttp2")
+ .WithCommand("--Urls", "http://*:80 grpc://*:9090")
+ .WithPortBinding(9090, true)
+ .Build();
+
+ try
+ {
+ await wireMockContainer.StartAsync().ConfigureAwait(false);
+
+ // Assert
+ using (new AssertionScope())
+ {
+ var logs = await wireMockContainer.GetLogsAsync(DateTime.MinValue);
+ logs.Should().NotBeNull();
+
+ var url = wireMockContainer.GetPublicUrl();
+ url.Should().NotBeNullOrWhiteSpace();
+
+ var urls = wireMockContainer.GetPublicUrls();
+ urls.Should().HaveCount(2);
+
+ var httpPort = wireMockContainer.GetMappedPublicPort(80);
+ httpPort.Should().BeGreaterThan(0);
+
+ var httpUrl = wireMockContainer.GetMappedPublicUrl(80);
+ httpUrl.Should().StartWith("http://");
+
+ var grpcPort = wireMockContainer.GetMappedPublicPort(9090);
+ grpcPort.Should().BeGreaterThan(0);
+
+ var grpcUrl = wireMockContainer.GetMappedPublicUrl(80);
+ grpcUrl.Should().StartWith("http://");
+
+ var adminClient = wireMockContainer.CreateWireMockAdminClient();
+
+ var settings = await adminClient.GetSettingsAsync();
+ settings.Should().NotBeNull();
+ }
+ }
+ finally
+ {
+ await wireMockContainer.StopAsync();
+ }
+ }
+
+ [Fact]
+ public async Task WireMockContainer_Build_Grpc_TestPortsAndUrls2()
+ {
+ // Act
+ var adminUsername = $"username_{Guid.NewGuid()}";
+ var adminPassword = $"password_{Guid.NewGuid()}";
+ var wireMockContainer = new WireMockContainerBuilder()
+ .WithAutoRemove(true)
+ .WithCleanUp(true)
+ .WithAdminUserNameAndPassword(adminUsername, adminPassword)
+ .AddUrl("http://*:8080")
+ .AddUrl("grpc://*:9090")
+ .AddUrl("grpc://*:9091")
+ .Build();
+
+ try
+ {
+ await wireMockContainer.StartAsync().ConfigureAwait(false);
+
+ // Assert
+ using (new AssertionScope())
+ {
+ var logs = await wireMockContainer.GetLogsAsync(DateTime.MinValue);
+ logs.Should().NotBeNull();
+
+ var url = wireMockContainer.GetPublicUrl();
+ url.Should().NotBeNullOrWhiteSpace();
+
+ var urls = wireMockContainer.GetPublicUrls();
+ urls.Should().HaveCount(4);
+
+ foreach (var internalPort in new[] { 80, 8080, 9090, 9091 })
+ {
+ var publicPort = wireMockContainer.GetMappedPublicPort(internalPort);
+ publicPort.Should().BeGreaterThan(0);
+
+ var publicUrl = wireMockContainer.GetMappedPublicUrl(internalPort);
+ publicUrl.Should().StartWith("http://");
+ }
+
+ var adminClient = wireMockContainer.CreateWireMockAdminClient();
+
+ var settings = await adminClient.GetSettingsAsync();
+ settings.Should().NotBeNull();
+ }
+ }
+ finally
+ {
+ await wireMockContainer.StopAsync();
+ }
+ }
+
+ [Fact]
+ public async Task WireMockContainer_Build_Grpc_ProtoDefinitionFromJson_UsingGrpcGeneratedClient()
+ {
+ var wireMockContainer = await Given_WireMockContainerIsStartedForHttpAndGrpc();
+
+ await Given_ProtoBufMappingIsAddedViaAdminInterfaceAsync(wireMockContainer);
+
+ var reply = await When_GrpcClient_Calls_SayHelloAsync(wireMockContainer);
+
+ Then_ReplyMessage_Should_BeCorrect(reply);
+
+ await wireMockContainer.StopAsync();
+ }
+
+ private static async Task Given_WireMockContainerIsStartedForHttpAndGrpc()
+ {
+ var wireMockContainer = new WireMockContainerBuilder()
+ .WithAutoRemove(true)
+ .WithCleanUp(true)
+ .AddUrl("grpc://*:9090")
+ .Build();
+
+ await wireMockContainer.StartAsync();
+
+ return wireMockContainer;
+ }
+
+ private static async Task Given_ProtoBufMappingIsAddedViaAdminInterfaceAsync(WireMockContainer wireMockContainer)
+ {
+ var mappingsJson = ReadMappingFile("protobuf-mapping-1.json");
+
+ using var httpClient = wireMockContainer.CreateClient();
+
+ var result = await httpClient.PostAsync("/__admin/mappings", new StringContent(mappingsJson, Encoding.UTF8, WireMockConstants.ContentTypeJson));
+ result.EnsureSuccessStatusCode();
+ }
+
+ private static async Task When_GrpcClient_Calls_SayHelloAsync(WireMockContainer wireMockContainer)
+ {
+ var address = wireMockContainer.GetPublicUrls()[9090];
+ var channel = GrpcChannel.ForAddress(address);
+
+ var client = new Greeter.GreeterClient(channel);
+
+ return await client.SayHelloAsync(new HelloRequest { Name = "stef" });
+ }
+
+ private static void Then_ReplyMessage_Should_BeCorrect(HelloReply reply)
+ {
+ reply.Message.Should().Be("hello stef POST");
+ }
+
+ private static string ReadMappingFile(string filename)
+ {
+ return File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "__admin", "mappings", filename));
+ }
+}
+#endif
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/Testcontainers/TestcontainersTests.cs b/test/WireMock.Net.Tests/Testcontainers/TestcontainersTests.cs
index 1b0f1bc1..2a219dc9 100644
--- a/test/WireMock.Net.Tests/Testcontainers/TestcontainersTests.cs
+++ b/test/WireMock.Net.Tests/Testcontainers/TestcontainersTests.cs
@@ -8,15 +8,16 @@
using FluentAssertions;
using FluentAssertions.Execution;
using WireMock.Net.Testcontainers;
+using WireMock.Net.Testcontainers.Utils;
using WireMock.Net.Tests.Facts;
using Xunit;
namespace WireMock.Net.Tests.Testcontainers;
-public class TestcontainersTests
+public partial class TestcontainersTests
{
[Fact]
- public async Task WireMockContainer_Build_WithNoImage_And_StartAsync_and_StopAsync()
+ public async Task WireMockContainer_Build_And_StartAsync_and_StopAsync()
{
// Act
var adminUsername = $"username_{Guid.NewGuid()}";
@@ -32,7 +33,7 @@ public async Task WireMockContainer_Build_WithNoImage_And_StartAsync_and_StopAsy
// https://github.com/testcontainers/testcontainers-dotnet/issues/1322
[RunOnDockerPlatformFact("Linux")]
- public async Task WireMockContainer_Build_WithNoImageAndNetwork_And_StartAsync_and_StopAsync()
+ public async Task WireMockContainer_Build_WithNetwork_And_StartAsync_and_StopAsync()
{
// Act
var dummyNetwork = new NetworkBuilder()
@@ -61,7 +62,8 @@ public async Task WireMockContainer_Build_WithImage_And_StartAsync_and_StopAsync
.WithCleanUp(true)
.WithAdminUserNameAndPassword(adminUsername, adminPassword);
- if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+ var imageOS = await TestcontainersUtils.GetImageOSAsync.Value;
+ if (imageOS == OSPlatform.Windows)
{
wireMockContainerBuilder = wireMockContainerBuilder.WithWindowsImage();
}
@@ -86,7 +88,8 @@ public async Task WireMockContainer_Build_WithImageAsText_And_StartAsync_and_Sto
.WithCleanUp(true)
.WithAdminUserNameAndPassword(adminUsername, adminPassword);
- if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+ var imageOS = await TestcontainersUtils.GetImageOSAsync.Value;
+ if (imageOS == OSPlatform.Windows)
{
wireMockContainerBuilder = wireMockContainerBuilder.WithImage("sheyenrath/wiremock.net-windows");
}
diff --git a/test/WireMock.Net.Tests/__admin/mappings/protobuf-mapping-1.json b/test/WireMock.Net.Tests/__admin/mappings/protobuf-mapping-1.json
index b157ac61..8b3dcf93 100644
--- a/test/WireMock.Net.Tests/__admin/mappings/protobuf-mapping-1.json
+++ b/test/WireMock.Net.Tests/__admin/mappings/protobuf-mapping-1.json
@@ -32,7 +32,7 @@
},
"Response": {
"BodyAsJson": {
- "message": "hello {{request.BodyAsJson.name}}"
+ "message": "hello {{request.BodyAsJson.name}} {{request.method}}"
},
"UseTransformer": true,
"TransformerType": "Handlebars",