Example #1
0
        public async Task Run(CancellationToken cancellationToken)
        {
            var router = new RoutingMessageHandler();

            // Build Proxy TestServer
            var proxyWebHostBuilder = new WebHostBuilder()
                                      .UseStartup <ProxyStartup>()
                                      .ConfigureServices(services =>
            {
                // configure proxy to forward requests to the router
                services.AddSingleton <Func <HttpMessageHandler> >(() => router);
            })
                                      .UseUrls("http://localhost:5000");
            var proxyTestServer = new TestServer(proxyWebHostBuilder);

            router.AddHandler("localhost", 5000, proxyTestServer.CreateHandler());

            // Build Host1 TestServer
            var host1WebHostBuilder = new WebHostBuilder()
                                      .UseStartup <Program.HostStartup>()
                                      .UseSetting("hostname", "HOST 1")
                                      .UseUrls("http://localhost:5001");
            var host1TestServer = new TestServer(host1WebHostBuilder);

            router.AddHandler("localhost", 5001, host1TestServer.CreateHandler());

            // Build Host2 TestServer
            var host2WebHostBuilder = new WebHostBuilder()
                                      .UseStartup <Program.HostStartup>()
                                      .UseSetting("hostname", "HOST 2")
                                      .UseUrls("http://localhost:5002");
            var host2TestServer = new TestServer(host2WebHostBuilder);

            router.AddHandler("localhost", 5002, host2TestServer.CreateHandler());

            // Get HttpClient make a request to the proxy

            var httpClient = new HttpClient(router);
            var response   = await httpClient.GetAsync("http://localhost:5000/", cancellationToken);
        }
Example #2
0
        public async Task Body_for_post_is_not_lost()
        {
            var router = new RoutingMessageHandler();

            var upstreamHost = new WebHostBuilder()
                               .Configure(
                app => app.Use((c, n) =>
            {
                c.Response.StatusCode = c.Request.ContentLength > 0 || c.Request.Body.CanRead
                            ? 200
                            : 400;
                return(Task.CompletedTask);
            }));


            var proxyHost = new WebHostBuilder()
                            .ConfigureServices(s =>
                                               s.AddProxy(c =>
                                                          c.ConfigurePrimaryHttpMessageHandler(() => router)))
                            .Configure(
                app => app.RunProxy(
                    ctx =>
                    ctx.ForwardTo(new UpstreamHost("http://upstream")).Send()));

            using (var proxyServer = new TestServer(proxyHost))
            {
                using (var upstreamServer = new TestServer(upstreamHost))
                {
                    router.AddHandler(new Origin("upstream", 80), upstreamServer.CreateHandler());

                    var client = proxyServer.CreateClient();

                    var content = new StringContent("henk", Encoding.UTF8, "text/plain");
                    var result  = await client.PostAsync("/post", content);

                    result.StatusCode.ShouldBe(HttpStatusCode.OK);
                }
            }
        }
        public override Task InitializeAsync()
        {
            var router = new RoutingMessageHandler();

            _upstreamTestServer = new TestServer(UpstreamBuilder);
            _proxyPort          = 81;

            var proxyBuilder = ProxyBuilder
                               .UseSetting("port", _proxyPort.ToString())
                               .ConfigureTestServices(services =>
            {
                services.AddProxy(c =>
                {
                    c.ConfigurePrimaryHttpMessageHandler(() => router);
                    c.ConfigureHttpClient(client => client.Timeout = TimeSpan.FromSeconds(1));
                });
            });

            _proxyTestServer = new TestServer(proxyBuilder);

            router.AddHandler(new Origin("localhost", _proxyPort), _upstreamTestServer.CreateHandler());

            return(Task.CompletedTask);
        }