From a5e75a7278f1b7c8682a9183f71af4fee1057d6a Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sat, 20 Dec 2025 12:08:41 +0100 Subject: [PATCH] Fix Grpc tests (#1401) * Fix some Grpc tests * await Task.Delay(1000); * ports --- .../TestcontainersTests.Grpc.cs | 47 ++++++++++++------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/test/WireMock.Net.Tests/Testcontainers/TestcontainersTests.Grpc.cs b/test/WireMock.Net.Tests/Testcontainers/TestcontainersTests.Grpc.cs index f27843ce..9bff12f3 100644 --- a/test/WireMock.Net.Tests/Testcontainers/TestcontainersTests.Grpc.cs +++ b/test/WireMock.Net.Tests/Testcontainers/TestcontainersTests.Grpc.cs @@ -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,19 +23,22 @@ 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().ConfigureAwait(false); + await wireMockContainer.StartAsync(); // Assert using (new AssertionScope()) @@ -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,19 +79,22 @@ 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 { - await wireMockContainer.StartAsync().ConfigureAwait(false); + await wireMockContainer.StartAsync(); // Assert using (new AssertionScope()) @@ -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 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 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 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 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);