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); }
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); }
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); }