diff --git a/src/WireMock.Net.OpenApiParser/WireMock.Net.OpenApiParser.csproj b/src/WireMock.Net.OpenApiParser/WireMock.Net.OpenApiParser.csproj index b12b1b28..1ccb486b 100644 --- a/src/WireMock.Net.OpenApiParser/WireMock.Net.OpenApiParser.csproj +++ b/src/WireMock.Net.OpenApiParser/WireMock.Net.OpenApiParser.csproj @@ -32,11 +32,10 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - + - - + + diff --git a/test/WireMock.Net.Tests/Testcontainers/TestcontainersTests.Grpc.cs b/test/WireMock.Net.Tests/Testcontainers/TestcontainersTests.Grpc.cs index 6ecc4f4c..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,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 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); diff --git a/test/WireMock.Net.Tests/WireMockServerTests.cs b/test/WireMock.Net.Tests/WireMockServerTests.cs index 6d8cbed1..f41d653e 100644 --- a/test/WireMock.Net.Tests/WireMockServerTests.cs +++ b/test/WireMock.Net.Tests/WireMockServerTests.cs @@ -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