diff --git a/src/Servers/Kestrel/test/InMemory.FunctionalTests/KestrelMetricsTests.cs b/src/Servers/Kestrel/test/InMemory.FunctionalTests/KestrelMetricsTests.cs index c1b3fde0f65f..311996794b20 100644 --- a/src/Servers/Kestrel/test/InMemory.FunctionalTests/KestrelMetricsTests.cs +++ b/src/Servers/Kestrel/test/InMemory.FunctionalTests/KestrelMetricsTests.cs @@ -391,6 +391,7 @@ await connection.ReceiveEnd( } [Fact] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/58086")] public async Task Http1Connection_ServerAbort_HasErrorType() { var testMeterFactory = new TestMeterFactory(); @@ -399,17 +400,25 @@ public async Task Http1Connection_ServerAbort_HasErrorType() var serviceContext = new TestServiceContext(LoggerFactory, metrics: new KestrelMetrics(testMeterFactory)); var sendString = "POST / HTTP/1.0\r\nContent-Length: 12\r\n\r\nHello World?"; + var finishedSendingTcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - await using var server = new TestServer(c => + await using var server = new TestServer(async c => { + await c.Request.Body.ReadUntilEndAsync(); + + // An extra check to ensure that client is done sending before the server aborts. + // This might not be necessary since we're reading to the end of the request body, but it doesn't hurt. + await finishedSendingTcs.Task; + c.Abort(); - return Task.CompletedTask; }, serviceContext); using (var connection = server.CreateConnection()) { await connection.Send(sendString).DefaultTimeout(); + finishedSendingTcs.SetResult(); + await connection.ReceiveEnd().DefaultTimeout(); await connection.WaitForConnectionClose().DefaultTimeout();