This commit is contained in:
Stef Heyenrath
2025-12-20 12:10:45 +01:00
3 changed files with 31 additions and 21 deletions

View File

@@ -32,11 +32,10 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="RamlToOpenApiConverter.SourceOnly" Version="0.9.0" />
<PackageReference Include="RamlToOpenApiConverter.SourceOnly" Version="0.11.0" />
<PackageReference Include="YamlDotNet" Version="16.3.0" />
<PackageReference Include="RandomDataGenerator.Net" Version="1.0.19.1" />
<PackageReference Include="Stef.Validation" Version="0.2.0" />
<PackageReference Include="RandomDataGenerator.Net" Version="1.0.19" />
<PackageReference Include="Stef.Validation" Version="0.1.1" />
</ItemGroup>
<ItemGroup Condition="'$(Configuration)' == 'Debug'">

View File

@@ -3,6 +3,7 @@
#if NET6_0_OR_GREATER
using System;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
@@ -12,6 +13,7 @@ using Greet;
using Grpc.Net.Client;
using WireMock.Constants;
using WireMock.Net.Testcontainers;
using WireMock.Util;
using Xunit;
namespace WireMock.Net.Tests.Testcontainers;
@@ -21,16 +23,19 @@ public partial class TestcontainersTests
[Fact]
public async Task WireMockContainer_Build_Grpc_TestPortsAndUrls1()
{
// Act
// Arrange
var adminUsername = $"username_{Guid.NewGuid()}";
var adminPassword = $"password_{Guid.NewGuid()}";
var port = PortUtils.FindFreeTcpPort();
// Act
var wireMockContainer = new WireMockContainerBuilder()
.WithAdminUserNameAndPassword(adminUsername, adminPassword)
.WithCommand("--UseHttp2")
.WithCommand("--Urls", "http://*:80 grpc://*:9090")
.WithPortBinding(9090, true)
.WithCommand("--Urls", $"http://*:80 grpc://*:{port}")
.WithPortBinding(port, true)
.Build();
try
{
await wireMockContainer.StartAsync();
@@ -53,10 +58,10 @@ public partial class TestcontainersTests
var httpUrl = wireMockContainer.GetMappedPublicUrl(80);
httpUrl.Should().StartWith("http://");
var grpcPort = wireMockContainer.GetMappedPublicPort(9090);
var grpcPort = wireMockContainer.GetMappedPublicPort(port);
grpcPort.Should().BeGreaterThan(0);
var grpcUrl = wireMockContainer.GetMappedPublicUrl(9090);
var grpcUrl = wireMockContainer.GetMappedPublicUrl(port);
grpcUrl.Should().StartWith("http://");
var adminClient = wireMockContainer.CreateWireMockAdminClient();
@@ -74,14 +79,17 @@ public partial class TestcontainersTests
[Fact]
public async Task WireMockContainer_Build_Grpc_TestPortsAndUrls2()
{
// Act
// Arrange
var adminUsername = $"username_{Guid.NewGuid()}";
var adminPassword = $"password_{Guid.NewGuid()}";
var ports = PortUtils.FindFreeTcpPorts(3);
// Act
var wireMockContainer = new WireMockContainerBuilder()
.WithAdminUserNameAndPassword(adminUsername, adminPassword)
.AddUrl("http://*:8080")
.AddUrl("grpc://*:9090")
.AddUrl("grpc://*:9091")
.AddUrl($"http://*:{ports[0]}")
.AddUrl($"grpc://*:{ports[1]}")
.AddUrl($"grpc://*:{ports[2]}")
.Build();
try
@@ -100,7 +108,7 @@ public partial class TestcontainersTests
var urls = wireMockContainer.GetPublicUrls();
urls.Should().HaveCount(4);
foreach (var internalPort in new[] { 80, 8080, 9090, 9091 })
foreach (var internalPort in new[] { ports[0], ports[1], ports[2], 80 })
{
var publicPort = wireMockContainer.GetMappedPublicPort(internalPort);
publicPort.Should().BeGreaterThan(0);
@@ -163,8 +171,9 @@ public partial class TestcontainersTests
private static async Task<WireMockContainer> Given_WireMockContainerIsStartedForHttpAndGrpcAsync()
{
var port = PortUtils.FindFreeTcpPort();
var wireMockContainer = new WireMockContainerBuilder()
.AddUrl("grpc://*:9090")
.AddUrl($"grpc://*:{port}")
.Build();
await wireMockContainer.StartAsync();
@@ -174,8 +183,9 @@ public partial class TestcontainersTests
private static async Task<WireMockContainer> Given_WireMockContainerWithProtoDefinitionAtServerLevelIsStartedForHttpAndGrpcAsync()
{
var port = PortUtils.FindFreeTcpPort();
var wireMockContainer = new WireMockContainerBuilder()
.AddUrl("grpc://*:9090")
.AddUrl($"grpc://*:{port}")
.AddProtoDefinition("my-greeter", ReadFile("greet.proto"))
.Build();
@@ -186,8 +196,9 @@ public partial class TestcontainersTests
private static async Task<WireMockContainer> Given_WireMockContainerWithProtoDefinitionAtServerLevelWithWatchStaticMappingsIsStartedForHttpAndGrpcAsync()
{
var port = PortUtils.FindFreeTcpPort();
var wireMockContainer = new WireMockContainerBuilder()
.AddUrl("grpc://*:9090")
.AddUrl($"grpc://*:{port}")
.AddProtoDefinition("my-greeter", ReadFile("greet.proto"))
.WithMappings(Path.Combine(Directory.GetCurrentDirectory(), "__admin", "mappings"))
.Build();
@@ -206,12 +217,12 @@ public partial class TestcontainersTests
var result = await httpClient.PostAsync("/__admin/mappings", new StringContent(mappingsJson, Encoding.UTF8, WireMockConstants.ContentTypeJson));
result.EnsureSuccessStatusCode();
await Task.Delay(1000);
await Task.Delay(5000);
}
private static async Task<HelloReply> When_GrpcClient_Calls_SayHelloAsync(WireMockContainer wireMockContainer)
{
var address = wireMockContainer.GetPublicUrls()[9090];
var address = wireMockContainer.GetPublicUrls().First(x => x.Key != 80).Value;
var channel = GrpcChannel.ForAddress(address);
var client = new Greeter.GreeterClient(channel);

View File

@@ -235,7 +235,7 @@ public partial class WireMockServerTests
}
#if NET8_0_OR_GREATER
[IgnoreOnContinuousIntegrationFact]
[Fact(Skip = "Does not work on local and pipeline")]
public async Task WireMockServer_WithUrl0000_Should_Listen_On_All_IPs_IPv6()
{
// Arrange