diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/ResponseTests.cs b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/ResponseTests.cs index 49bdc6e99c..21bd934ff8 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/ResponseTests.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/ResponseTests.cs @@ -590,14 +590,22 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests [Fact] public async Task WhenAppWritesLessThanContentLengthErrorLogged() { - var testLogger = new TestApplicationErrorLogger(); - var serviceContext = new TestServiceContext { Log = new TestKestrelTrace(testLogger) }; + string errorMessage = null; + var logTcs = new TaskCompletionSource(); + var mockTrace = new Mock(); + mockTrace + .Setup(trace => trace.ApplicationError(It.IsAny(), It.IsAny())) + .Callback((connectionId, ex) => + { + errorMessage = ex.Message; + logTcs.SetResult(null); + }); using (var server = new TestServer(async httpContext => { httpContext.Response.ContentLength = 13; await httpContext.Response.WriteAsync("hello, world"); - }, serviceContext)) + }, new TestServiceContext { Log = mockTrace.Object })) { using (var connection = server.CreateConnection()) { @@ -611,13 +619,15 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests "Content-Length: 13", "", "hello, world"); + + // Wait for error message to be logged. + await logTcs.Task.TimeoutAfter(TimeSpan.FromSeconds(10)); } } - var errorMessage = Assert.Single(testLogger.Messages, message => message.LogLevel == LogLevel.Error); Assert.Equal( $"Response Content-Length mismatch: too few bytes written (12 of 13).", - errorMessage.Exception.Message); + errorMessage); } [Fact] @@ -909,7 +919,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests "POST / HTTP/1.1", "Transfer-Encoding: chunked", "", - "wrong"); + "gg"); await responseWritten.WaitAsync(); await connection.ReceiveEnd( "HTTP/1.1 400 Bad Request", diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/EngineTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/EngineTests.cs index d5997be036..f6ea43495e 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/EngineTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/EngineTests.cs @@ -1249,12 +1249,14 @@ namespace Microsoft.AspNetCore.Server.KestrelTests const string response = "hello, world"; var callOrder = new Stack(); + var onStartingTcs = new TaskCompletionSource(); using (var server = new TestServer(async context => { context.Response.OnStarting(_ => { callOrder.Push(1); + onStartingTcs.SetResult(null); return TaskCache.CompletedTask; }, null); context.Response.OnStarting(_ => @@ -1280,7 +1282,8 @@ namespace Microsoft.AspNetCore.Server.KestrelTests "", "hello, world"); - + // Wait for all callbacks to be called. + await onStartingTcs.Task.TimeoutAfter(TimeSpan.FromSeconds(10)); } } @@ -1295,12 +1298,14 @@ namespace Microsoft.AspNetCore.Server.KestrelTests const string response = "hello, world"; var callOrder = new Stack(); + var onCompletedTcs = new TaskCompletionSource(); using (var server = new TestServer(async context => { context.Response.OnCompleted(_ => { callOrder.Push(1); + onCompletedTcs.SetResult(null); return TaskCache.CompletedTask; }, null); context.Response.OnCompleted(_ => @@ -1325,6 +1330,9 @@ namespace Microsoft.AspNetCore.Server.KestrelTests $"Content-Length: {response.Length}", "", "hello, world"); + + // Wait for all callbacks to be called. + await onCompletedTcs.Task.TimeoutAfter(TimeSpan.FromSeconds(10)); } }