Exemple #1
0
        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);
            }
        }
Exemple #3
0
        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);
        }
Exemple #5
0
        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));
        }
Exemple #6
0
        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;
        }
Exemple #10
0
        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));
        }