From 6f7d2c83f5b74dd8faa60a021c0c8173e3ab59e4 Mon Sep 17 00:00:00 2001 From: Ben Arnold Date: Sun, 21 Mar 2021 08:12:19 +0000 Subject: [PATCH] Remove an approximate two second delay in response to the first request from a new socket connection, only occuring on some Windows 10 machines. (#597) A side-effect of this fix is that is also allows connections to IPv6 addresses. --- .../Owin/AspNetCoreSelfHost.NETStandard.cs | 4 +- src/WireMock.Net/Owin/AspNetCoreSelfHost.cs | 2 +- .../WireMock.Net.Tests/WireMockServerTests.cs | 46 +++++++++++++++++++ 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/src/WireMock.Net/Owin/AspNetCoreSelfHost.NETStandard.cs b/src/WireMock.Net/Owin/AspNetCoreSelfHost.NETStandard.cs index aefc35e5..22653f8c 100644 --- a/src/WireMock.Net/Owin/AspNetCoreSelfHost.NETStandard.cs +++ b/src/WireMock.Net/Owin/AspNetCoreSelfHost.NETStandard.cs @@ -24,7 +24,7 @@ namespace WireMock.Owin { if (urlDetail.IsHttps) { - kestrelOptions.Listen(System.Net.IPAddress.Any, urlDetail.Port, listenOptions => + kestrelOptions.ListenAnyIP(urlDetail.Port, listenOptions => { if (wireMockMiddlewareOptions.CustomCertificateDefined) { @@ -45,7 +45,7 @@ namespace WireMock.Owin } else { - kestrelOptions.Listen(System.Net.IPAddress.Any, urlDetail.Port); + kestrelOptions.ListenAnyIP(urlDetail.Port); } } } diff --git a/src/WireMock.Net/Owin/AspNetCoreSelfHost.cs b/src/WireMock.Net/Owin/AspNetCoreSelfHost.cs index 1fe2e9a7..29bf4ba8 100644 --- a/src/WireMock.Net/Owin/AspNetCoreSelfHost.cs +++ b/src/WireMock.Net/Owin/AspNetCoreSelfHost.cs @@ -106,7 +106,7 @@ namespace WireMock.Owin foreach (string address in addresses) { - Urls.Add(address.Replace("0.0.0.0", "localhost")); + Urls.Add(address.Replace("0.0.0.0", "localhost").Replace("[::]", "localhost")); PortUtils.TryExtract(address, out bool isHttps, out string protocol, out string host, out int port); Ports.Add(port); diff --git a/test/WireMock.Net.Tests/WireMockServerTests.cs b/test/WireMock.Net.Tests/WireMockServerTests.cs index bc35f3b3..5cb939b8 100644 --- a/test/WireMock.Net.Tests/WireMockServerTests.cs +++ b/test/WireMock.Net.Tests/WireMockServerTests.cs @@ -305,5 +305,51 @@ namespace WireMock.Net.Tests server.Stop(); } + +#if !NET452 + [Fact] + public async Task WireMockServer_Should_respond_to_ipv4_loopback() + { + // Assign + var server = WireMockServer.Start(); + + server + .Given(Request.Create() + .WithPath("/*")) + .RespondWith(Response.Create() + .WithStatusCode(200) + .WithBody("from ipv4 loopback")); + + // Act + var response = await new HttpClient().GetStringAsync($"http://127.0.0.1:{server.Ports[0]}/foo"); + + // Assert + Check.That(response).IsEqualTo("from ipv4 loopback"); + + server.Stop(); + } + + [Fact] + public async Task WireMockServer_Should_respond_to_ipv6_loopback() + { + // Assign + var server = WireMockServer.Start(); + + server + .Given(Request.Create() + .WithPath("/*")) + .RespondWith(Response.Create() + .WithStatusCode(200) + .WithBody("from ipv6 loopback")); + + // Act + var response = await new HttpClient().GetStringAsync($"http://[::1]:{server.Ports[0]}/foo"); + + // Assert + Check.That(response).IsEqualTo("from ipv6 loopback"); + + server.Stop(); + } +#endif } } \ No newline at end of file