Ejemplo n.º 1
0
        public async Task AltSvc_Header_Upgrade_Success(Version fromVersion)
        {
            // The test makes a request to a HTTP/1 or HTTP/2 server first, which supplies an Alt-Svc header pointing to the second server.
            using GenericLoopbackServer firstServer =
                      fromVersion.Major switch
                  {
                      1 => new LoopbackServer(new LoopbackServer.Options { UseSsl = true }),
                      2 => Http2LoopbackServer.CreateServer(),
                      _ => throw new Exception("Unknown HTTP version.")
                  };

            // The second request is expected to come in on this HTTP/3 server.
            using var secondServer = new Http3LoopbackServer();

            using HttpClient client = CreateHttpClient();

            Task <HttpResponseMessage> firstResponseTask = client.GetAsync(firstServer.Address);
            Task serverTask = firstServer.AcceptConnectionSendResponseAndCloseAsync(additionalHeaders: new[]
            {
                new HttpHeaderData("Alt-Svc", $"h3=\"{secondServer.Address.IdnHost}:{secondServer.Address.Port}\"")
            });

            await new[] { firstResponseTask, serverTask }.WhenAllOrAnyFailed(30_000);

            using HttpResponseMessage firstResponse = firstResponseTask.Result;
            Assert.True(firstResponse.IsSuccessStatusCode);

            await AltSvc_Upgrade_Success(firstServer, secondServer, client);
        }
        private async Task AltSvc_Upgrade_Success(GenericLoopbackServer firstServer, Http3LoopbackServer secondServer, HttpClient client)
        {
            Task <HttpResponseMessage> secondResponseTask = client.GetAsync(firstServer.Address);

            HttpRequestData secondRequest = await secondServer.AcceptConnectionSendResponseAndCloseAsync();

            string altUsed = secondRequest.GetSingleHeaderValue("Alt-Used");

            Assert.Equal($"{secondServer.Address.IdnHost}:{secondServer.Address.Port}", altUsed);

            HttpResponseMessage secondResponse = await secondResponseTask;

            Assert.True(secondResponse.IsSuccessStatusCode);
        }
Ejemplo n.º 3
0
        private async Task AltSvc_Upgrade_Success(GenericLoopbackServer firstServer, Http3LoopbackServer secondServer, HttpClient client)
        {
            Task <HttpResponseMessage> secondResponseTask = client.GetAsync(firstServer.Address);
            Task <HttpRequestData>     secondRequestTask  = secondServer.AcceptConnectionSendResponseAndCloseAsync();

            await new[] { (Task)secondResponseTask, secondRequestTask }.WhenAllOrAnyFailed(30_000);

            HttpRequestData secondRequest = secondRequestTask.Result;

            using HttpResponseMessage secondResponse = secondResponseTask.Result;

            string altUsed = secondRequest.GetSingleHeaderValue("Alt-Used");

            Assert.Equal($"{secondServer.Address.IdnHost}:{secondServer.Address.Port}", altUsed);
            Assert.True(secondResponse.IsSuccessStatusCode);
        }
        private async Task AltSvc_Header_Upgrade_Success(Version fromVersion)
        {
            using GenericLoopbackServer firstServer = GetFactoryForVersion(fromVersion).CreateServer();
            using Http3LoopbackServer secondServer  = new Http3LoopbackServer();
            using HttpClient client = CreateHttpClient(CreateHttpClientHandler(HttpVersion.Version30));

            Task <HttpResponseMessage> firstResponseTask = client.GetAsync(firstServer.Address);

            await firstServer.AcceptConnectionSendResponseAndCloseAsync(additionalHeaders : new[]
            {
                new HttpHeaderData("Alt-Svc", $"h3={secondServer.Address.IdnHost}:{secondServer.Address.Port}")
            });

            HttpResponseMessage firstResponse = await firstResponseTask;

            Assert.True(firstResponse.IsSuccessStatusCode);

            await AltSvc_Upgrade_Success(firstServer, secondServer, client);
        }
Ejemplo n.º 5
0
        public async Task AltSvc_Header_Upgrade_Success(Version fromVersion, bool overrideHost)
        {
            // [ActiveIssue("https://github.com/dotnet/runtime/issues/54050")]
            if (UseQuicImplementationProvider == QuicImplementationProviders.Mock)
            {
                return;
            }

            // The test makes a request to a HTTP/1 or HTTP/2 server first, which supplies an Alt-Svc header pointing to the second server.
            using GenericLoopbackServer firstServer =
                      fromVersion.Major switch
                  {
                      1 => Http11LoopbackServerFactory.Singleton.CreateServer(new LoopbackServer.Options { UseSsl = true }),
                      2 => Http2LoopbackServer.CreateServer(),
                      _ => throw new Exception("Unknown HTTP version.")
                  };

            // The second request is expected to come in on this HTTP/3 server.
            using Http3LoopbackServer secondServer = CreateHttp3LoopbackServer();

            if (!overrideHost)
            {
                Assert.Equal(firstServer.Address.IdnHost, secondServer.Address.IdnHost);
            }

            using HttpClient client = CreateHttpClient(fromVersion);

            Task <HttpResponseMessage> firstResponseTask = client.GetAsync(firstServer.Address);
            Task serverTask = firstServer.AcceptConnectionSendResponseAndCloseAsync(additionalHeaders: new[]
            {
                new HttpHeaderData("Alt-Svc", $"h3=\"{(overrideHost ? secondServer.Address.IdnHost : null)}:{secondServer.Address.Port}\"")
            });

            await new[] { firstResponseTask, serverTask }.WhenAllOrAnyFailed(30_000);

            using HttpResponseMessage firstResponse = firstResponseTask.Result;
            Assert.True(firstResponse.IsSuccessStatusCode);

            await AltSvc_Upgrade_Success(firstServer, secondServer, client);
        }