Пример #1
0
        protected override Task ExecuteAsync(CancellationToken stoppingToken)
        {
            _webHost = CreateDefaultBuilder <Startup>(Array.Empty <string>())
                       .ConfigureServices(services =>
            {
                services.AddSingleton(_settings);
            })
                       .UseUrls("http://127.0.0.1:0")
                       .Build();

            _webHost.RunAsync(stoppingToken);

            _hostedServiceContext.WebApplication2Port = _webHost.GetServerPort();

            return(Task.CompletedTask);
        }
Пример #2
0
        public async Task ProxyHandler_ShouldReturnServiceUnavailableStatusWhenTargetServerIsDown()
        {
            using (IWebHost targetServer = CreateTargetServer(_okProxyContext))
            {
                await targetServer.StartAsync();

                int port = targetServer.GetServerPort();

                await targetServer.StopAsync();

                using (TestServer proxyServer = CreateProxyServer(port))
                {
                    HttpClient client = proxyServer.CreateClient();

                    HttpResponseMessage result = await client.GetAsync(ProxyStartup.MappedProxyUrl);

                    result.StatusCode.Should().Be(HttpStatusCode.ServiceUnavailable);
                }
            }
        }
Пример #3
0
        public async Task ProxyHandler_ShouldAddCorrelationIdIfNoneExists()
        {
            using (IWebHost targetServer = CreateTargetServer(_okProxyContext))
            {
                await targetServer.StartAsync();

                int port = targetServer.GetServerPort();

                using (TestServer proxyServer = CreateProxyServer(port))
                {
                    HttpClient client = proxyServer.CreateClient();

                    HttpResponseMessage result = await client.GetAsync(ProxyStartup.MappedProxyUrl);

                    var content = JsonConvert.DeserializeObject(await result.Content.ReadAsStringAsync(), typeof(ProxyResponse)) as ProxyResponse;

                    (content != null && content.RequestHeaders.ContainsKey(CorrelationIdExtensions.XCorrelationId)).Should().BeTrue();
                    content.RequestHeaders[CorrelationIdExtensions.XCorrelationId].Should().NotBeNullOrWhiteSpace();
                }
            }
        }
Пример #4
0
        public async Task ProxyHandler_OnReceivingSuccessResponse_ForwardsBack()
        {
            using (IWebHost targetServer = CreateTargetServer(_okProxyContext))
            {
                await targetServer.StartAsync();

                int port = targetServer.GetServerPort();

                using (TestServer proxyServer = CreateProxyServer(port))
                {
                    HttpClient client = proxyServer.CreateClient();

                    HttpResponseMessage result = await client.GetAsync(ProxyStartup.MappedProxyUrl);

                    var content = JsonConvert.DeserializeObject(await result.Content.ReadAsStringAsync(), typeof(ProxyResponse)) as ProxyResponse;

                    result.StatusCode.Should().Be(_okProxyContext.StatusCode);
                    content?.Content.Should().Be(_okProxyContext.Content);
                }
            }
        }
Пример #5
0
        public override async Task InitializeAsync()
        {
            _upstreamServer = UpstreamBuilder
                              .UseKestrel()
                              .UseUrls("http://*:0")
                              .Build();
            await _upstreamServer.StartAsync();

            var port = _upstreamServer.GetServerPort();

            _proxyServer = ProxyBuilder
                           .UseKestrel()
                           .UseUrls("http://*:0")
                           .UseSetting("port", port.ToString())
                           .ConfigureTestServices(services =>
            {
                services
                .AddProxy(httpClientBuilder => httpClientBuilder
                          .ConfigureHttpClient(client => client.Timeout = TimeSpan.FromSeconds(1)));
            })
                           .Build();

            await _proxyServer.StartAsync();
        }
Пример #6
0
        public async Task ProxyHandler_ShouldForwardCorrelationIdIfOneExists()
        {
            string correlationId = Guid.NewGuid().ToString();

            using (IWebHost targetServer = CreateTargetServer(_okProxyContext))
            {
                await targetServer.StartAsync();

                int port = targetServer.GetServerPort();

                using (TestServer proxyServer = CreateProxyServer(port))
                {
                    HttpClient client = proxyServer.CreateClient();
                    client.DefaultRequestHeaders.Add(CorrelationIdExtensions.XCorrelationId, correlationId);

                    HttpResponseMessage result = await client.GetAsync(ProxyStartup.MappedProxyUrl);

                    var content = JsonConvert.DeserializeObject(await result.Content.ReadAsStringAsync(), typeof(ProxyResponse)) as ProxyResponse;

                    content?.RequestHeaders.ContainsKey(CorrelationIdExtensions.XCorrelationId).Should().BeTrue();
                    content?.RequestHeaders[CorrelationIdExtensions.XCorrelationId].Should().Be(correlationId);
                }
            }
        }
Пример #7
0
        public async Task InitializeAsync()
        {
            await _proxy.StartAsync();

            _port = _proxy.GetServerPort();
        }