public ICollection <HostUrlDetails> GetDetails() { var list = new List <HostUrlDetails>(); if (Urls == null) { int port = Port > 0 ? Port.Value : FindFreeTcpPort(); string protocol = UseSSL ? "https" : "http"; list.Add(new HostUrlDetails { IsHttps = UseSSL, Url = $"{protocol}://{LOCALHOST}:{port}", Protocol = protocol, Host = LOCALHOST, Port = port }); } else { foreach (string url in Urls) { PortUtils.TryExtract(url, out bool isHttps, out string protocol, out string host, out int port); list.Add(new HostUrlDetails { IsHttps = isHttps, Url = url, Protocol = protocol, Host = host, Port = port }); } } return(list); }
private Task RunHost(CancellationToken token) { try { var appLifetime = (IApplicationLifetime)_host.Services.GetService(typeof(IApplicationLifetime)); appLifetime.ApplicationStarted.Register(() => { var addresses = _host.ServerFeatures .Get <Microsoft.AspNetCore.Hosting.Server.Features.IServerAddressesFeature>() .Addresses; foreach (string address in addresses) { 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); } IsStarted = true; }); #if NETSTANDARD1_3 _logger.Info("WireMock.Net server using netstandard1.3"); #elif NETSTANDARD2_0 _logger.Info("WireMock.Net server using netstandard2.0"); #elif NETSTANDARD2_1 _logger.Info("WireMock.Net server using netstandard2.1"); #elif NETCOREAPP3_1 _logger.Info("WireMock.Net server using .NET Core 3.1"); #elif NET5_0 _logger.Info("WireMock.Net server using .NET 5.0"); #elif NET46 _logger.Info("WireMock.Net server using .NET Framework 4.6.1 or higher"); #endif #if NETSTANDARD1_3 return(Task.Run(() => { _host.Run(token); })); #else return(_host.RunAsync(token)); #endif } catch (Exception e) { _runningException = e; _logger.Error(e.ToString()); IsStarted = false; return(Task.CompletedTask); } }
public Task StartAsync() { _host = new WebHostBuilder() .ConfigureServices(services => { services.AddSingleton(_options.FileSystemHandler); services.AddSingleton(_options); services.AddSingleton <IMappingMatcher, MappingMatcher>(); services.AddSingleton <IOwinRequestMapper, OwinRequestMapper>(); services.AddSingleton <IOwinResponseMapper, OwinResponseMapper>(); }) .Configure(appBuilder => { appBuilder.UseMiddleware <GlobalExceptionMiddleware>(); _options.PreWireMockMiddlewareInit?.Invoke(appBuilder); appBuilder.UseMiddleware <WireMockMiddleware>(); _options.PostWireMockMiddlewareInit?.Invoke(appBuilder); }) .UseKestrel(options => { #if NETSTANDARD1_3 if (_urls.Any(u => u.StartsWith("https://", StringComparison.OrdinalIgnoreCase))) { options.UseHttps(PublicCertificateHelper.GetX509Certificate2()); } #else // https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x foreach (string url in _urls.Where(u => u.StartsWith("http://", StringComparison.OrdinalIgnoreCase))) { PortUtils.TryExtract(url, out string protocol, out string host, out int port); options.Listen(System.Net.IPAddress.Any, port); } foreach (string url in _urls.Where(u => u.StartsWith("https://", StringComparison.OrdinalIgnoreCase))) { PortUtils.TryExtract(url, out string protocol, out string host, out int port); options.Listen(System.Net.IPAddress.Any, port, listenOptions => { listenOptions.UseHttps(PublicCertificateHelper.GetX509Certificate2()); }); } #endif }) #if NETSTANDARD1_3 .UseUrls(_urls) #endif .Build(); return(RunHost(_cts.Token)); }
public void PortUtils_TryExtract_Https0_0_0_0_Returns_True() { // Assign string url = "https://0.0.0.0:5000"; // Act bool result = PortUtils.TryExtract(url, out bool isHttps, out string proto, out string host, out int port); // Assert Check.That(result).IsTrue(); Check.That(proto).IsEqualTo("https"); Check.That(host).IsEqualTo("0.0.0.0"); Check.That(port).IsEqualTo(5000); }
public void PortUtils_TryExtract_InvalidUrl_Returns_False() { // Assign string url = "test"; // Act bool result = PortUtils.TryExtract(url, out string proto, out string host, out int port); // Assert Check.That(result).IsFalse(); Check.That(proto).IsNull(); Check.That(host).IsNull(); Check.That(port).IsEqualTo(default(int)); }
public void PortUtils_TryExtract_ValidUrl1_Returns_True() { // Assign string url = "https://wiremock.net:5000"; // Act bool result = PortUtils.TryExtract(url, out string proto, out string host, out int port); // Assert Check.That(result).IsTrue(); Check.That(proto).IsEqualTo("https"); Check.That(host).IsEqualTo("wiremock.net"); Check.That(port).IsEqualTo(5000); }
public void PortUtils_TryExtract_Https_Returns_True() { // Assign string url = "https://wiremock.net:5000"; // Act bool result = PortUtils.TryExtract(url, out bool isHttps, out string proto, out string host, out int port); // Assert result.Should().BeTrue(); isHttps.Should().BeTrue(); proto.Should().Be("https"); host.Should().Be("wiremock.net"); port.Should().Be(5000); }
public void PortUtils_TryExtract_UrlIsMissingPort_Returns_False() { // Assign string url = "http://0.0.0.0"; // Act bool result = PortUtils.TryExtract(url, out bool isHttps, out string proto, out string host, out int port); // Assert result.Should().BeFalse(); isHttps.Should().BeFalse(); proto.Should().BeNull(); host.Should().BeNull(); port.Should().Be(default(int)); }
public OwinSelfHost([NotNull] IWireMockMiddlewareOptions options, [NotNull] params string[] uriPrefixes) { Check.NotNull(options, nameof(options)); Check.NotNullOrEmpty(uriPrefixes, nameof(uriPrefixes)); _logger = options.Logger ?? new WireMockConsoleLogger(); foreach (string uriPrefix in uriPrefixes) { Urls.Add(uriPrefix); PortUtils.TryExtract(uriPrefix, out string protocol, out string host, out int port); Ports.Add(port); } _options = options; }
public ICollection <(string Url, int Port)> GetDetails() { var list = new List <(string Url, int Port)>(); if (Urls == null) { int port = Port ?? FindFreeTcpPort(); list.Add(($"{(UseSSL ? "https" : "http")}://localhost:{port}", port)); } else { foreach (string url in Urls) { PortUtils.TryExtract(url, out string protocol, out string host, out int port); list.Add((url, port)); } } return(list); }
public Task StartAsync() { var builder = new WebHostBuilder(); // Workaround for https://github.com/WireMock-Net/WireMock.Net/issues/292 // On some platforms, AppContext.BaseDirectory is null, which causes WebHostBuilder to fail if ContentRoot is not // specified (even though we don't actually use that base path mechanism, since we have our own way of configuring // a filesystem handler). if (string.IsNullOrEmpty(AppContext.BaseDirectory)) { builder.UseContentRoot(System.IO.Directory.GetCurrentDirectory()); } _host = builder .ConfigureServices(services => { services.AddSingleton(_options.FileSystemHandler); services.AddSingleton(_options); services.AddSingleton <IMappingMatcher, MappingMatcher>(); services.AddSingleton <IOwinRequestMapper, OwinRequestMapper>(); services.AddSingleton <IOwinResponseMapper, OwinResponseMapper>(); }) .Configure(appBuilder => { appBuilder.UseMiddleware <GlobalExceptionMiddleware>(); _options.PreWireMockMiddlewareInit?.Invoke(appBuilder); appBuilder.UseMiddleware <WireMockMiddleware>(); _options.PostWireMockMiddlewareInit?.Invoke(appBuilder); }) .UseKestrel(options => { #if NETSTANDARD1_3 if (_urls.Any(u => u.StartsWith("https://", StringComparison.OrdinalIgnoreCase))) { options.UseHttps(PublicCertificateHelper.GetX509Certificate2()); } #else // https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x foreach (string url in _urls.Where(u => u.StartsWith("http://", StringComparison.OrdinalIgnoreCase))) { PortUtils.TryExtract(url, out string protocol, out string host, out int port); options.Listen(System.Net.IPAddress.Any, port); } foreach (string url in _urls.Where(u => u.StartsWith("https://", StringComparison.OrdinalIgnoreCase))) { PortUtils.TryExtract(url, out string protocol, out string host, out int port); options.Listen(System.Net.IPAddress.Any, port, listenOptions => { listenOptions.UseHttps(); // PublicCertificateHelper.GetX509Certificate2() }); } #endif }) #if NETSTANDARD1_3 .UseUrls(_urls) #endif .Build(); return(RunHost(_cts.Token)); }