diff --git a/src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/WinHttpHandlerTest.cs b/src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/WinHttpHandlerTest.cs index 5ac9a78702cbab..f204e21536beef 100644 --- a/src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/WinHttpHandlerTest.cs +++ b/src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/WinHttpHandlerTest.cs @@ -80,7 +80,6 @@ public async Task GetAsync_RedirectResponseHasCookie_CookieSentToFinalUri( [OuterLoop] [Fact] - [OuterLoop] public async Task SendAsync_SlowServerAndCancel_ThrowsTaskCanceledException() { var handler = new WinHttpHandler(); @@ -97,19 +96,38 @@ public async Task SendAsync_SlowServerAndCancel_ThrowsTaskCanceledException() } } - [ActiveIssue("https://github.com/dotnet/runtime/issues/20675")] [OuterLoop] [Fact] - [OuterLoop] - public void SendAsync_SlowServerRespondsAfterDefaultReceiveTimeout_ThrowsHttpRequestException() + public async void SendAsync_SlowServerRespondsAfterDefaultReceiveTimeout_ThrowsHttpRequestException() { var handler = new WinHttpHandler(); using (var client = new HttpClient(handler)) { - Task t = client.GetAsync(SlowServer); + var triggerResponseWrite = new TaskCompletionSource(); + var triggerRequestWait = new TaskCompletionSource(); - AggregateException ag = Assert.Throws(() => t.Wait()); - Assert.IsType(ag.InnerException); + await LoopbackServer.CreateServerAsync(async (server, url) => + { + Task serverTask = server.AcceptConnectionAsync(async connection => + { + await connection.SendResponseAsync($"HTTP/1.1 200 OK\r\nContent-Length: 16000\r\n\r\n"); + + triggerRequestWait.SetResult(true); + await triggerResponseWrite.Task; + }); + + HttpRequestException ex = await Assert.ThrowsAsync(async () => + { + Task t = client.GetAsync(url); + await triggerRequestWait.Task; + var _ = await t; + }); + Assert.IsType(ex.InnerException); + Assert.NotNull(ex.InnerException.InnerException); + Assert.Contains("The operation timed out", ex.InnerException.InnerException.Message); + + triggerResponseWrite.SetResult(true); + }); } }