From e493f73e81f75c01590ef45eeb6a8392b482279a Mon Sep 17 00:00:00 2001 From: Laszlo Deak Date: Tue, 6 Apr 2021 21:20:02 +0200 Subject: [PATCH 1/7] Replacing WithTimeout with WaitAsync --- .../TestHost/test/ClientHandlerTests.cs | 4 +- .../TestHost/test/HttpContextBuilderTests.cs | 8 +-- .../TestHost/test/RequestLifetimeTests.cs | 14 ++-- .../TestHost/test/ResponseResetTests.cs | 14 ++-- src/Hosting/TestHost/test/TestClientTests.cs | 68 +++++++++---------- src/Hosting/TestHost/test/Utilities.cs | 5 -- .../Listener/ResponseBodyTests.cs | 16 ++--- .../test/FunctionalTests/ResponseBodyTests.cs | 10 +-- .../FunctionalTests/ResponseSendFileTests.cs | 32 ++++----- .../FunctionalTests/ResponseTrailersTests.cs | 4 +- .../HttpSys/test/FunctionalTests/Utilities.cs | 4 -- .../shared/test/TaskTimeoutExtensions.cs | 8 +-- src/Shared/Http2cat/TaskTimeoutExtensions.cs | 8 +-- 13 files changed, 93 insertions(+), 102 deletions(-) diff --git a/src/Hosting/TestHost/test/ClientHandlerTests.cs b/src/Hosting/TestHost/test/ClientHandlerTests.cs index bd67c9b5d54e..c56c73bdebfe 100644 --- a/src/Hosting/TestHost/test/ClientHandlerTests.cs +++ b/src/Hosting/TestHost/test/ClientHandlerTests.cs @@ -392,7 +392,7 @@ public async Task ClientDisposalCloses() Task readTask = responseStream.ReadAsync(new byte[100], 0, 100); Assert.False(readTask.IsCompleted); responseStream.Dispose(); - await Assert.ThrowsAsync(() => readTask.WithTimeout()); + await Assert.ThrowsAsync(() => readTask.WaitAsync(DefaultTimeout)); block.SetResult(0); } @@ -415,7 +415,7 @@ public async Task ClientCancellationAborts() Task readTask = responseStream.ReadAsync(new byte[100], 0, 100, cts.Token); Assert.False(readTask.IsCompleted, "Not Completed"); cts.Cancel(); - await Assert.ThrowsAsync(() => readTask.WithTimeout()); + await Assert.ThrowsAsync(() => readTask.WaitAsync(DefaultTimeout)); block.SetResult(0); } diff --git a/src/Hosting/TestHost/test/HttpContextBuilderTests.cs b/src/Hosting/TestHost/test/HttpContextBuilderTests.cs index dee9167048cb..855db043222c 100644 --- a/src/Hosting/TestHost/test/HttpContextBuilderTests.cs +++ b/src/Hosting/TestHost/test/HttpContextBuilderTests.cs @@ -212,7 +212,7 @@ public async Task ClientDisposalCloses() Task readTask = responseStream.ReadAsync(new byte[100], 0, 100); Assert.False(readTask.IsCompleted); responseStream.Dispose(); - await Assert.ThrowsAsync(() => readTask.WithTimeout()); + await Assert.ThrowsAsync(() => readTask.WaitAsync(DefaultTimeout)); block.SetResult(0); } @@ -236,7 +236,7 @@ public async Task ClientCancellationAborts() await block.Task; cts.Cancel(); - await Assert.ThrowsAsync(() => contextTask.WithTimeout()); + await Assert.ThrowsAsync(() => contextTask.WaitAsync(DefaultTimeout)); } [Fact] @@ -262,7 +262,7 @@ public async Task ClientCancellationAbortsReadAsync() var readTask = responseStream.ReadAsync(new byte[100], 0, 100, cts.Token); Assert.False(readTask.IsCompleted); cts.Cancel(); - await Assert.ThrowsAsync(() => readTask.WithTimeout()); + await Assert.ThrowsAsync(() => readTask.WaitAsync(DefaultTimeout)); block.SetResult(0); } @@ -345,7 +345,7 @@ public async Task CallingAbortInsideHandlerShouldSetRequestAborted() var ex = await Assert.ThrowsAsync(() => server.SendAsync(c => { })); Assert.Equal("The application aborted the request.", ex.Message); - await requestAborted.Task.WithTimeout(); + await requestAborted.Task.WaitAsync(DefaultTimeout); } private class VerifierLogger : ILogger diff --git a/src/Hosting/TestHost/test/RequestLifetimeTests.cs b/src/Hosting/TestHost/test/RequestLifetimeTests.cs index d83d3465ba52..62a4c424ad59 100644 --- a/src/Hosting/TestHost/test/RequestLifetimeTests.cs +++ b/src/Hosting/TestHost/test/RequestLifetimeTests.cs @@ -24,13 +24,13 @@ public async Task LifetimeFeature_Abort_TriggersRequestAbortedToken() httpContext.RequestAborted.Register(() => requestAborted.SetResult(0)); httpContext.Abort(); - await requestAborted.Task.WithTimeout(); + await requestAborted.Task.WaitAsync(DefaultTimeout); }); var client = host.GetTestServer().CreateClient(); var ex = await Assert.ThrowsAsync(() => client.GetAsync("/", HttpCompletionOption.ResponseHeadersRead)); Assert.Equal("The application aborted the request.", ex.Message); - await requestAborted.Task.WithTimeout(); + await requestAborted.Task.WaitAsync(DefaultTimeout); } [Fact] @@ -40,7 +40,7 @@ public async Task LifetimeFeature_AbortBeforeHeadersSent_ClientThrows() using var host = await CreateHost(async httpContext => { httpContext.Abort(); - await abortReceived.Task.WithTimeout(); + await abortReceived.Task.WaitAsync(DefaultTimeout); }); var client = host.GetTestServer().CreateClient(); @@ -57,9 +57,9 @@ public async Task LifetimeFeature_AbortAfterHeadersSent_ClientBodyThrows() using var host = await CreateHost(async httpContext => { await httpContext.Response.Body.FlushAsync(); - await responseReceived.Task.WithTimeout(); + await responseReceived.Task.WaitAsync(DefaultTimeout); httpContext.Abort(); - await abortReceived.Task.WithTimeout(); + await abortReceived.Task.WaitAsync(DefaultTimeout); }); var client = host.GetTestServer().CreateClient(); @@ -80,9 +80,9 @@ public async Task LifetimeFeature_AbortAfterSomeDataSent_ClientBodyThrows() using var host = await CreateHost(async httpContext => { await httpContext.Response.WriteAsync("Hello World"); - await responseReceived.Task.WithTimeout(); + await responseReceived.Task.WaitAsync(DefaultTimeout); httpContext.Abort(); - await abortReceived.Task.WithTimeout(); + await abortReceived.Task.WaitAsync(DefaultTimeout); }); var client = host.GetTestServer().CreateClient(); diff --git a/src/Hosting/TestHost/test/ResponseResetTests.cs b/src/Hosting/TestHost/test/ResponseResetTests.cs index d169f019a348..0b2f8a5142bc 100644 --- a/src/Hosting/TestHost/test/ResponseResetTests.cs +++ b/src/Hosting/TestHost/test/ResponseResetTests.cs @@ -59,7 +59,7 @@ public async Task ResetFeature_Reset_TriggersRequestAbortedToken() var feature = httpContext.Features.Get(); feature.Reset(12345); - await requestAborted.Task.WithTimeout(); + await requestAborted.Task.WaitAsync(DefaultTimeout); }); var client = host.GetTestServer().CreateClient(); @@ -67,7 +67,7 @@ public async Task ResetFeature_Reset_TriggersRequestAbortedToken() var rex = await Assert.ThrowsAsync(() => client.GetAsync("/")); Assert.Equal("The application reset the request with error code 12345.", rex.Message); Assert.Equal(12345, rex.ErrorCode); - await requestAborted.Task.WithTimeout(); + await requestAborted.Task.WaitAsync(DefaultTimeout); } [Fact] @@ -78,7 +78,7 @@ public async Task ResetFeature_ResetBeforeHeadersSent_ClientThrows() { var feature = httpContext.Features.Get(); feature.Reset(12345); - await resetReceived.Task.WithTimeout(); + await resetReceived.Task.WaitAsync(DefaultTimeout); }); var client = host.GetTestServer().CreateClient(); @@ -97,10 +97,10 @@ public async Task ResetFeature_ResetAfterHeadersSent_ClientBodyThrows() using var host = await CreateHost(async httpContext => { await httpContext.Response.Body.FlushAsync(); - await responseReceived.Task.WithTimeout(); + await responseReceived.Task.WaitAsync(DefaultTimeout); var feature = httpContext.Features.Get(); feature.Reset(12345); - await resetReceived.Task.WithTimeout(); + await resetReceived.Task.WaitAsync(DefaultTimeout); }); var client = host.GetTestServer().CreateClient(); @@ -123,10 +123,10 @@ public async Task ResetFeature_ResetAfterSomeDataSent_ClientBodyThrows() using var host = await CreateHost(async httpContext => { await httpContext.Response.WriteAsync("Hello World"); - await responseReceived.Task.WithTimeout(); + await responseReceived.Task.WaitAsync(DefaultTimeout); var feature = httpContext.Features.Get(); feature.Reset(12345); - await resetReceived.Task.WithTimeout(); + await resetReceived.Task.WaitAsync(DefaultTimeout); }); var client = host.GetTestServer().CreateClient(); diff --git a/src/Hosting/TestHost/test/TestClientTests.cs b/src/Hosting/TestHost/test/TestClientTests.cs index 13a8016ddc0a..81cdf46cdd7b 100644 --- a/src/Hosting/TestHost/test/TestClientTests.cs +++ b/src/Hosting/TestHost/test/TestClientTests.cs @@ -101,10 +101,10 @@ public async Task PutAsyncWorks() // Act var content = new StringContent("Hello world"); - var response = await client.PutAsync("http://localhost:12345", content).WithTimeout(); + var response = await client.PutAsync("http://localhost:12345", content).WaitAsync(DefaultTimeout); // Assert - Assert.Equal("Hello world PUT Response", await response.Content.ReadAsStringAsync().WithTimeout()); + Assert.Equal("Hello world PUT Response", await response.Content.ReadAsStringAsync().WaitAsync(DefaultTimeout)); } [Fact] @@ -119,10 +119,10 @@ public async Task PostAsyncWorks() // Act var content = new StringContent("Hello world"); - var response = await client.PostAsync("http://localhost:12345", content).WithTimeout(); + var response = await client.PostAsync("http://localhost:12345", content).WaitAsync(DefaultTimeout); // Assert - Assert.Equal("Hello world POST Response", await response.Content.ReadAsStringAsync().WithTimeout()); + Assert.Equal("Hello world POST Response", await response.Content.ReadAsStringAsync().WaitAsync(DefaultTimeout)); } [Fact] @@ -207,12 +207,12 @@ public async Task ClientStreamingWorks() }); // Act - var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).WithTimeout(); + var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).WaitAsync(DefaultTimeout); - await responseStartedSyncPoint.WaitForSyncPoint().WithTimeout(); + await responseStartedSyncPoint.WaitForSyncPoint().WaitAsync(DefaultTimeout); responseStartedSyncPoint.Continue(); - var responseContent = await response.Content.ReadAsStreamAsync().WithTimeout(); + var responseContent = await response.Content.ReadAsStreamAsync().WaitAsync(DefaultTimeout); // Assert @@ -220,24 +220,24 @@ public async Task ClientStreamingWorks() await requestStreamSyncPoint.WaitForSyncPoint(); byte[] buffer = new byte[1024]; - var length = await responseContent.ReadAsync(buffer).AsTask().WithTimeout(); + var length = await responseContent.ReadAsync(buffer).AsTask().WaitAsync(DefaultTimeout); Assert.Equal("STARTED", Encoding.UTF8.GetString(buffer, 0, length)); // Send content and finish request body - await requestStream.WriteAsync(Encoding.UTF8.GetBytes("Hello world")).AsTask().WithTimeout(); - await requestStream.FlushAsync().WithTimeout(); + await requestStream.WriteAsync(Encoding.UTF8.GetBytes("Hello world")).AsTask().WaitAsync(DefaultTimeout); + await requestStream.FlushAsync().WaitAsync(DefaultTimeout); requestStreamSyncPoint.Continue(); // Ensure content is received while request is in progress - length = await responseContent.ReadAsync(buffer).AsTask().WithTimeout(); + length = await responseContent.ReadAsync(buffer).AsTask().WaitAsync(DefaultTimeout); Assert.Equal("Hello world POST Response", Encoding.UTF8.GetString(buffer, 0, length)); // Request is ending - await requestEndingSyncPoint.WaitForSyncPoint().WithTimeout(); + await requestEndingSyncPoint.WaitForSyncPoint().WaitAsync(DefaultTimeout); requestEndingSyncPoint.Continue(); // No more response content - length = await responseContent.ReadAsync(buffer).AsTask().WithTimeout(); + length = await responseContent.ReadAsync(buffer).AsTask().WaitAsync(DefaultTimeout); Assert.Equal(0, length); } @@ -293,12 +293,12 @@ public async Task ClientStreaming_Cancellation() }); // Act - var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).WithTimeout(); + var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).WaitAsync(DefaultTimeout); - await responseStartedSyncPoint.WaitForSyncPoint().WithTimeout(); + await responseStartedSyncPoint.WaitForSyncPoint().WaitAsync(DefaultTimeout); responseStartedSyncPoint.Continue(); - var responseContent = await response.Content.ReadAsStreamAsync().WithTimeout(); + var responseContent = await response.Content.ReadAsStreamAsync().WaitAsync(DefaultTimeout); // Assert @@ -306,15 +306,15 @@ public async Task ClientStreaming_Cancellation() await requestStreamSyncPoint.WaitForSyncPoint(); // Write to request - await requestStream.WriteAsync(Encoding.UTF8.GetBytes("SENT")).AsTask().WithTimeout(); - await requestStream.FlushAsync().WithTimeout(); - await responseReadSyncPoint.WaitForSyncPoint().WithTimeout(); + await requestStream.WriteAsync(Encoding.UTF8.GetBytes("SENT")).AsTask().WaitAsync(DefaultTimeout); + await requestStream.FlushAsync().WaitAsync(DefaultTimeout); + await responseReadSyncPoint.WaitForSyncPoint().WaitAsync(DefaultTimeout); // Cancel request. Disposing response must be used because SendAsync has finished. response.Dispose(); responseReadSyncPoint.Continue(); - await responseEndingSyncPoint.WaitForSyncPoint().WithTimeout(); + await responseEndingSyncPoint.WaitForSyncPoint().WaitAsync(DefaultTimeout); responseEndingSyncPoint.Continue(); Assert.True(readCanceled); @@ -350,15 +350,15 @@ public async Task ClientStreaming_ResponseCompletesWithoutReadingRequest() }); // Act - var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).WithTimeout(); + var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).WaitAsync(DefaultTimeout); - var responseContent = await response.Content.ReadAsStreamAsync().WithTimeout(); + var responseContent = await response.Content.ReadAsStreamAsync().WaitAsync(DefaultTimeout); // Assert // Read response byte[] buffer = new byte[1024]; - var length = await responseContent.ReadAsync(buffer).AsTask().WithTimeout(); + var length = await responseContent.ReadAsync(buffer).AsTask().WaitAsync(DefaultTimeout); Assert.Equal("POST Response", Encoding.UTF8.GetString(buffer, 0, length)); // Send large content and block on back pressure @@ -366,7 +366,7 @@ public async Task ClientStreaming_ResponseCompletesWithoutReadingRequest() { try { - await requestStream.WriteAsync(Encoding.UTF8.GetBytes(new string('!', 1024 * 1024 * 50))).AsTask().WithTimeout(); + await requestStream.WriteAsync(Encoding.UTF8.GetBytes(new string('!', 1024 * 1024 * 50))).AsTask().WaitAsync(DefaultTimeout); requestStreamTcs.SetResult(null); } catch (Exception ex) @@ -378,7 +378,7 @@ public async Task ClientStreaming_ResponseCompletesWithoutReadingRequest() responseEndingSyncPoint.Continue(); // No more response content - length = await responseContent.ReadAsync(buffer).AsTask().WithTimeout(); + length = await responseContent.ReadAsync(buffer).AsTask().WaitAsync(DefaultTimeout); Assert.Equal(0, length); await writeTask; @@ -412,9 +412,9 @@ public async Task ClientStreaming_ResponseCompletesWithPendingRead_ThrowError() }); // Act - var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).WithTimeout(); + var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).WaitAsync(DefaultTimeout); - var responseContent = await response.Content.ReadAsStreamAsync().WithTimeout(); + var responseContent = await response.Content.ReadAsStreamAsync().WaitAsync(DefaultTimeout); // Assert response.EnsureSuccessStatusCode(); @@ -424,7 +424,7 @@ public async Task ClientStreaming_ResponseCompletesWithPendingRead_ThrowError() var ex = await Assert.ThrowsAsync(async () => { byte[] buffer = new byte[1024]; - var length = await responseContent.ReadAsync(buffer).AsTask().WithTimeout(); + var length = await responseContent.ReadAsync(buffer).AsTask().WaitAsync(DefaultTimeout); }); Assert.Equal("An error occurred when completing the request. Request delegate may have finished while there is a pending read of the request body.", ex.InnerException.Message); @@ -459,9 +459,9 @@ public async Task ClientStreaming_ResponseCompletesWithoutResponseBodyWrite() }); // Act - var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).WithTimeout(); + var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).WaitAsync(DefaultTimeout); - var responseContent = await response.Content.ReadAsStreamAsync().WithTimeout(); + var responseContent = await response.Content.ReadAsStreamAsync().WaitAsync(DefaultTimeout); // Assert response.EnsureSuccessStatusCode(); @@ -469,7 +469,7 @@ public async Task ClientStreaming_ResponseCompletesWithoutResponseBodyWrite() // Read response byte[] buffer = new byte[1024]; - var length = await responseContent.ReadAsync(buffer).AsTask().WithTimeout(); + var length = await responseContent.ReadAsync(buffer).AsTask().WaitAsync(DefaultTimeout); Assert.Equal(0, length); // Writing to request stream will fail because server is complete @@ -510,9 +510,9 @@ public async Task ClientStreaming_ServerAbort() }); // Act - var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).WithTimeout(); + var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).WaitAsync(DefaultTimeout); - var responseContent = await response.Content.ReadAsStreamAsync().WithTimeout(); + var responseContent = await response.Content.ReadAsStreamAsync().WaitAsync(DefaultTimeout); // Assert @@ -525,7 +525,7 @@ public async Task ClientStreaming_ServerAbort() // Send content and finish request body await ExceptionAssert.ThrowsAsync( () => requestStream.WriteAsync(Encoding.UTF8.GetBytes("Hello world")).AsTask(), - "Flush was canceled on underlying PipeWriter.").WithTimeout(); + "Flush was canceled on underlying PipeWriter.").WaitAsync(DefaultTimeout); responseEndingSyncPoint.Continue(); requestStreamSyncPoint.Continue(); diff --git a/src/Hosting/TestHost/test/Utilities.cs b/src/Hosting/TestHost/test/Utilities.cs index d0fbbf65be55..7f4a99416a14 100644 --- a/src/Hosting/TestHost/test/Utilities.cs +++ b/src/Hosting/TestHost/test/Utilities.cs @@ -5,7 +5,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; -using Microsoft.AspNetCore.Testing; namespace Microsoft.AspNetCore.TestHost { @@ -13,10 +12,6 @@ internal static class Utilities { internal static readonly TimeSpan DefaultTimeout = TimeSpan.FromSeconds(15); - internal static Task WithTimeout(this Task task) => task.TimeoutAfter(DefaultTimeout); - - internal static Task WithTimeout(this Task task) => task.TimeoutAfter(DefaultTimeout); - internal static bool? CanHaveBody(this HttpRequest request) { return request.HttpContext.Features.Get()?.CanHaveBody; diff --git a/src/Servers/HttpSys/test/FunctionalTests/Listener/ResponseBodyTests.cs b/src/Servers/HttpSys/test/FunctionalTests/Listener/ResponseBodyTests.cs index 6f22a0e49a79..85d77706fcac 100644 --- a/src/Servers/HttpSys/test/FunctionalTests/Listener/ResponseBodyTests.cs +++ b/src/Servers/HttpSys/test/FunctionalTests/Listener/ResponseBodyTests.cs @@ -246,7 +246,7 @@ public async Task ResponseBodyWriteExceptions_ClientDisconnectsBeforeFirstWrite_ // Make sure the client is aborted cts.Cancel(); await Assert.ThrowsAnyAsync(() => responseTask); - await disconnectCts.Task.WithTimeout(); + await disconnectCts.Task.WaitAsync(DefaultTimeout); await Assert.ThrowsAsync(async () => { @@ -282,7 +282,7 @@ public async Task ResponseBodyWriteExceptions_ClientDisconnectsBeforeFirstWriteA // First write sends headers cts.Cancel(); await Assert.ThrowsAnyAsync(() => responseTask); - await disconnectCts.Task.WithTimeout(); + await disconnectCts.Task.WaitAsync(DefaultTimeout); await Assert.ThrowsAsync(async () => { @@ -317,7 +317,7 @@ public async Task ResponseBody_ClientDisconnectsBeforeFirstWrite_WriteCompletesS cts.Cancel(); await Assert.ThrowsAnyAsync(() => responseTask); - await disconnectCts.Task.WithTimeout(); + await disconnectCts.Task.WaitAsync(DefaultTimeout); // It can take several tries before Write notices the disconnect. for (int i = 0; i < Utilities.WriteRetryLimit; i++) @@ -344,7 +344,7 @@ public async Task ResponseBody_ClientDisconnectsBeforeFirstWriteAsync_WriteCompl cts.Cancel(); await Assert.ThrowsAnyAsync(() => responseTask); - await disconnectCts.Task.WithTimeout(); + await disconnectCts.Task.WaitAsync(DefaultTimeout); // It can take several tries before Write notices the disconnect. for (int i = 0; i < Utilities.WriteRetryLimit; i++) @@ -379,7 +379,7 @@ public async Task ResponseBodyWriteExceptions_ClientDisconnectsBeforeSecondWrite var response = await responseTask; response.EnsureSuccessStatusCode(); response.Dispose(); - await disconnectCts.Task.WithTimeout(); + await disconnectCts.Task.WaitAsync(DefaultTimeout); } await Assert.ThrowsAsync(async () => @@ -418,7 +418,7 @@ public async Task ResponseBodyWriteExceptions_ClientDisconnectsBeforeSecondWrite var response = await responseTask; response.EnsureSuccessStatusCode(); response.Dispose(); - await disconnectCts.Task.WithTimeout(); + await disconnectCts.Task.WaitAsync(DefaultTimeout); } await Assert.ThrowsAsync(async () => @@ -457,7 +457,7 @@ public async Task ResponseBody_ClientDisconnectsBeforeSecondWrite_WriteCompletes var response = await responseTask; response.EnsureSuccessStatusCode(); response.Dispose(); - await disconnectCts.Task.WithTimeout(); + await disconnectCts.Task.WaitAsync(DefaultTimeout); } // It can take several tries before Write notices the disconnect. @@ -491,7 +491,7 @@ public async Task ResponseBody_ClientDisconnectsBeforeSecondWriteAsync_WriteComp var response = await responseTask; response.EnsureSuccessStatusCode(); response.Dispose(); - await disconnectCts.Task.WithTimeout(); + await disconnectCts.Task.WaitAsync(DefaultTimeout); } // It can take several tries before Write notices the disconnect. diff --git a/src/Servers/HttpSys/test/FunctionalTests/ResponseBodyTests.cs b/src/Servers/HttpSys/test/FunctionalTests/ResponseBodyTests.cs index bd73e399467b..30a2a9b20c04 100644 --- a/src/Servers/HttpSys/test/FunctionalTests/ResponseBodyTests.cs +++ b/src/Servers/HttpSys/test/FunctionalTests/ResponseBodyTests.cs @@ -32,7 +32,7 @@ public async Task ResponseBody_StartAsync_LocksHeadersAndTriggersOnStarting() await httpContext.Response.StartAsync(); Assert.True(httpContext.Response.HasStarted); Assert.True(httpContext.Response.Headers.IsReadOnly); - await startingTcs.Task.WithTimeout(); + await startingTcs.Task.WaitAsync(DefaultTimeout); await httpContext.Response.WriteAsync("Hello World"); })) { @@ -61,8 +61,8 @@ public async Task ResponseBody_CompleteAsync_TriggersOnStartingAndLocksHeaders() await httpContext.Response.CompleteAsync(); Assert.True(httpContext.Response.HasStarted); Assert.True(httpContext.Response.Headers.IsReadOnly); - await startingTcs.Task.WithTimeout(); - await responseReceived.Task.WithTimeout(); + await startingTcs.Task.WaitAsync(DefaultTimeout); + await responseReceived.Task.WaitAsync(DefaultTimeout); })) { var response = await SendRequestAsync(address); @@ -83,7 +83,7 @@ public async Task ResponseBody_CompleteAsync_FlushesThePipe() var memory = writer.GetMemory(); writer.Advance(memory.Length); await httpContext.Response.CompleteAsync(); - await responseReceived.Task.WithTimeout(); + await responseReceived.Task.WaitAsync(DefaultTimeout); })) { var response = await SendRequestAsync(address); @@ -280,7 +280,7 @@ public async Task ResponseBody_WriteContentLengthExtraWritten_Throws() Assert.Null(response.Headers.TransferEncodingChunked); Assert.Equal(new byte[10], await response.Content.ReadAsByteArrayAsync()); - Assert.True(await requestThrew.Task.TimeoutAfter(TimeSpan.FromSeconds(10))); + Assert.True(await requestThrew.Task.WaitAsync(TimeSpan.FromSeconds(10))); } } diff --git a/src/Servers/HttpSys/test/FunctionalTests/ResponseSendFileTests.cs b/src/Servers/HttpSys/test/FunctionalTests/ResponseSendFileTests.cs index b26097ef517c..763f55f089c8 100644 --- a/src/Servers/HttpSys/test/FunctionalTests/ResponseSendFileTests.cs +++ b/src/Servers/HttpSys/test/FunctionalTests/ResponseSendFileTests.cs @@ -387,7 +387,7 @@ public async Task ResponseSendFileWriteExceptions_FirstCallWithCanceledCancellat }, options => options.ThrowWriteExceptions = true)) { await Assert.ThrowsAsync(() => SendRequestAsync(address)); - await testComplete.Task.WithTimeout(); + await testComplete.Task.WaitAsync(DefaultTimeout); } } @@ -415,7 +415,7 @@ public async Task ResponseSendFile_FirstSendWithCanceledCancellationToken_Cancel })) { await Assert.ThrowsAsync(() => SendRequestAsync(address)); - await testComplete.Task.WithTimeout(); + await testComplete.Task.WaitAsync(DefaultTimeout); } } @@ -442,7 +442,7 @@ public async Task ResponseSendFileExceptions_SecondSendWithCanceledCancellationT }, options => options.ThrowWriteExceptions = true)) { await Assert.ThrowsAsync(() => SendRequestAsync(address)); - await testComplete.Task.WithTimeout(); + await testComplete.Task.WaitAsync(DefaultTimeout); } } @@ -469,7 +469,7 @@ public async Task ResponseSendFile_SecondSendWithCanceledCancellationToken_Cance })) { await Assert.ThrowsAsync(() => SendRequestAsync(address)); - await testComplete.Task.WithTimeout(); + await testComplete.Task.WaitAsync(DefaultTimeout); } } @@ -515,14 +515,14 @@ await Assert.ThrowsAsync(() => { var cts = new CancellationTokenSource(); var responseTask = SendRequestAsync(address, cts.Token); - await requestReceived.Task.WithTimeout(); + await requestReceived.Task.WaitAsync(DefaultTimeout); // First write sends headers cts.Cancel(); await Assert.ThrowsAnyAsync(() => responseTask); requestCancelled.SetResult(0); - await testComplete.Task.WithTimeout(); - await cancellationReceived.Task.WithTimeout(); + await testComplete.Task.WaitAsync(DefaultTimeout); + await cancellationReceived.Task.WaitAsync(DefaultTimeout); } } @@ -558,14 +558,14 @@ public async Task ResponseSendFile_ClientDisconnectsBeforeFirstSend_SendComplete { var cts = new CancellationTokenSource(); var responseTask = SendRequestAsync(address, cts.Token); - await requestReceived.Task.WithTimeout(); + await requestReceived.Task.WaitAsync(DefaultTimeout); // First write sends headers cts.Cancel(); await Assert.ThrowsAnyAsync(() => responseTask); requestCancelled.SetResult(0); - await testComplete.Task.WithTimeout(); - await cancellationReceived.Task.WithTimeout(); + await testComplete.Task.WaitAsync(DefaultTimeout); + await cancellationReceived.Task.WaitAsync(DefaultTimeout); } } @@ -614,14 +614,14 @@ await Assert.ThrowsAsync(async () => // Drain data from the connection so that SendFileAsync can complete. var bufferTask = response.Content.LoadIntoBufferAsync(); - await firstSendComplete.Task.WithTimeout(); + await firstSendComplete.Task.WaitAsync(DefaultTimeout); // Abort response.Dispose(); } clientDisconnected.SetResult(0); - await testComplete.Task.WithTimeout(); - await cancellationReceived.Task.WithTimeout(); + await testComplete.Task.WaitAsync(DefaultTimeout); + await cancellationReceived.Task.WaitAsync(DefaultTimeout); } } @@ -663,14 +663,14 @@ public async Task ResponseSendFile_ClientDisconnectsBeforeSecondSend_SendComplet // Drain data from the connection so that SendFileAsync can complete. var bufferTask = response.Content.LoadIntoBufferAsync(); - await firstSendComplete.Task.WithTimeout(); + await firstSendComplete.Task.WaitAsync(DefaultTimeout); // Abort response.Dispose(); } clientDisconnected.SetResult(0); - await testComplete.Task.WithTimeout(); - await cancellationReceived.Task.WithTimeout(); + await testComplete.Task.WaitAsync(DefaultTimeout); + await cancellationReceived.Task.WaitAsync(DefaultTimeout); } } diff --git a/src/Servers/HttpSys/test/FunctionalTests/ResponseTrailersTests.cs b/src/Servers/HttpSys/test/FunctionalTests/ResponseTrailersTests.cs index 75f43587b73d..ec45a6592731 100644 --- a/src/Servers/HttpSys/test/FunctionalTests/ResponseTrailersTests.cs +++ b/src/Servers/HttpSys/test/FunctionalTests/ResponseTrailersTests.cs @@ -229,7 +229,7 @@ public async Task ResponseTrailers_CompleteAsyncNoBody_TrailersSent() { httpContext.Response.AppendTrailer("trailername", "TrailerValue"); await httpContext.Response.CompleteAsync(); - await trailersReceived.Task.WithTimeout(); + await trailersReceived.Task.WaitAsync(DefaultTimeout); })) { var response = await SendRequestAsync(address); @@ -251,7 +251,7 @@ public async Task ResponseTrailers_CompleteAsyncWithBody_TrailersSent() await httpContext.Response.WriteAsync("Hello World"); httpContext.Response.AppendTrailer("TrailerName", "Trailer Value"); await httpContext.Response.CompleteAsync(); - await trailersReceived.Task.WithTimeout(); + await trailersReceived.Task.WaitAsync(DefaultTimeout); })) { var response = await SendRequestAsync(address); diff --git a/src/Servers/HttpSys/test/FunctionalTests/Utilities.cs b/src/Servers/HttpSys/test/FunctionalTests/Utilities.cs index a745e6ec5db8..507474d4dd8d 100644 --- a/src/Servers/HttpSys/test/FunctionalTests/Utilities.cs +++ b/src/Servers/HttpSys/test/FunctionalTests/Utilities.cs @@ -168,10 +168,6 @@ internal static IServer CreateDynamicHttpsServer(string basePath, out string roo throw new Exception("Failed to locate a free port."); } - internal static Task WithTimeout(this Task task) => task.TimeoutAfter(DefaultTimeout); - - internal static Task WithTimeout(this Task task) => task.TimeoutAfter(DefaultTimeout); - internal static bool? CanHaveBody(this HttpRequest request) { return request.HttpContext.Features.Get()?.CanHaveBody; diff --git a/src/Servers/Kestrel/shared/test/TaskTimeoutExtensions.cs b/src/Servers/Kestrel/shared/test/TaskTimeoutExtensions.cs index 418769c4ea0b..f8b4df600a00 100644 --- a/src/Servers/Kestrel/shared/test/TaskTimeoutExtensions.cs +++ b/src/Servers/Kestrel/shared/test/TaskTimeoutExtensions.cs @@ -9,22 +9,22 @@ public static class TaskTimeoutExtensions { public static Task DefaultTimeout(this ValueTask task) { - return task.AsTask().TimeoutAfter(TestConstants.DefaultTimeout); + return task.AsTask().WaitAsync(TestConstants.DefaultTimeout); } public static Task DefaultTimeout(this ValueTask task) { - return task.AsTask().TimeoutAfter(TestConstants.DefaultTimeout); + return task.AsTask().WaitAsync(TestConstants.DefaultTimeout); } public static Task DefaultTimeout(this Task task) { - return task.TimeoutAfter(TestConstants.DefaultTimeout); + return task.WaitAsync(TestConstants.DefaultTimeout); } public static Task DefaultTimeout(this Task task) { - return task.TimeoutAfter(TestConstants.DefaultTimeout); + return task.WaitAsync(TestConstants.DefaultTimeout); } } } diff --git a/src/Shared/Http2cat/TaskTimeoutExtensions.cs b/src/Shared/Http2cat/TaskTimeoutExtensions.cs index d6619f50ac2f..73522a0b6c1b 100644 --- a/src/Shared/Http2cat/TaskTimeoutExtensions.cs +++ b/src/Shared/Http2cat/TaskTimeoutExtensions.cs @@ -12,22 +12,22 @@ internal static class TaskTimeoutExtensions public static Task DefaultTimeout(this ValueTask task) { - return task.AsTask().TimeoutAfter(DefaultTimeoutTimeSpan); + return task.AsTask().WaitAsync(DefaultTimeoutTimeSpan); } public static Task DefaultTimeout(this ValueTask task) { - return task.AsTask().TimeoutAfter(DefaultTimeoutTimeSpan); + return task.AsTask().WaitAsync(DefaultTimeoutTimeSpan); } public static Task DefaultTimeout(this Task task) { - return task.TimeoutAfter(DefaultTimeoutTimeSpan); + return task.WaitAsync(DefaultTimeoutTimeSpan); } public static Task DefaultTimeout(this Task task) { - return task.TimeoutAfter(DefaultTimeoutTimeSpan); + return task.WaitAsync(DefaultTimeoutTimeSpan); } private static async Task TimeoutAfter(this Task task, TimeSpan timeout, From bd1bc3e67827ad9c9dfb1049fdae37fc10e8b73e Mon Sep 17 00:00:00 2001 From: Laszlo Deak Date: Fri, 9 Apr 2021 20:54:28 +0200 Subject: [PATCH 2/7] Consolidating DefaultTimeout and TimeoutAfter into Testing project --- .../TestHost/test/ClientHandlerTests.cs | 5 +- .../TestHost/test/HttpContextBuilderTests.cs | 9 +- .../TestHost/test/RequestLifetimeTests.cs | 16 ++-- .../TestHost/test/ResponseResetTests.cs | 15 ++-- src/Hosting/TestHost/test/TestClientTests.cs | 68 +++++++-------- .../Listener/ResponseBodyTests.cs | 16 ++-- .../test/FunctionalTests/ResponseBodyTests.cs | 8 +- .../FunctionalTests/ResponseSendFileTests.cs | 32 +++---- .../FunctionalTests/ResponseTrailersTests.cs | 4 +- .../Common.FunctionalTests/ShutdownTests.cs | 4 +- .../test/IIS.Tests/ClientDisconnectTests.cs | 28 +++--- .../IIS/test/IIS.Tests/ResponseAbortTests.cs | 2 +- .../InProcess/AppOfflineIISExpressTests.cs | 2 +- .../IIS.Common.TestLib/TimeoutExtensions.cs | 10 --- .../Core/test/ConcurrentPipeWriterTests.cs | 1 + .../Kestrel/Core/test/MessageBodyTests.cs | 1 + .../test/QuicTransportFactoryTests.cs | 1 + .../Kestrel/samples/http2cat/http2cat.csproj | 5 +- .../shared/test/TaskTimeoutExtensions.cs | 30 ------- .../Http2/Http2KeepAliveTests.cs | 1 + .../Http3/Http3ConnectionTests.cs | 1 + .../TestTransport/InMemoryHttpClientSlim.cs | 1 + .../Interop.FunctionalTests.csproj | 1 - src/Shared/Http2cat/Http2Utilities.cs | 1 + src/Shared/Http2cat/TaskTimeoutExtensions.cs | 85 ------------------- src/Testing/src/TaskExtensions.cs | 46 +++++++++- 26 files changed, 158 insertions(+), 235 deletions(-) delete mode 100644 src/Servers/Kestrel/shared/test/TaskTimeoutExtensions.cs delete mode 100644 src/Shared/Http2cat/TaskTimeoutExtensions.cs diff --git a/src/Hosting/TestHost/test/ClientHandlerTests.cs b/src/Hosting/TestHost/test/ClientHandlerTests.cs index c56c73bdebfe..cd368192b7b4 100644 --- a/src/Hosting/TestHost/test/ClientHandlerTests.cs +++ b/src/Hosting/TestHost/test/ClientHandlerTests.cs @@ -14,6 +14,7 @@ using Microsoft.AspNetCore.Hosting.Server; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; +using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Net.Http.Headers; @@ -392,7 +393,7 @@ public async Task ClientDisposalCloses() Task readTask = responseStream.ReadAsync(new byte[100], 0, 100); Assert.False(readTask.IsCompleted); responseStream.Dispose(); - await Assert.ThrowsAsync(() => readTask.WaitAsync(DefaultTimeout)); + await Assert.ThrowsAsync(() => readTask.DefaultTimeout()); block.SetResult(0); } @@ -415,7 +416,7 @@ public async Task ClientCancellationAborts() Task readTask = responseStream.ReadAsync(new byte[100], 0, 100, cts.Token); Assert.False(readTask.IsCompleted, "Not Completed"); cts.Cancel(); - await Assert.ThrowsAsync(() => readTask.WaitAsync(DefaultTimeout)); + await Assert.ThrowsAsync(() => readTask.DefaultTimeout()); block.SetResult(0); } diff --git a/src/Hosting/TestHost/test/HttpContextBuilderTests.cs b/src/Hosting/TestHost/test/HttpContextBuilderTests.cs index 855db043222c..99ae9cd4b034 100644 --- a/src/Hosting/TestHost/test/HttpContextBuilderTests.cs +++ b/src/Hosting/TestHost/test/HttpContextBuilderTests.cs @@ -10,6 +10,7 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; +using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Net.Http.Headers; @@ -212,7 +213,7 @@ public async Task ClientDisposalCloses() Task readTask = responseStream.ReadAsync(new byte[100], 0, 100); Assert.False(readTask.IsCompleted); responseStream.Dispose(); - await Assert.ThrowsAsync(() => readTask.WaitAsync(DefaultTimeout)); + await Assert.ThrowsAsync(() => readTask.DefaultTimeout()); block.SetResult(0); } @@ -236,7 +237,7 @@ public async Task ClientCancellationAborts() await block.Task; cts.Cancel(); - await Assert.ThrowsAsync(() => contextTask.WaitAsync(DefaultTimeout)); + await Assert.ThrowsAsync(() => contextTask.DefaultTimeout()); } [Fact] @@ -262,7 +263,7 @@ public async Task ClientCancellationAbortsReadAsync() var readTask = responseStream.ReadAsync(new byte[100], 0, 100, cts.Token); Assert.False(readTask.IsCompleted); cts.Cancel(); - await Assert.ThrowsAsync(() => readTask.WaitAsync(DefaultTimeout)); + await Assert.ThrowsAsync(() => readTask.DefaultTimeout()); block.SetResult(0); } @@ -345,7 +346,7 @@ public async Task CallingAbortInsideHandlerShouldSetRequestAborted() var ex = await Assert.ThrowsAsync(() => server.SendAsync(c => { })); Assert.Equal("The application aborted the request.", ex.Message); - await requestAborted.Task.WaitAsync(DefaultTimeout); + await requestAborted.Task.DefaultTimeout(); } private class VerifierLogger : ILogger diff --git a/src/Hosting/TestHost/test/RequestLifetimeTests.cs b/src/Hosting/TestHost/test/RequestLifetimeTests.cs index 62a4c424ad59..f76f4cb5b2b3 100644 --- a/src/Hosting/TestHost/test/RequestLifetimeTests.cs +++ b/src/Hosting/TestHost/test/RequestLifetimeTests.cs @@ -7,7 +7,7 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Http.Features; +using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Hosting; using Xunit; @@ -24,13 +24,13 @@ public async Task LifetimeFeature_Abort_TriggersRequestAbortedToken() httpContext.RequestAborted.Register(() => requestAborted.SetResult(0)); httpContext.Abort(); - await requestAborted.Task.WaitAsync(DefaultTimeout); + await requestAborted.Task.DefaultTimeout(); }); var client = host.GetTestServer().CreateClient(); var ex = await Assert.ThrowsAsync(() => client.GetAsync("/", HttpCompletionOption.ResponseHeadersRead)); Assert.Equal("The application aborted the request.", ex.Message); - await requestAborted.Task.WaitAsync(DefaultTimeout); + await requestAborted.Task.DefaultTimeout(); } [Fact] @@ -40,7 +40,7 @@ public async Task LifetimeFeature_AbortBeforeHeadersSent_ClientThrows() using var host = await CreateHost(async httpContext => { httpContext.Abort(); - await abortReceived.Task.WaitAsync(DefaultTimeout); + await abortReceived.Task.DefaultTimeout(); }); var client = host.GetTestServer().CreateClient(); @@ -57,9 +57,9 @@ public async Task LifetimeFeature_AbortAfterHeadersSent_ClientBodyThrows() using var host = await CreateHost(async httpContext => { await httpContext.Response.Body.FlushAsync(); - await responseReceived.Task.WaitAsync(DefaultTimeout); + await responseReceived.Task.DefaultTimeout(); httpContext.Abort(); - await abortReceived.Task.WaitAsync(DefaultTimeout); + await abortReceived.Task.DefaultTimeout(); }); var client = host.GetTestServer().CreateClient(); @@ -80,9 +80,9 @@ public async Task LifetimeFeature_AbortAfterSomeDataSent_ClientBodyThrows() using var host = await CreateHost(async httpContext => { await httpContext.Response.WriteAsync("Hello World"); - await responseReceived.Task.WaitAsync(DefaultTimeout); + await responseReceived.Task.DefaultTimeout(); httpContext.Abort(); - await abortReceived.Task.WaitAsync(DefaultTimeout); + await abortReceived.Task.DefaultTimeout(); }); var client = host.GetTestServer().CreateClient(); diff --git a/src/Hosting/TestHost/test/ResponseResetTests.cs b/src/Hosting/TestHost/test/ResponseResetTests.cs index 0b2f8a5142bc..b4db0b7bcf75 100644 --- a/src/Hosting/TestHost/test/ResponseResetTests.cs +++ b/src/Hosting/TestHost/test/ResponseResetTests.cs @@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; +using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Hosting; using Xunit; @@ -59,7 +60,7 @@ public async Task ResetFeature_Reset_TriggersRequestAbortedToken() var feature = httpContext.Features.Get(); feature.Reset(12345); - await requestAborted.Task.WaitAsync(DefaultTimeout); + await requestAborted.Task.DefaultTimeout(); }); var client = host.GetTestServer().CreateClient(); @@ -67,7 +68,7 @@ public async Task ResetFeature_Reset_TriggersRequestAbortedToken() var rex = await Assert.ThrowsAsync(() => client.GetAsync("/")); Assert.Equal("The application reset the request with error code 12345.", rex.Message); Assert.Equal(12345, rex.ErrorCode); - await requestAborted.Task.WaitAsync(DefaultTimeout); + await requestAborted.Task.DefaultTimeout(); } [Fact] @@ -78,7 +79,7 @@ public async Task ResetFeature_ResetBeforeHeadersSent_ClientThrows() { var feature = httpContext.Features.Get(); feature.Reset(12345); - await resetReceived.Task.WaitAsync(DefaultTimeout); + await resetReceived.Task.DefaultTimeout(); }); var client = host.GetTestServer().CreateClient(); @@ -97,10 +98,10 @@ public async Task ResetFeature_ResetAfterHeadersSent_ClientBodyThrows() using var host = await CreateHost(async httpContext => { await httpContext.Response.Body.FlushAsync(); - await responseReceived.Task.WaitAsync(DefaultTimeout); + await responseReceived.Task.DefaultTimeout(); var feature = httpContext.Features.Get(); feature.Reset(12345); - await resetReceived.Task.WaitAsync(DefaultTimeout); + await resetReceived.Task.DefaultTimeout(); }); var client = host.GetTestServer().CreateClient(); @@ -123,10 +124,10 @@ public async Task ResetFeature_ResetAfterSomeDataSent_ClientBodyThrows() using var host = await CreateHost(async httpContext => { await httpContext.Response.WriteAsync("Hello World"); - await responseReceived.Task.WaitAsync(DefaultTimeout); + await responseReceived.Task.DefaultTimeout(); var feature = httpContext.Features.Get(); feature.Reset(12345); - await resetReceived.Task.WaitAsync(DefaultTimeout); + await resetReceived.Task.DefaultTimeout(); }); var client = host.GetTestServer().CreateClient(); diff --git a/src/Hosting/TestHost/test/TestClientTests.cs b/src/Hosting/TestHost/test/TestClientTests.cs index 81cdf46cdd7b..ba175599e424 100644 --- a/src/Hosting/TestHost/test/TestClientTests.cs +++ b/src/Hosting/TestHost/test/TestClientTests.cs @@ -101,10 +101,10 @@ public async Task PutAsyncWorks() // Act var content = new StringContent("Hello world"); - var response = await client.PutAsync("http://localhost:12345", content).WaitAsync(DefaultTimeout); + var response = await client.PutAsync("http://localhost:12345", content).DefaultTimeout(); // Assert - Assert.Equal("Hello world PUT Response", await response.Content.ReadAsStringAsync().WaitAsync(DefaultTimeout)); + Assert.Equal("Hello world PUT Response", await response.Content.ReadAsStringAsync().DefaultTimeout()); } [Fact] @@ -119,10 +119,10 @@ public async Task PostAsyncWorks() // Act var content = new StringContent("Hello world"); - var response = await client.PostAsync("http://localhost:12345", content).WaitAsync(DefaultTimeout); + var response = await client.PostAsync("http://localhost:12345", content).DefaultTimeout(); // Assert - Assert.Equal("Hello world POST Response", await response.Content.ReadAsStringAsync().WaitAsync(DefaultTimeout)); + Assert.Equal("Hello world POST Response", await response.Content.ReadAsStringAsync().DefaultTimeout()); } [Fact] @@ -207,12 +207,12 @@ public async Task ClientStreamingWorks() }); // Act - var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).WaitAsync(DefaultTimeout); + var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).DefaultTimeout(); - await responseStartedSyncPoint.WaitForSyncPoint().WaitAsync(DefaultTimeout); + await responseStartedSyncPoint.WaitForSyncPoint().DefaultTimeout(); responseStartedSyncPoint.Continue(); - var responseContent = await response.Content.ReadAsStreamAsync().WaitAsync(DefaultTimeout); + var responseContent = await response.Content.ReadAsStreamAsync().DefaultTimeout(); // Assert @@ -220,24 +220,24 @@ public async Task ClientStreamingWorks() await requestStreamSyncPoint.WaitForSyncPoint(); byte[] buffer = new byte[1024]; - var length = await responseContent.ReadAsync(buffer).AsTask().WaitAsync(DefaultTimeout); + var length = await responseContent.ReadAsync(buffer).AsTask().DefaultTimeout(); Assert.Equal("STARTED", Encoding.UTF8.GetString(buffer, 0, length)); // Send content and finish request body - await requestStream.WriteAsync(Encoding.UTF8.GetBytes("Hello world")).AsTask().WaitAsync(DefaultTimeout); - await requestStream.FlushAsync().WaitAsync(DefaultTimeout); + await requestStream.WriteAsync(Encoding.UTF8.GetBytes("Hello world")).AsTask().DefaultTimeout(); + await requestStream.FlushAsync().DefaultTimeout(); requestStreamSyncPoint.Continue(); // Ensure content is received while request is in progress - length = await responseContent.ReadAsync(buffer).AsTask().WaitAsync(DefaultTimeout); + length = await responseContent.ReadAsync(buffer).AsTask().DefaultTimeout(); Assert.Equal("Hello world POST Response", Encoding.UTF8.GetString(buffer, 0, length)); // Request is ending - await requestEndingSyncPoint.WaitForSyncPoint().WaitAsync(DefaultTimeout); + await requestEndingSyncPoint.WaitForSyncPoint().DefaultTimeout(); requestEndingSyncPoint.Continue(); // No more response content - length = await responseContent.ReadAsync(buffer).AsTask().WaitAsync(DefaultTimeout); + length = await responseContent.ReadAsync(buffer).AsTask().DefaultTimeout(); Assert.Equal(0, length); } @@ -293,12 +293,12 @@ public async Task ClientStreaming_Cancellation() }); // Act - var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).WaitAsync(DefaultTimeout); + var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).DefaultTimeout(); - await responseStartedSyncPoint.WaitForSyncPoint().WaitAsync(DefaultTimeout); + await responseStartedSyncPoint.WaitForSyncPoint().DefaultTimeout(); responseStartedSyncPoint.Continue(); - var responseContent = await response.Content.ReadAsStreamAsync().WaitAsync(DefaultTimeout); + var responseContent = await response.Content.ReadAsStreamAsync().DefaultTimeout(); // Assert @@ -306,15 +306,15 @@ public async Task ClientStreaming_Cancellation() await requestStreamSyncPoint.WaitForSyncPoint(); // Write to request - await requestStream.WriteAsync(Encoding.UTF8.GetBytes("SENT")).AsTask().WaitAsync(DefaultTimeout); - await requestStream.FlushAsync().WaitAsync(DefaultTimeout); - await responseReadSyncPoint.WaitForSyncPoint().WaitAsync(DefaultTimeout); + await requestStream.WriteAsync(Encoding.UTF8.GetBytes("SENT")).AsTask().DefaultTimeout(); + await requestStream.FlushAsync().DefaultTimeout(); + await responseReadSyncPoint.WaitForSyncPoint().DefaultTimeout(); // Cancel request. Disposing response must be used because SendAsync has finished. response.Dispose(); responseReadSyncPoint.Continue(); - await responseEndingSyncPoint.WaitForSyncPoint().WaitAsync(DefaultTimeout); + await responseEndingSyncPoint.WaitForSyncPoint().DefaultTimeout(); responseEndingSyncPoint.Continue(); Assert.True(readCanceled); @@ -350,15 +350,15 @@ public async Task ClientStreaming_ResponseCompletesWithoutReadingRequest() }); // Act - var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).WaitAsync(DefaultTimeout); + var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).DefaultTimeout(); - var responseContent = await response.Content.ReadAsStreamAsync().WaitAsync(DefaultTimeout); + var responseContent = await response.Content.ReadAsStreamAsync().DefaultTimeout(); // Assert // Read response byte[] buffer = new byte[1024]; - var length = await responseContent.ReadAsync(buffer).AsTask().WaitAsync(DefaultTimeout); + var length = await responseContent.ReadAsync(buffer).AsTask().DefaultTimeout(); Assert.Equal("POST Response", Encoding.UTF8.GetString(buffer, 0, length)); // Send large content and block on back pressure @@ -366,7 +366,7 @@ public async Task ClientStreaming_ResponseCompletesWithoutReadingRequest() { try { - await requestStream.WriteAsync(Encoding.UTF8.GetBytes(new string('!', 1024 * 1024 * 50))).AsTask().WaitAsync(DefaultTimeout); + await requestStream.WriteAsync(Encoding.UTF8.GetBytes(new string('!', 1024 * 1024 * 50))).AsTask().DefaultTimeout(); requestStreamTcs.SetResult(null); } catch (Exception ex) @@ -378,7 +378,7 @@ public async Task ClientStreaming_ResponseCompletesWithoutReadingRequest() responseEndingSyncPoint.Continue(); // No more response content - length = await responseContent.ReadAsync(buffer).AsTask().WaitAsync(DefaultTimeout); + length = await responseContent.ReadAsync(buffer).AsTask().DefaultTimeout(); Assert.Equal(0, length); await writeTask; @@ -412,9 +412,9 @@ public async Task ClientStreaming_ResponseCompletesWithPendingRead_ThrowError() }); // Act - var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).WaitAsync(DefaultTimeout); + var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).DefaultTimeout(); - var responseContent = await response.Content.ReadAsStreamAsync().WaitAsync(DefaultTimeout); + var responseContent = await response.Content.ReadAsStreamAsync().DefaultTimeout(); // Assert response.EnsureSuccessStatusCode(); @@ -424,7 +424,7 @@ public async Task ClientStreaming_ResponseCompletesWithPendingRead_ThrowError() var ex = await Assert.ThrowsAsync(async () => { byte[] buffer = new byte[1024]; - var length = await responseContent.ReadAsync(buffer).AsTask().WaitAsync(DefaultTimeout); + var length = await responseContent.ReadAsync(buffer).AsTask().DefaultTimeout(); }); Assert.Equal("An error occurred when completing the request. Request delegate may have finished while there is a pending read of the request body.", ex.InnerException.Message); @@ -459,9 +459,9 @@ public async Task ClientStreaming_ResponseCompletesWithoutResponseBodyWrite() }); // Act - var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).WaitAsync(DefaultTimeout); + var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).DefaultTimeout(); - var responseContent = await response.Content.ReadAsStreamAsync().WaitAsync(DefaultTimeout); + var responseContent = await response.Content.ReadAsStreamAsync().DefaultTimeout(); // Assert response.EnsureSuccessStatusCode(); @@ -469,7 +469,7 @@ public async Task ClientStreaming_ResponseCompletesWithoutResponseBodyWrite() // Read response byte[] buffer = new byte[1024]; - var length = await responseContent.ReadAsync(buffer).AsTask().WaitAsync(DefaultTimeout); + var length = await responseContent.ReadAsync(buffer).AsTask().DefaultTimeout(); Assert.Equal(0, length); // Writing to request stream will fail because server is complete @@ -510,9 +510,9 @@ public async Task ClientStreaming_ServerAbort() }); // Act - var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).WaitAsync(DefaultTimeout); + var response = await client.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead).DefaultTimeout(); - var responseContent = await response.Content.ReadAsStreamAsync().WaitAsync(DefaultTimeout); + var responseContent = await response.Content.ReadAsStreamAsync().DefaultTimeout(); // Assert @@ -525,7 +525,7 @@ public async Task ClientStreaming_ServerAbort() // Send content and finish request body await ExceptionAssert.ThrowsAsync( () => requestStream.WriteAsync(Encoding.UTF8.GetBytes("Hello world")).AsTask(), - "Flush was canceled on underlying PipeWriter.").WaitAsync(DefaultTimeout); + "Flush was canceled on underlying PipeWriter.").DefaultTimeout(); responseEndingSyncPoint.Continue(); requestStreamSyncPoint.Continue(); diff --git a/src/Servers/HttpSys/test/FunctionalTests/Listener/ResponseBodyTests.cs b/src/Servers/HttpSys/test/FunctionalTests/Listener/ResponseBodyTests.cs index 85d77706fcac..86b26eac6365 100644 --- a/src/Servers/HttpSys/test/FunctionalTests/Listener/ResponseBodyTests.cs +++ b/src/Servers/HttpSys/test/FunctionalTests/Listener/ResponseBodyTests.cs @@ -246,7 +246,7 @@ public async Task ResponseBodyWriteExceptions_ClientDisconnectsBeforeFirstWrite_ // Make sure the client is aborted cts.Cancel(); await Assert.ThrowsAnyAsync(() => responseTask); - await disconnectCts.Task.WaitAsync(DefaultTimeout); + await disconnectCts.Task.DefaultTimeout(); await Assert.ThrowsAsync(async () => { @@ -282,7 +282,7 @@ public async Task ResponseBodyWriteExceptions_ClientDisconnectsBeforeFirstWriteA // First write sends headers cts.Cancel(); await Assert.ThrowsAnyAsync(() => responseTask); - await disconnectCts.Task.WaitAsync(DefaultTimeout); + await disconnectCts.Task.DefaultTimeout(); await Assert.ThrowsAsync(async () => { @@ -317,7 +317,7 @@ public async Task ResponseBody_ClientDisconnectsBeforeFirstWrite_WriteCompletesS cts.Cancel(); await Assert.ThrowsAnyAsync(() => responseTask); - await disconnectCts.Task.WaitAsync(DefaultTimeout); + await disconnectCts.Task.DefaultTimeout(); // It can take several tries before Write notices the disconnect. for (int i = 0; i < Utilities.WriteRetryLimit; i++) @@ -344,7 +344,7 @@ public async Task ResponseBody_ClientDisconnectsBeforeFirstWriteAsync_WriteCompl cts.Cancel(); await Assert.ThrowsAnyAsync(() => responseTask); - await disconnectCts.Task.WaitAsync(DefaultTimeout); + await disconnectCts.Task.DefaultTimeout(); // It can take several tries before Write notices the disconnect. for (int i = 0; i < Utilities.WriteRetryLimit; i++) @@ -379,7 +379,7 @@ public async Task ResponseBodyWriteExceptions_ClientDisconnectsBeforeSecondWrite var response = await responseTask; response.EnsureSuccessStatusCode(); response.Dispose(); - await disconnectCts.Task.WaitAsync(DefaultTimeout); + await disconnectCts.Task.DefaultTimeout(); } await Assert.ThrowsAsync(async () => @@ -418,7 +418,7 @@ public async Task ResponseBodyWriteExceptions_ClientDisconnectsBeforeSecondWrite var response = await responseTask; response.EnsureSuccessStatusCode(); response.Dispose(); - await disconnectCts.Task.WaitAsync(DefaultTimeout); + await disconnectCts.Task.DefaultTimeout(); } await Assert.ThrowsAsync(async () => @@ -457,7 +457,7 @@ public async Task ResponseBody_ClientDisconnectsBeforeSecondWrite_WriteCompletes var response = await responseTask; response.EnsureSuccessStatusCode(); response.Dispose(); - await disconnectCts.Task.WaitAsync(DefaultTimeout); + await disconnectCts.Task.DefaultTimeout(); } // It can take several tries before Write notices the disconnect. @@ -491,7 +491,7 @@ public async Task ResponseBody_ClientDisconnectsBeforeSecondWriteAsync_WriteComp var response = await responseTask; response.EnsureSuccessStatusCode(); response.Dispose(); - await disconnectCts.Task.WaitAsync(DefaultTimeout); + await disconnectCts.Task.DefaultTimeout(); } // It can take several tries before Write notices the disconnect. diff --git a/src/Servers/HttpSys/test/FunctionalTests/ResponseBodyTests.cs b/src/Servers/HttpSys/test/FunctionalTests/ResponseBodyTests.cs index 30a2a9b20c04..cef27f07665b 100644 --- a/src/Servers/HttpSys/test/FunctionalTests/ResponseBodyTests.cs +++ b/src/Servers/HttpSys/test/FunctionalTests/ResponseBodyTests.cs @@ -32,7 +32,7 @@ public async Task ResponseBody_StartAsync_LocksHeadersAndTriggersOnStarting() await httpContext.Response.StartAsync(); Assert.True(httpContext.Response.HasStarted); Assert.True(httpContext.Response.Headers.IsReadOnly); - await startingTcs.Task.WaitAsync(DefaultTimeout); + await startingTcs.Task.DefaultTimeout(); await httpContext.Response.WriteAsync("Hello World"); })) { @@ -61,8 +61,8 @@ public async Task ResponseBody_CompleteAsync_TriggersOnStartingAndLocksHeaders() await httpContext.Response.CompleteAsync(); Assert.True(httpContext.Response.HasStarted); Assert.True(httpContext.Response.Headers.IsReadOnly); - await startingTcs.Task.WaitAsync(DefaultTimeout); - await responseReceived.Task.WaitAsync(DefaultTimeout); + await startingTcs.Task.DefaultTimeout(); + await responseReceived.Task.DefaultTimeout(); })) { var response = await SendRequestAsync(address); @@ -83,7 +83,7 @@ public async Task ResponseBody_CompleteAsync_FlushesThePipe() var memory = writer.GetMemory(); writer.Advance(memory.Length); await httpContext.Response.CompleteAsync(); - await responseReceived.Task.WaitAsync(DefaultTimeout); + await responseReceived.Task.DefaultTimeout(); })) { var response = await SendRequestAsync(address); diff --git a/src/Servers/HttpSys/test/FunctionalTests/ResponseSendFileTests.cs b/src/Servers/HttpSys/test/FunctionalTests/ResponseSendFileTests.cs index 763f55f089c8..0550231d299d 100644 --- a/src/Servers/HttpSys/test/FunctionalTests/ResponseSendFileTests.cs +++ b/src/Servers/HttpSys/test/FunctionalTests/ResponseSendFileTests.cs @@ -387,7 +387,7 @@ public async Task ResponseSendFileWriteExceptions_FirstCallWithCanceledCancellat }, options => options.ThrowWriteExceptions = true)) { await Assert.ThrowsAsync(() => SendRequestAsync(address)); - await testComplete.Task.WaitAsync(DefaultTimeout); + await testComplete.Task.DefaultTimeout(); } } @@ -415,7 +415,7 @@ public async Task ResponseSendFile_FirstSendWithCanceledCancellationToken_Cancel })) { await Assert.ThrowsAsync(() => SendRequestAsync(address)); - await testComplete.Task.WaitAsync(DefaultTimeout); + await testComplete.Task.DefaultTimeout(); } } @@ -442,7 +442,7 @@ public async Task ResponseSendFileExceptions_SecondSendWithCanceledCancellationT }, options => options.ThrowWriteExceptions = true)) { await Assert.ThrowsAsync(() => SendRequestAsync(address)); - await testComplete.Task.WaitAsync(DefaultTimeout); + await testComplete.Task.DefaultTimeout(); } } @@ -469,7 +469,7 @@ public async Task ResponseSendFile_SecondSendWithCanceledCancellationToken_Cance })) { await Assert.ThrowsAsync(() => SendRequestAsync(address)); - await testComplete.Task.WaitAsync(DefaultTimeout); + await testComplete.Task.DefaultTimeout(); } } @@ -515,14 +515,14 @@ await Assert.ThrowsAsync(() => { var cts = new CancellationTokenSource(); var responseTask = SendRequestAsync(address, cts.Token); - await requestReceived.Task.WaitAsync(DefaultTimeout); + await requestReceived.Task.DefaultTimeout(); // First write sends headers cts.Cancel(); await Assert.ThrowsAnyAsync(() => responseTask); requestCancelled.SetResult(0); - await testComplete.Task.WaitAsync(DefaultTimeout); - await cancellationReceived.Task.WaitAsync(DefaultTimeout); + await testComplete.Task.DefaultTimeout(); + await cancellationReceived.Task.DefaultTimeout(); } } @@ -558,14 +558,14 @@ public async Task ResponseSendFile_ClientDisconnectsBeforeFirstSend_SendComplete { var cts = new CancellationTokenSource(); var responseTask = SendRequestAsync(address, cts.Token); - await requestReceived.Task.WaitAsync(DefaultTimeout); + await requestReceived.Task.DefaultTimeout(); // First write sends headers cts.Cancel(); await Assert.ThrowsAnyAsync(() => responseTask); requestCancelled.SetResult(0); - await testComplete.Task.WaitAsync(DefaultTimeout); - await cancellationReceived.Task.WaitAsync(DefaultTimeout); + await testComplete.Task.DefaultTimeout(); + await cancellationReceived.Task.DefaultTimeout(); } } @@ -614,14 +614,14 @@ await Assert.ThrowsAsync(async () => // Drain data from the connection so that SendFileAsync can complete. var bufferTask = response.Content.LoadIntoBufferAsync(); - await firstSendComplete.Task.WaitAsync(DefaultTimeout); + await firstSendComplete.Task.DefaultTimeout(); // Abort response.Dispose(); } clientDisconnected.SetResult(0); - await testComplete.Task.WaitAsync(DefaultTimeout); - await cancellationReceived.Task.WaitAsync(DefaultTimeout); + await testComplete.Task.DefaultTimeout(); + await cancellationReceived.Task.DefaultTimeout(); } } @@ -663,14 +663,14 @@ public async Task ResponseSendFile_ClientDisconnectsBeforeSecondSend_SendComplet // Drain data from the connection so that SendFileAsync can complete. var bufferTask = response.Content.LoadIntoBufferAsync(); - await firstSendComplete.Task.WaitAsync(DefaultTimeout); + await firstSendComplete.Task.DefaultTimeout(); // Abort response.Dispose(); } clientDisconnected.SetResult(0); - await testComplete.Task.WaitAsync(DefaultTimeout); - await cancellationReceived.Task.WaitAsync(DefaultTimeout); + await testComplete.Task.DefaultTimeout(); + await cancellationReceived.Task.DefaultTimeout(); } } diff --git a/src/Servers/HttpSys/test/FunctionalTests/ResponseTrailersTests.cs b/src/Servers/HttpSys/test/FunctionalTests/ResponseTrailersTests.cs index ec45a6592731..457e4dc46504 100644 --- a/src/Servers/HttpSys/test/FunctionalTests/ResponseTrailersTests.cs +++ b/src/Servers/HttpSys/test/FunctionalTests/ResponseTrailersTests.cs @@ -229,7 +229,7 @@ public async Task ResponseTrailers_CompleteAsyncNoBody_TrailersSent() { httpContext.Response.AppendTrailer("trailername", "TrailerValue"); await httpContext.Response.CompleteAsync(); - await trailersReceived.Task.WaitAsync(DefaultTimeout); + await trailersReceived.Task.DefaultTimeout(); })) { var response = await SendRequestAsync(address); @@ -251,7 +251,7 @@ public async Task ResponseTrailers_CompleteAsyncWithBody_TrailersSent() await httpContext.Response.WriteAsync("Hello World"); httpContext.Response.AppendTrailer("TrailerName", "Trailer Value"); await httpContext.Response.CompleteAsync(); - await trailersReceived.Task.WaitAsync(DefaultTimeout); + await trailersReceived.Task.DefaultTimeout(); })) { var response = await SendRequestAsync(address); diff --git a/src/Servers/IIS/IIS/test/Common.FunctionalTests/ShutdownTests.cs b/src/Servers/IIS/IIS/test/Common.FunctionalTests/ShutdownTests.cs index 2cbf0d722c96..4d65540bcb6c 100644 --- a/src/Servers/IIS/IIS/test/Common.FunctionalTests/ShutdownTests.cs +++ b/src/Servers/IIS/IIS/test/Common.FunctionalTests/ShutdownTests.cs @@ -470,7 +470,7 @@ public async Task ClosesConnectionOnServerAbortOutOfProcess() var deploymentResult = await DeployAsync(deploymentParameters); - var response = await deploymentResult.HttpClient.GetAsync("/Abort").DefaultTimeout(); + var response = await deploymentResult.HttpClient.GetAsync("/Abort").TimeoutAfter(TimeoutExtensions.DefaultTimeoutValue); Assert.Equal(HttpStatusCode.BadGateway, response.StatusCode); // 0x80072f78 ERROR_HTTP_INVALID_SERVER_RESPONSE The server returned an invalid or unrecognized response @@ -490,7 +490,7 @@ public async Task ClosesConnectionOnServerAbortInProcess() var deploymentParameters = Fixture.GetBaseDeploymentParameters(HostingModel.InProcess); var deploymentResult = await DeployAsync(deploymentParameters); - var response = await deploymentResult.HttpClient.GetAsync("/Abort").DefaultTimeout(); + var response = await deploymentResult.HttpClient.GetAsync("/Abort").TimeoutAfter(TimeoutExtensions.DefaultTimeoutValue); Assert.True(false, "Should not reach here"); } diff --git a/src/Servers/IIS/IIS/test/IIS.Tests/ClientDisconnectTests.cs b/src/Servers/IIS/IIS/test/IIS.Tests/ClientDisconnectTests.cs index 5daebf68dbcb..ad7fc72a5a34 100644 --- a/src/Servers/IIS/IIS/test/IIS.Tests/ClientDisconnectTests.cs +++ b/src/Servers/IIS/IIS/test/IIS.Tests/ClientDisconnectTests.cs @@ -31,7 +31,7 @@ public async Task WritesSucceedAfterClientDisconnect() requestStartedCompletionSource.SetResult(true); ctx.RequestAborted.Register(() => requestAborted.SetResult(true)); - await requestAborted.Task.DefaultTimeout(); + await requestAborted.Task.TimeoutAfter(TimeoutExtensions.DefaultTimeoutValue); for (var i = 0; i < 1000; i++) { await ctx.Response.Body.WriteAsync(data); @@ -43,12 +43,12 @@ public async Task WritesSucceedAfterClientDisconnect() using (var connection = testServer.CreateConnection()) { await SendContentLength1Post(connection); - await requestStartedCompletionSource.Task.DefaultTimeout(); + await requestStartedCompletionSource.Task.TimeoutAfter(TimeoutExtensions.DefaultTimeoutValue); } - await requestAborted.Task.DefaultTimeout(); + await requestAborted.Task.TimeoutAfter(TimeoutExtensions.DefaultTimeoutValue); - await requestCompletedCompletionSource.Task.DefaultTimeout(); + await requestCompletedCompletionSource.Task.TimeoutAfter(TimeoutExtensions.DefaultTimeoutValue); } AssertConnectionDisconnectLog(); @@ -86,10 +86,10 @@ public async Task WritesCanceledWhenUsingAbortedToken() { await SendContentLength1Post(connection); - await requestStartedCompletionSource.Task.DefaultTimeout(); + await requestStartedCompletionSource.Task.TimeoutAfter(TimeoutExtensions.DefaultTimeoutValue); } - await requestCompletedCompletionSource.Task.DefaultTimeout(); + await requestCompletedCompletionSource.Task.TimeoutAfter(TimeoutExtensions.DefaultTimeoutValue); Assert.IsType(exception); } @@ -124,10 +124,10 @@ public async Task ReadThrowsAfterClientDisconnect() using (var connection = testServer.CreateConnection()) { await SendContentLength1Post(connection); - await requestStartedCompletionSource.Task.DefaultTimeout(); + await requestStartedCompletionSource.Task.TimeoutAfter(TimeoutExtensions.DefaultTimeoutValue); } - await requestCompletedCompletionSource.Task.DefaultTimeout(); + await requestCompletedCompletionSource.Task.TimeoutAfter(TimeoutExtensions.DefaultTimeoutValue); } Assert.IsType(exception); @@ -168,9 +168,9 @@ public async Task WriterThrowsCanceledException() { await SendContentLength1Post(connection); - await requestStartedCompletionSource.Task.DefaultTimeout(); + await requestStartedCompletionSource.Task.TimeoutAfter(TimeoutExtensions.DefaultTimeoutValue); cancellationTokenSource.Cancel(); - await requestCompletedCompletionSource.Task.DefaultTimeout(); + await requestCompletedCompletionSource.Task.TimeoutAfter(TimeoutExtensions.DefaultTimeoutValue); } Assert.IsType(exception); @@ -207,9 +207,9 @@ public async Task ReaderThrowsCanceledException() using (var connection = testServer.CreateConnection()) { await SendContentLength1Post(connection); - await readIsAsyncCompletionSource.Task.DefaultTimeout(); + await readIsAsyncCompletionSource.Task.TimeoutAfter(TimeoutExtensions.DefaultTimeoutValue); cancellationTokenSource.Cancel(); - await requestCompletedCompletionSource.Task.DefaultTimeout(); + await requestCompletedCompletionSource.Task.TimeoutAfter(TimeoutExtensions.DefaultTimeoutValue); } try @@ -268,7 +268,7 @@ await connection.Receive( ); } - await requestCompletedCompletionSource.Task.DefaultTimeout(); + await requestCompletedCompletionSource.Task.TimeoutAfter(TimeoutExtensions.DefaultTimeoutValue); } Assert.IsType(exception); @@ -311,7 +311,7 @@ await connection.Receive( ); } - await requestCompletedCompletionSource.Task.DefaultTimeout(); + await requestCompletedCompletionSource.Task.TimeoutAfter(TimeoutExtensions.DefaultTimeoutValue); } } } diff --git a/src/Servers/IIS/IIS/test/IIS.Tests/ResponseAbortTests.cs b/src/Servers/IIS/IIS/test/IIS.Tests/ResponseAbortTests.cs index 4c50dba7346e..f39410afa1f4 100644 --- a/src/Servers/IIS/IIS/test/IIS.Tests/ResponseAbortTests.cs +++ b/src/Servers/IIS/IIS/test/IIS.Tests/ResponseAbortTests.cs @@ -41,7 +41,7 @@ public async Task ClosesAfterDataSent() async ctx => { await ctx.Response.WriteAsync("Abort"); await ctx.Response.Body.FlushAsync(); - await bodyReceived.Task.DefaultTimeout(); + await bodyReceived.Task.TimeoutAfter(TimeoutExtensions.DefaultTimeoutValue); ctx.Abort(); }, LoggerFactory)) { diff --git a/src/Servers/IIS/IIS/test/IISExpress.FunctionalTests/InProcess/AppOfflineIISExpressTests.cs b/src/Servers/IIS/IIS/test/IISExpress.FunctionalTests/InProcess/AppOfflineIISExpressTests.cs index 1ae8c7443115..04c9dd48de35 100644 --- a/src/Servers/IIS/IIS/test/IISExpress.FunctionalTests/InProcess/AppOfflineIISExpressTests.cs +++ b/src/Servers/IIS/IIS/test/IISExpress.FunctionalTests/InProcess/AppOfflineIISExpressTests.cs @@ -44,7 +44,7 @@ public async Task AppOfflineDroppedWhileSiteStarting_SiteShutsDown_InProcess() try { - await runningTask.DefaultTimeout(); + await runningTask.TimeoutAfter(TimeoutExtensions.DefaultTimeoutValue); // if AssertAppOffline succeeded ANCM have picked up app_offline before starting the app // try again diff --git a/src/Servers/IIS/IIS/test/testassets/IIS.Common.TestLib/TimeoutExtensions.cs b/src/Servers/IIS/IIS/test/testassets/IIS.Common.TestLib/TimeoutExtensions.cs index ce7175dff920..0bbffa25de9c 100644 --- a/src/Servers/IIS/IIS/test/testassets/IIS.Common.TestLib/TimeoutExtensions.cs +++ b/src/Servers/IIS/IIS/test/testassets/IIS.Common.TestLib/TimeoutExtensions.cs @@ -12,15 +12,5 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting public static class TimeoutExtensions { public static TimeSpan DefaultTimeoutValue = TimeSpan.FromSeconds(300); - - public static Task DefaultTimeout(this Task task, [CallerFilePath] string filePath = null, [CallerLineNumber] int lineNumber = -1) - { - return task.TimeoutAfter(DefaultTimeoutValue, filePath, lineNumber); - } - - public static Task DefaultTimeout(this Task task, [CallerFilePath] string filePath = null, [CallerLineNumber] int lineNumber = -1) - { - return task.TimeoutAfter(DefaultTimeoutValue, filePath, lineNumber); - } } } diff --git a/src/Servers/Kestrel/Core/test/ConcurrentPipeWriterTests.cs b/src/Servers/Kestrel/Core/test/ConcurrentPipeWriterTests.cs index 246795b355e6..47ec3f3747da 100644 --- a/src/Servers/Kestrel/Core/test/ConcurrentPipeWriterTests.cs +++ b/src/Servers/Kestrel/Core/test/ConcurrentPipeWriterTests.cs @@ -7,6 +7,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.PipeWriterHelpers; +using Microsoft.AspNetCore.Testing; using Xunit; namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests diff --git a/src/Servers/Kestrel/Core/test/MessageBodyTests.cs b/src/Servers/Kestrel/Core/test/MessageBodyTests.cs index 72032be1dba7..26f591114983 100644 --- a/src/Servers/Kestrel/Core/test/MessageBodyTests.cs +++ b/src/Servers/Kestrel/Core/test/MessageBodyTests.cs @@ -12,6 +12,7 @@ using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure; +using Microsoft.AspNetCore.Testing; using Moq; using Xunit; using Xunit.Sdk; diff --git a/src/Servers/Kestrel/Transport.Quic/test/QuicTransportFactoryTests.cs b/src/Servers/Kestrel/Transport.Quic/test/QuicTransportFactoryTests.cs index b1c44d1f4886..69aabd26df51 100644 --- a/src/Servers/Kestrel/Transport.Quic/test/QuicTransportFactoryTests.cs +++ b/src/Servers/Kestrel/Transport.Quic/test/QuicTransportFactoryTests.cs @@ -8,6 +8,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Server.Kestrel.Transport.Experimental.Quic; +using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using Xunit; diff --git a/src/Servers/Kestrel/samples/http2cat/http2cat.csproj b/src/Servers/Kestrel/samples/http2cat/http2cat.csproj index dfe7fddd9ab5..a963a5d5c8d7 100644 --- a/src/Servers/Kestrel/samples/http2cat/http2cat.csproj +++ b/src/Servers/Kestrel/samples/http2cat/http2cat.csproj @@ -22,6 +22,7 @@ + @@ -35,9 +36,5 @@ - - - - diff --git a/src/Servers/Kestrel/shared/test/TaskTimeoutExtensions.cs b/src/Servers/Kestrel/shared/test/TaskTimeoutExtensions.cs deleted file mode 100644 index f8b4df600a00..000000000000 --- a/src/Servers/Kestrel/shared/test/TaskTimeoutExtensions.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using Microsoft.AspNetCore.Testing; - -namespace System.Threading.Tasks -{ - public static class TaskTimeoutExtensions - { - public static Task DefaultTimeout(this ValueTask task) - { - return task.AsTask().WaitAsync(TestConstants.DefaultTimeout); - } - - public static Task DefaultTimeout(this ValueTask task) - { - return task.AsTask().WaitAsync(TestConstants.DefaultTimeout); - } - - public static Task DefaultTimeout(this Task task) - { - return task.WaitAsync(TestConstants.DefaultTimeout); - } - - public static Task DefaultTimeout(this Task task) - { - return task.WaitAsync(TestConstants.DefaultTimeout); - } - } -} diff --git a/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2KeepAliveTests.cs b/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2KeepAliveTests.cs index 71d2bcbbba80..13c96fa983fc 100644 --- a/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2KeepAliveTests.cs +++ b/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2KeepAliveTests.cs @@ -5,6 +5,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2; +using Microsoft.AspNetCore.Testing; using Xunit; namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests diff --git a/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http3/Http3ConnectionTests.cs b/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http3/Http3ConnectionTests.cs index 19bf3cb2e936..704ea627583b 100644 --- a/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http3/Http3ConnectionTests.cs +++ b/src/Servers/Kestrel/test/InMemory.FunctionalTests/Http3/Http3ConnectionTests.cs @@ -9,6 +9,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Connections; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http3; +using Microsoft.AspNetCore.Testing; using Microsoft.Net.Http.Headers; using Xunit; diff --git a/src/Servers/Kestrel/test/InMemory.FunctionalTests/TestTransport/InMemoryHttpClientSlim.cs b/src/Servers/Kestrel/test/InMemory.FunctionalTests/TestTransport/InMemoryHttpClientSlim.cs index 1d2d7ab7fa6c..8a25a50553c9 100644 --- a/src/Servers/Kestrel/test/InMemory.FunctionalTests/TestTransport/InMemoryHttpClientSlim.cs +++ b/src/Servers/Kestrel/test/InMemory.FunctionalTests/TestTransport/InMemoryHttpClientSlim.cs @@ -10,6 +10,7 @@ using System.Security.Authentication; using System.Text; using System.Threading.Tasks; +using Microsoft.AspNetCore.Testing; namespace Microsoft.AspNetCore.Server.Kestrel.InMemory.FunctionalTests.TestTransport { diff --git a/src/Servers/Kestrel/test/Interop.FunctionalTests/Interop.FunctionalTests.csproj b/src/Servers/Kestrel/test/Interop.FunctionalTests/Interop.FunctionalTests.csproj index 32f7901f3e0f..d022c45b4e6c 100644 --- a/src/Servers/Kestrel/test/Interop.FunctionalTests/Interop.FunctionalTests.csproj +++ b/src/Servers/Kestrel/test/Interop.FunctionalTests/Interop.FunctionalTests.csproj @@ -12,7 +12,6 @@ - diff --git a/src/Shared/Http2cat/Http2Utilities.cs b/src/Shared/Http2cat/Http2Utilities.cs index 07c81d49c22d..953ddac30e6b 100644 --- a/src/Shared/Http2cat/Http2Utilities.cs +++ b/src/Shared/Http2cat/Http2Utilities.cs @@ -18,6 +18,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure; +using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Logging; using Microsoft.Net.Http.Headers; using IHttpHeadersHandler = System.Net.Http.IHttpHeadersHandler; diff --git a/src/Shared/Http2cat/TaskTimeoutExtensions.cs b/src/Shared/Http2cat/TaskTimeoutExtensions.cs deleted file mode 100644 index 73522a0b6c1b..000000000000 --- a/src/Shared/Http2cat/TaskTimeoutExtensions.cs +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System.Diagnostics; -using System.Runtime.CompilerServices; - -namespace System.Threading.Tasks -{ - internal static class TaskTimeoutExtensions - { - public static TimeSpan DefaultTimeoutTimeSpan { get; } = TimeSpan.FromSeconds(30); - - public static Task DefaultTimeout(this ValueTask task) - { - return task.AsTask().WaitAsync(DefaultTimeoutTimeSpan); - } - - public static Task DefaultTimeout(this ValueTask task) - { - return task.AsTask().WaitAsync(DefaultTimeoutTimeSpan); - } - - public static Task DefaultTimeout(this Task task) - { - return task.WaitAsync(DefaultTimeoutTimeSpan); - } - - public static Task DefaultTimeout(this Task task) - { - return task.WaitAsync(DefaultTimeoutTimeSpan); - } - - private static async Task TimeoutAfter(this Task task, TimeSpan timeout, - [CallerFilePath] string filePath = null, - [CallerLineNumber] int lineNumber = default) - { - // Don't create a timer if the task is already completed - // or the debugger is attached - if (task.IsCompleted || Debugger.IsAttached) - { - return await task; - } - - var cts = new CancellationTokenSource(); - if (task == await Task.WhenAny(task, Task.Delay(timeout, cts.Token))) - { - cts.Cancel(); - return await task; - } - else - { - throw new TimeoutException(CreateMessage(timeout, filePath, lineNumber)); - } - } - - private static async Task TimeoutAfter(this Task task, TimeSpan timeout, - [CallerFilePath] string filePath = null, - [CallerLineNumber] int lineNumber = default) - { - // Don't create a timer if the task is already completed - // or the debugger is attached - if (task.IsCompleted || Debugger.IsAttached) - { - await task; - return; - } - - var cts = new CancellationTokenSource(); - if (task == await Task.WhenAny(task, Task.Delay(timeout, cts.Token))) - { - cts.Cancel(); - await task; - } - else - { - throw new TimeoutException(CreateMessage(timeout, filePath, lineNumber)); - } - } - - private static string CreateMessage(TimeSpan timeout, string filePath, int lineNumber) - => string.IsNullOrEmpty(filePath) - ? $"The operation timed out after reaching the limit of {timeout.TotalMilliseconds}ms." - : $"The operation at {filePath}:{lineNumber} timed out after reaching the limit of {timeout.TotalMilliseconds}ms."; - } -} diff --git a/src/Testing/src/TaskExtensions.cs b/src/Testing/src/TaskExtensions.cs index a927b44ee2b6..ff6b88aaeace 100644 --- a/src/Testing/src/TaskExtensions.cs +++ b/src/Testing/src/TaskExtensions.cs @@ -12,6 +12,28 @@ namespace Microsoft.AspNetCore.Testing { public static class TaskExtensions { + public static TimeSpan DefaultTimeoutTimeSpan { get; } = TimeSpan.FromSeconds(30); + + public static Task DefaultTimeout(this ValueTask task) + { + return task.AsTask().TimeoutAfter(DefaultTimeoutTimeSpan); + } + + public static Task DefaultTimeout(this ValueTask task) + { + return task.AsTask().TimeoutAfter(DefaultTimeoutTimeSpan); + } + + public static Task DefaultTimeout(this Task task) + { + return task.TimeoutAfter(DefaultTimeoutTimeSpan); + } + + public static Task DefaultTimeout(this Task task) + { + return task.TimeoutAfter(DefaultTimeoutTimeSpan); + } + [SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")] public static async Task TimeoutAfter(this Task task, TimeSpan timeout, [CallerFilePath] string filePath = null, @@ -23,7 +45,16 @@ public static async Task TimeoutAfter(this Task task, TimeSpan timeout, { return await task; } - +#if NET6_0 + try + { + return await task.WaitAsync(timeout); + } + catch (TimeoutException) + { + throw new TimeoutException(CreateMessage(timeout, filePath, lineNumber)); + } +#else var cts = new CancellationTokenSource(); if (task == await Task.WhenAny(task, Task.Delay(timeout, cts.Token))) { @@ -34,6 +65,7 @@ public static async Task TimeoutAfter(this Task task, TimeSpan timeout, { throw new TimeoutException(CreateMessage(timeout, filePath, lineNumber)); } +#endif } [SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")] @@ -48,7 +80,16 @@ public static async Task TimeoutAfter(this Task task, TimeSpan timeout, await task; return; } - +#if NET6_0 + try + { + await task.WaitAsync(timeout); + } + catch (TimeoutException) + { + throw new TimeoutException(CreateMessage(timeout, filePath, lineNumber)); + } +#else var cts = new CancellationTokenSource(); if (task == await Task.WhenAny(task, Task.Delay(timeout, cts.Token))) { @@ -59,6 +100,7 @@ public static async Task TimeoutAfter(this Task task, TimeSpan timeout, { throw new TimeoutException(CreateMessage(timeout, filePath, lineNumber)); } +#endif } private static string CreateMessage(TimeSpan timeout, string filePath, int lineNumber) From 186a4884372dbb298ffcbc231b11e52ef8233b2b Mon Sep 17 00:00:00 2001 From: Laszlo Deak Date: Fri, 9 Apr 2021 22:13:06 +0200 Subject: [PATCH 3/7] Consolidating ConcurrencyLimiter OrTimeout extension methods --- .../test/MiddlewareTests.cs | 9 ++-- .../test/PolicyTests/QueuePolicyTests.cs | 9 ++-- .../ResettableBooleanCompletionSourceTests.cs | 5 ++- .../ConcurrencyLimiter/test/TaskExtensions.cs | 29 ------------- src/Testing/src/TaskExtensions.cs | 41 +++++++++++++++---- 5 files changed, 45 insertions(+), 48 deletions(-) diff --git a/src/Middleware/ConcurrencyLimiter/test/MiddlewareTests.cs b/src/Middleware/ConcurrencyLimiter/test/MiddlewareTests.cs index 79e04036db36..952ea43e55f6 100644 --- a/src/Middleware/ConcurrencyLimiter/test/MiddlewareTests.cs +++ b/src/Middleware/ConcurrencyLimiter/test/MiddlewareTests.cs @@ -4,6 +4,7 @@ using System; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Testing; using Xunit; namespace Microsoft.AspNetCore.ConcurrencyLimiter.Tests @@ -41,7 +42,7 @@ public async Task RequestRejectsIfQueueReturnsFalse() }); var context = new DefaultHttpContext(); - await middleware.Invoke(context).OrTimeout(); + await middleware.Invoke(context).DefaultTimeout(); Assert.True(onRejectedInvoked); Assert.Equal(StatusCodes.Status503ServiceUnavailable, context.Response.StatusCode); } @@ -57,7 +58,7 @@ public async Task RequestsDoesNotEnterIfQueueFull() throw new DivideByZeroException(); }); - await middleware.Invoke(new DefaultHttpContext()).OrTimeout(); + await middleware.Invoke(new DefaultHttpContext()).DefaultTimeout(); } [Fact] @@ -117,7 +118,7 @@ public async Task QueueOnExitCalledEvenIfNextErrors() }); Assert.Equal(0, testQueue.QueuedRequests); - await Assert.ThrowsAsync(() => middleware.Invoke(new DefaultHttpContext())).OrTimeout(); + await Assert.ThrowsAsync(() => middleware.Invoke(new DefaultHttpContext())).DefaultTimeout(); Assert.Equal(0, testQueue.QueuedRequests); Assert.True(flag); @@ -162,7 +163,7 @@ public async Task ExceptionThrownDuringOnRejected() // the second request is rejected with a 503 error. During the rejection, an error occurs var context = new DefaultHttpContext(); - await Assert.ThrowsAsync(() => middleware.Invoke(context)).OrTimeout(); + await Assert.ThrowsAsync(() => middleware.Invoke(context)).DefaultTimeout(); Assert.Equal(StatusCodes.Status503ServiceUnavailable, context.Response.StatusCode); Assert.Equal(1, concurrent); Assert.Equal(0, testQueue.QueuedRequests); diff --git a/src/Middleware/ConcurrencyLimiter/test/PolicyTests/QueuePolicyTests.cs b/src/Middleware/ConcurrencyLimiter/test/PolicyTests/QueuePolicyTests.cs index 8d569322b7d7..42fb7a37ef48 100644 --- a/src/Middleware/ConcurrencyLimiter/test/PolicyTests/QueuePolicyTests.cs +++ b/src/Middleware/ConcurrencyLimiter/test/PolicyTests/QueuePolicyTests.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Threading.Tasks; +using Microsoft.AspNetCore.Testing; using Xunit; namespace Microsoft.AspNetCore.ConcurrencyLimiter.Tests.PolicyTests @@ -27,13 +28,13 @@ public void DoesNotWaitIfSpaceAvailable() public async Task WaitsIfNoSpaceAvailable() { using var s = TestUtils.CreateQueuePolicy(1); - Assert.True(await s.TryEnterAsync().OrTimeout()); + Assert.True(await s.TryEnterAsync().DefaultTimeout()); var waitingTask = s.TryEnterAsync(); Assert.False(waitingTask.IsCompleted); s.OnExit(); - Assert.True(await waitingTask.OrTimeout()); + Assert.True(await waitingTask.DefaultTimeout()); } [Fact] @@ -63,8 +64,8 @@ public async Task IsEncapsulated() using var s1 = TestUtils.CreateQueuePolicy(1); using var s2 = TestUtils.CreateQueuePolicy(1); - Assert.True(await s1.TryEnterAsync().OrTimeout()); - Assert.True(await s2.TryEnterAsync().OrTimeout()); + Assert.True(await s1.TryEnterAsync().DefaultTimeout()); + Assert.True(await s2.TryEnterAsync().DefaultTimeout()); } } } diff --git a/src/Middleware/ConcurrencyLimiter/test/PolicyTests/ResettableBooleanCompletionSourceTests.cs b/src/Middleware/ConcurrencyLimiter/test/PolicyTests/ResettableBooleanCompletionSourceTests.cs index c20ea3e60ddb..79d36edfc4ca 100644 --- a/src/Middleware/ConcurrencyLimiter/test/PolicyTests/ResettableBooleanCompletionSourceTests.cs +++ b/src/Middleware/ConcurrencyLimiter/test/PolicyTests/ResettableBooleanCompletionSourceTests.cs @@ -4,6 +4,7 @@ using System; using System.Threading; using System.Threading.Tasks; +using Microsoft.AspNetCore.Testing; using Xunit; namespace Microsoft.AspNetCore.ConcurrencyLimiter.Tests.PolicyTests @@ -110,12 +111,12 @@ async Task AwaitAndBlock() var task = AwaitAndBlock(); - await Task.Run(() => tcs.Complete(true)).OrTimeout(); + await Task.Run(() => tcs.Complete(true)).DefaultTimeout(); Assert.False(task.IsCompleted); mre.Set(); - await task.OrTimeout(); + await task.DefaultTimeout(); } } } diff --git a/src/Middleware/ConcurrencyLimiter/test/TaskExtensions.cs b/src/Middleware/ConcurrencyLimiter/test/TaskExtensions.cs index 52ec0c4303a2..0f9c171d18c4 100644 --- a/src/Middleware/ConcurrencyLimiter/test/TaskExtensions.cs +++ b/src/Middleware/ConcurrencyLimiter/test/TaskExtensions.cs @@ -3,7 +3,6 @@ using System.Diagnostics; using System.Runtime.CompilerServices; -using Microsoft.AspNetCore.Testing; namespace System.Threading.Tasks { @@ -14,34 +13,6 @@ namespace System.Threading.Tasks #endif static class TaskExtensions { - private const int DefaultTimeout = 30 * 1000; - - public static Task OrTimeout(this Task task, int milliseconds = DefaultTimeout, [CallerMemberName] string memberName = null, [CallerFilePath] string filePath = null, [CallerLineNumber] int? lineNumber = null) - { - return OrTimeout(task, new TimeSpan(0, 0, 0, 0, milliseconds), memberName, filePath, lineNumber); - } - - public static Task OrTimeout(this Task task, TimeSpan timeout, [CallerMemberName] string memberName = null, [CallerFilePath] string filePath = null, [CallerLineNumber] int? lineNumber = null) - { - return task.TimeoutAfter(timeout, filePath, lineNumber ?? 0); - } - - public static Task OrTimeout(this ValueTask task, int milliseconds = DefaultTimeout, [CallerMemberName] string memberName = null, [CallerFilePath] string filePath = null, [CallerLineNumber] int? lineNumber = null) => - OrTimeout(task, new TimeSpan(0, 0, 0, 0, milliseconds), memberName, filePath, lineNumber); - - public static Task OrTimeout(this ValueTask task, TimeSpan timeout, [CallerMemberName] string memberName = null, [CallerFilePath] string filePath = null, [CallerLineNumber] int? lineNumber = null) => - task.AsTask().OrTimeout(timeout, memberName, filePath, lineNumber); - - public static Task OrTimeout(this Task task, int milliseconds = DefaultTimeout, [CallerMemberName] string memberName = null, [CallerFilePath] string filePath = null, [CallerLineNumber] int? lineNumber = null) - { - return OrTimeout(task, new TimeSpan(0, 0, 0, 0, milliseconds), memberName, filePath, lineNumber); - } - - public static Task OrTimeout(this Task task, TimeSpan timeout, [CallerMemberName] string memberName = null, [CallerFilePath] string filePath = null, [CallerLineNumber] int? lineNumber = null) - { - return task.TimeoutAfter(timeout, filePath, lineNumber ?? 0); - } - public static async Task OrThrowIfOtherFails(this Task task, Task otherTask) { var completed = await Task.WhenAny(task, otherTask); diff --git a/src/Testing/src/TaskExtensions.cs b/src/Testing/src/TaskExtensions.cs index ff6b88aaeace..1b2a650b41f6 100644 --- a/src/Testing/src/TaskExtensions.cs +++ b/src/Testing/src/TaskExtensions.cs @@ -12,28 +12,51 @@ namespace Microsoft.AspNetCore.Testing { public static class TaskExtensions { - public static TimeSpan DefaultTimeoutTimeSpan { get; } = TimeSpan.FromSeconds(30); + private const int DefaultTimeoutDuration = 30 * 1000; - public static Task DefaultTimeout(this ValueTask task) + public static TimeSpan DefaultTimeoutTimeSpan { get; } = TimeSpan.FromMilliseconds(DefaultTimeoutDuration); + + public static Task DefaultTimeout(this Task task, int milliseconds = DefaultTimeoutDuration, [CallerFilePath] string filePath = null, [CallerLineNumber] int lineNumber = default) + { + return task.TimeoutAfter(TimeSpan.FromMilliseconds(milliseconds), filePath, lineNumber); + } + + public static Task DefaultTimeout(this Task task, TimeSpan timeout, [CallerFilePath] string filePath = null, [CallerLineNumber] int lineNumber = default) + { + return task.TimeoutAfter(timeout, filePath, lineNumber); + } + + public static Task DefaultTimeout(this ValueTask task, int milliseconds = DefaultTimeoutDuration, [CallerFilePath] string filePath = null, [CallerLineNumber] int lineNumber = default) { - return task.AsTask().TimeoutAfter(DefaultTimeoutTimeSpan); + return task.AsTask().TimeoutAfter(TimeSpan.FromMilliseconds(milliseconds), filePath, lineNumber); } - public static Task DefaultTimeout(this ValueTask task) + public static Task DefaultTimeout(this ValueTask task, TimeSpan timeout, [CallerFilePath] string filePath = null, [CallerLineNumber] int lineNumber = default) { - return task.AsTask().TimeoutAfter(DefaultTimeoutTimeSpan); + return task.AsTask().TimeoutAfter(timeout, filePath, lineNumber); } - public static Task DefaultTimeout(this Task task) + public static Task DefaultTimeout(this Task task, int milliseconds = DefaultTimeoutDuration, [CallerFilePath] string filePath = null, [CallerLineNumber] int lineNumber = default) { - return task.TimeoutAfter(DefaultTimeoutTimeSpan); + return task.TimeoutAfter(TimeSpan.FromMilliseconds(milliseconds), filePath, lineNumber); } - public static Task DefaultTimeout(this Task task) + public static Task DefaultTimeout(this Task task, TimeSpan timeout, [CallerFilePath] string filePath = null, [CallerLineNumber] int lineNumber = default) { - return task.TimeoutAfter(DefaultTimeoutTimeSpan); + return task.TimeoutAfter(timeout, filePath, lineNumber); } + public static Task DefaultTimeout(this ValueTask task, int milliseconds = DefaultTimeoutDuration, [CallerFilePath] string filePath = null, [CallerLineNumber] int lineNumber = default) + { + return task.AsTask().TimeoutAfter(TimeSpan.FromMilliseconds(milliseconds), filePath, lineNumber); + } + + public static Task DefaultTimeout(this ValueTask task, TimeSpan timeout, [CallerFilePath] string filePath = null, [CallerLineNumber] int lineNumber = default) + { + return task.AsTask().TimeoutAfter(timeout, filePath, lineNumber); + } + + [SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")] public static async Task TimeoutAfter(this Task task, TimeSpan timeout, [CallerFilePath] string filePath = null, From 8562c7abd64cd1fb4093c654686bf56e2f969060 Mon Sep 17 00:00:00 2001 From: Laszlo Deak Date: Sat, 10 Apr 2021 19:23:57 +0200 Subject: [PATCH 4/7] Consolidate OrTimeout method calls in signlar tests --- .../FunctionalTests/HubConnectionTests.cs | 388 ++++---- .../HubProtocolVersionTests.cs | 26 +- ...HttpConnectionTests.ConnectionLifecycle.cs | 72 +- .../UnitTests/HttpConnectionTests.Helpers.cs | 3 +- .../HttpConnectionTests.Negotiate.cs | 29 +- .../HttpConnectionTests.Transport.cs | 34 +- .../test/UnitTests/HttpConnectionTests.cs | 6 +- .../HubConnectionTests.ConnectionLifecycle.cs | 129 +-- .../HubConnectionTests.Extensions.cs | 47 +- .../UnitTests/HubConnectionTests.Protocol.cs | 273 +++--- .../UnitTests/HubConnectionTests.Reconnect.cs | 109 +-- .../test/UnitTests/HubConnectionTests.cs | 162 ++-- .../UnitTests/LongPollingTransportTests.cs | 37 +- .../ServerSentEventsTransportTests.cs | 43 +- .../test/UnitTests/TimerAwaitableTests.cs | 2 +- .../test/HttpConnectionDispatcherTests.cs | 193 ++-- .../test/HttpConnectionManagerTests.cs | 16 +- .../Http.Connections/test/LongPollingTests.cs | 9 +- .../test/MapConnectionHandlerTests.cs | 4 +- .../test/ServerSentEventsTests.cs | 7 +- .../Http.Connections/test/WebSocketsTests.cs | 33 +- .../testassets/Tests.Utils/TaskExtensions.cs | 42 - .../testassets/Tests.Utils/TestClient.cs | 3 +- .../HubConnectionReceiveBenchmark.cs | 5 +- .../test/DefaultHubLifetimeManagerTests.cs | 91 +- .../server/SignalR/test/EndToEndTests.cs | 84 +- .../SignalR/test/HubConnectionHandlerTests.cs | 833 +++++++++--------- .../server/SignalR/test/HubFilterTests.cs | 183 ++-- .../test/Internal/TypedClientBuilderTests.cs | 15 +- .../SignalR/test/SerializedHubMessageTests.cs | 5 +- .../SignalR/test/WebSocketsTransportTests.cs | 24 +- .../src/HubLifetimeManagerTestBase.cs | 37 +- ...NetCore.SignalR.Specification.Tests.csproj | 1 + .../src/ScaleoutHubLifetimeManagerTests.cs | 113 +-- .../StackExchangeRedis/test/RedisEndToEnd.cs | 48 +- .../test/RedisHubLifetimeManagerTests.cs | 8 +- 36 files changed, 1542 insertions(+), 1572 deletions(-) diff --git a/src/SignalR/clients/csharp/Client/test/FunctionalTests/HubConnectionTests.cs b/src/SignalR/clients/csharp/Client/test/FunctionalTests/HubConnectionTests.cs index 17e41b4db981..236112a3ca19 100644 --- a/src/SignalR/clients/csharp/Client/test/FunctionalTests/HubConnectionTests.cs +++ b/src/SignalR/clients/csharp/Client/test/FunctionalTests/HubConnectionTests.cs @@ -97,9 +97,9 @@ public async Task CheckFixedMessage(string protocolName, HttpTransportType trans try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); - var result = await connection.InvokeAsync(nameof(TestHub.HelloWorld)).OrTimeout(); + var result = await connection.InvokeAsync(nameof(TestHub.HelloWorld)).DefaultTimeout(); Assert.Equal("Hello World!", result); } @@ -110,7 +110,7 @@ public async Task CheckFixedMessage(string protocolName, HttpTransportType trans } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -136,7 +136,7 @@ bool ExpectedError(WriteContext writeContext) try { - var ex = await Assert.ThrowsAnyAsync(() => connection.StartAsync()).OrTimeout(); + var ex = await Assert.ThrowsAnyAsync(() => connection.StartAsync()).DefaultTimeout(); Assert.Equal("The client requested version '1', but the server does not support this version.", ex.Message); } catch (Exception ex) @@ -146,7 +146,7 @@ bool ExpectedError(WriteContext writeContext) } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -166,7 +166,7 @@ public async Task ClientCanConnectToServerWithLowerMinimumProtocol() try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); } catch (Exception ex) { @@ -175,7 +175,7 @@ public async Task ClientCanConnectToServerWithLowerMinimumProtocol() } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -191,9 +191,9 @@ public async Task CanSendAndReceiveMessage(string protocolName, HttpTransportTyp var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); - var result = await connection.InvokeAsync(nameof(TestHub.Echo), originalMessage).OrTimeout(); + var result = await connection.InvokeAsync(nameof(TestHub.Echo), originalMessage).DefaultTimeout(); Assert.Equal(originalMessage, result); } @@ -204,7 +204,7 @@ public async Task CanSendAndReceiveMessage(string protocolName, HttpTransportTyp } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -219,9 +219,9 @@ public async Task CanSendNull(string protocolName) var connection = CreateHubConnection(server.Url, "/default", HttpTransportType.LongPolling, protocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); - var result = await connection.InvokeAsync(nameof(TestHub.Echo), null).OrTimeout(); + var result = await connection.InvokeAsync(nameof(TestHub.Echo), null).DefaultTimeout(); Assert.Null(result); } @@ -232,7 +232,7 @@ public async Task CanSendNull(string protocolName) } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -249,12 +249,12 @@ public async Task CanStopAndStartConnection(string protocolName, HttpTransportTy var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); - var result = await connection.InvokeAsync(nameof(TestHub.Echo), originalMessage).OrTimeout(); + await connection.StartAsync().DefaultTimeout(); + var result = await connection.InvokeAsync(nameof(TestHub.Echo), originalMessage).DefaultTimeout(); Assert.Equal(originalMessage, result); - await connection.StopAsync().OrTimeout(); - await connection.StartAsync().OrTimeout(); - result = await connection.InvokeAsync(nameof(TestHub.Echo), originalMessage).OrTimeout(); + await connection.StopAsync().DefaultTimeout(); + await connection.StartAsync().DefaultTimeout(); + result = await connection.InvokeAsync(nameof(TestHub.Echo), originalMessage).DefaultTimeout(); Assert.Equal(originalMessage, result); } catch (Exception ex) @@ -264,7 +264,7 @@ public async Task CanStopAndStartConnection(string protocolName, HttpTransportTy } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -281,14 +281,14 @@ public async Task CanAccessConnectionIdFromHubConnection(string protocolName, Ht try { Assert.Null(connection.ConnectionId); - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); var originalClientConnectionId = connection.ConnectionId; - var connectionIdFromServer = await connection.InvokeAsync(nameof(TestHub.GetCallerConnectionId)).OrTimeout(); + var connectionIdFromServer = await connection.InvokeAsync(nameof(TestHub.GetCallerConnectionId)).DefaultTimeout(); Assert.Equal(connection.ConnectionId, connectionIdFromServer); - await connection.StopAsync().OrTimeout(); + await connection.StopAsync().DefaultTimeout(); Assert.Null(connection.ConnectionId); - await connection.StartAsync().OrTimeout(); - connectionIdFromServer = await connection.InvokeAsync(nameof(TestHub.GetCallerConnectionId)).OrTimeout(); + await connection.StartAsync().DefaultTimeout(); + connectionIdFromServer = await connection.InvokeAsync(nameof(TestHub.GetCallerConnectionId)).DefaultTimeout(); Assert.NotEqual(originalClientConnectionId, connectionIdFromServer); Assert.Equal(connection.ConnectionId, connectionIdFromServer); } @@ -299,7 +299,7 @@ public async Task CanAccessConnectionIdFromHubConnection(string protocolName, Ht } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -325,7 +325,7 @@ public async Task CanStartConnectionFromClosedEvent(string protocolName, HttpTra if (!restartTcs.Task.IsCompleted) { logger.LogInformation("Restarting connection"); - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); logger.LogInformation("Restarted connection"); restartTcs.SetResult(); } @@ -340,18 +340,18 @@ public async Task CanStartConnectionFromClosedEvent(string protocolName, HttpTra try { - await connection.StartAsync().OrTimeout(); - var result = await connection.InvokeAsync(nameof(TestHub.Echo), originalMessage).OrTimeout(); + await connection.StartAsync().DefaultTimeout(); + var result = await connection.InvokeAsync(nameof(TestHub.Echo), originalMessage).DefaultTimeout(); Assert.Equal(originalMessage, result); logger.LogInformation("Stopping connection"); - await connection.StopAsync().OrTimeout(); + await connection.StopAsync().DefaultTimeout(); logger.LogInformation("Waiting for reconnect"); - await restartTcs.Task.OrTimeout(); + await restartTcs.Task.DefaultTimeout(); logger.LogInformation("Reconnection complete"); - result = await connection.InvokeAsync(nameof(TestHub.Echo), originalMessage).OrTimeout(); + result = await connection.InvokeAsync(nameof(TestHub.Echo), originalMessage).DefaultTimeout(); Assert.Equal(originalMessage, result); } @@ -362,7 +362,7 @@ public async Task CanStartConnectionFromClosedEvent(string protocolName, HttpTra } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -378,9 +378,9 @@ public async Task MethodsAreCaseInsensitive(string protocolName, HttpTransportTy var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); - var result = await connection.InvokeAsync(nameof(TestHub.Echo).ToLowerInvariant(), originalMessage).OrTimeout(); + var result = await connection.InvokeAsync(nameof(TestHub.Echo).ToLowerInvariant(), originalMessage).DefaultTimeout(); Assert.Equal(originalMessage, result); } @@ -391,7 +391,7 @@ public async Task MethodsAreCaseInsensitive(string protocolName, HttpTransportTy } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -409,20 +409,20 @@ public async Task CanInvokeFromOnHandler(string protocolName, HttpTransportType var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); var helloWorldTcs = new TaskCompletionSource(); var echoTcs = new TaskCompletionSource(); connection.On("Echo", async (message) => { echoTcs.SetResult(message); - helloWorldTcs.SetResult(await connection.InvokeAsync(nameof(TestHub.HelloWorld)).OrTimeout()); + helloWorldTcs.SetResult(await connection.InvokeAsync(nameof(TestHub.HelloWorld)).DefaultTimeout()); }); - await connection.InvokeAsync("CallEcho", originalMessage).OrTimeout(); + await connection.InvokeAsync("CallEcho", originalMessage).DefaultTimeout(); - Assert.Equal(originalMessage, await echoTcs.Task.OrTimeout()); - Assert.Equal("Hello World!", await helloWorldTcs.Task.OrTimeout()); + Assert.Equal(originalMessage, await echoTcs.Task.DefaultTimeout()); + Assert.Equal("Hello World!", await helloWorldTcs.Task.DefaultTimeout()); } catch (Exception ex) { @@ -431,7 +431,7 @@ public async Task CanInvokeFromOnHandler(string protocolName, HttpTransportType } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -447,7 +447,7 @@ public async Task StreamAsyncCoreTest(string protocolName, HttpTransportType tra var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); var expectedValue = 0; var streamTo = 5; var asyncEnumerable = connection.StreamAsyncCore("Stream", new object[] { streamTo }); @@ -466,7 +466,7 @@ public async Task StreamAsyncCoreTest(string protocolName, HttpTransportType tra } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -494,7 +494,7 @@ async IAsyncEnumerable ClientStreamData(int value) var streamTo = 5; var stream = ClientStreamData(streamTo); - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); var expectedValue = 0; var asyncEnumerable = connection.StreamAsync("StreamIAsyncConsumer", stream); await foreach (var streamValue in asyncEnumerable) @@ -512,7 +512,7 @@ async IAsyncEnumerable ClientStreamData(int value) } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -528,7 +528,7 @@ public async Task StreamAsyncTest(string protocolName, HttpTransportType transpo var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); var expectedValue = 0; var streamTo = 5; var asyncEnumerable = connection.StreamAsync("Stream", streamTo); @@ -547,7 +547,7 @@ public async Task StreamAsyncTest(string protocolName, HttpTransportType transpo } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -563,7 +563,7 @@ public async Task StreamAsyncDoesNotStartIfTokenAlreadyCanceled(string protocolN var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); var cts = new CancellationTokenSource(); cts.Cancel(); @@ -584,7 +584,7 @@ public async Task StreamAsyncDoesNotStartIfTokenAlreadyCanceled(string protocolN } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -600,7 +600,7 @@ public async Task StreamAsyncCanBeCanceled(string protocolName, HttpTransportTyp var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); var cts = new CancellationTokenSource(); @@ -626,7 +626,7 @@ await Assert.ThrowsAsync(async () => } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -648,7 +648,7 @@ bool ExpectedErrors(WriteContext writeContext) var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); var asyncEnumerable = connection.StreamAsync("StreamException"); var ex = await Assert.ThrowsAsync(async () => { @@ -668,7 +668,7 @@ bool ExpectedErrors(WriteContext writeContext) } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -686,14 +686,14 @@ public async Task CanInvokeClientMethodFromServer(string protocolName, HttpTrans var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); var tcs = new TaskCompletionSource(); connection.On("Echo", tcs.SetResult); - await connection.InvokeAsync("CallEcho", originalMessage).OrTimeout(); + await connection.InvokeAsync("CallEcho", originalMessage).DefaultTimeout(); - Assert.Equal(originalMessage, await tcs.Task.OrTimeout()); + Assert.Equal(originalMessage, await tcs.Task.DefaultTimeout()); } catch (Exception ex) { @@ -702,7 +702,7 @@ public async Task CanInvokeClientMethodFromServer(string protocolName, HttpTrans } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -732,10 +732,10 @@ public async Task InvokeNonExistantClientMethodFromServer(string protocolName, H try { - await connection.StartAsync().OrTimeout(); - await connection.InvokeAsync("CallHandlerThatDoesntExist").OrTimeout(); - await connection.DisposeAsync().OrTimeout(); - await closeTcs.Task.OrTimeout(); + await connection.StartAsync().DefaultTimeout(); + await connection.InvokeAsync("CallHandlerThatDoesntExist").DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); + await closeTcs.Task.DefaultTimeout(); } catch (Exception ex) { @@ -744,7 +744,7 @@ public async Task InvokeNonExistantClientMethodFromServer(string protocolName, H } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -760,10 +760,10 @@ public async Task CanStreamClientMethodFromServer(string protocolName, HttpTrans var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); - var channel = await connection.StreamAsChannelAsync("Stream", 5).OrTimeout(); - var results = await channel.ReadAndCollectAllAsync().OrTimeout(); + var channel = await connection.StreamAsChannelAsync("Stream", 5).DefaultTimeout(); + var results = await channel.ReadAndCollectAllAsync().DefaultTimeout(); Assert.Equal(new[] { 0, 1, 2, 3, 4 }, results.ToArray()); } @@ -774,7 +774,7 @@ public async Task CanStreamClientMethodFromServer(string protocolName, HttpTrans } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -790,18 +790,18 @@ public async Task CanStreamToAndFromClientInSameInvocation(string protocolName, var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); var channelWriter = Channel.CreateBounded(5); - var channel = await connection.StreamAsChannelAsync("StreamEcho", channelWriter.Reader).OrTimeout(); + var channel = await connection.StreamAsChannelAsync("StreamEcho", channelWriter.Reader).DefaultTimeout(); - await channelWriter.Writer.WriteAsync("1").AsTask().OrTimeout(); - Assert.Equal("1", await channel.ReadAsync().AsTask().OrTimeout()); - await channelWriter.Writer.WriteAsync("2").AsTask().OrTimeout(); - Assert.Equal("2", await channel.ReadAsync().AsTask().OrTimeout()); + await channelWriter.Writer.WriteAsync("1").AsTask().DefaultTimeout(); + Assert.Equal("1", await channel.ReadAsync().AsTask().DefaultTimeout()); + await channelWriter.Writer.WriteAsync("2").AsTask().DefaultTimeout(); + Assert.Equal("2", await channel.ReadAsync().AsTask().DefaultTimeout()); channelWriter.Writer.Complete(); - var results = await channel.ReadAndCollectAllAsync().OrTimeout(); + var results = await channel.ReadAndCollectAllAsync().DefaultTimeout(); Assert.Empty(results); } catch (Exception ex) @@ -811,7 +811,7 @@ public async Task CanStreamToAndFromClientInSameInvocation(string protocolName, } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -837,18 +837,18 @@ async IAsyncEnumerable clientStreamData() } } - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); var stream = clientStreamData(); - var channel = await connection.StreamAsChannelAsync("StreamEcho", stream).OrTimeout(); + var channel = await connection.StreamAsChannelAsync("StreamEcho", stream).DefaultTimeout(); - Assert.Equal("A", await channel.ReadAsync().AsTask().OrTimeout()); - Assert.Equal("B", await channel.ReadAsync().AsTask().OrTimeout()); - Assert.Equal("C", await channel.ReadAsync().AsTask().OrTimeout()); - Assert.Equal("D", await channel.ReadAsync().AsTask().OrTimeout()); + Assert.Equal("A", await channel.ReadAsync().AsTask().DefaultTimeout()); + Assert.Equal("B", await channel.ReadAsync().AsTask().DefaultTimeout()); + Assert.Equal("C", await channel.ReadAsync().AsTask().DefaultTimeout()); + Assert.Equal("D", await channel.ReadAsync().AsTask().DefaultTimeout()); - var results = await channel.ReadAndCollectAllAsync().OrTimeout(); + var results = await channel.ReadAndCollectAllAsync().DefaultTimeout(); Assert.Empty(results); } catch (Exception ex) @@ -858,7 +858,7 @@ async IAsyncEnumerable clientStreamData() } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -883,13 +883,13 @@ async IAsyncEnumerable clientStreamData() } } - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); var results = new List(); var stream = clientStreamData(); var cts = new CancellationTokenSource(); var ex = await Assert.ThrowsAsync(async () => { - var channel = await connection.StreamAsChannelAsync("StreamEchoInt", stream, cts.Token).OrTimeout(); + var channel = await connection.StreamAsChannelAsync("StreamEchoInt", stream, cts.Token).DefaultTimeout(); while (await channel.WaitToReadAsync()) { @@ -911,7 +911,7 @@ async IAsyncEnumerable clientStreamData() } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -927,7 +927,7 @@ public async Task StreamAsyncCanBeCanceledThroughGetAsyncEnumerator(string proto var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); var stream = connection.StreamAsync("Stream", 1000); var results = new List(); @@ -952,7 +952,7 @@ await Assert.ThrowsAsync(async () => } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -968,18 +968,18 @@ public async Task CanCloseStreamMethodEarly(string protocolName, HttpTransportTy var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); var cts = new CancellationTokenSource(); - var channel = await connection.StreamAsChannelAsync("Stream", 1000, cts.Token).OrTimeout(); + var channel = await connection.StreamAsChannelAsync("Stream", 1000, cts.Token).DefaultTimeout(); // Wait for the server to start streaming items - await channel.WaitToReadAsync().AsTask().OrTimeout(); + await channel.WaitToReadAsync().AsTask().DefaultTimeout(); cts.Cancel(); - var results = await channel.ReadAndCollectAllAsync(suppressExceptions: true).OrTimeout(); + var results = await channel.ReadAndCollectAllAsync(suppressExceptions: true).DefaultTimeout(); Assert.True(results.Count > 0 && results.Count < 1000); @@ -993,7 +993,7 @@ public async Task CanCloseStreamMethodEarly(string protocolName, HttpTransportTy } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -1009,12 +1009,12 @@ public async Task StreamDoesNotStartIfTokenAlreadyCanceled(string protocolName, var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); var cts = new CancellationTokenSource(); cts.Cancel(); - await Assert.ThrowsAnyAsync(() => connection.StreamAsChannelAsync("Stream", 5, cts.Token).OrTimeout()); + await Assert.ThrowsAnyAsync(() => connection.StreamAsChannelAsync("Stream", 5, cts.Token).DefaultTimeout()); } catch (Exception ex) { @@ -1023,7 +1023,7 @@ public async Task StreamDoesNotStartIfTokenAlreadyCanceled(string protocolName, } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -1044,10 +1044,10 @@ bool ExpectedErrors(WriteContext writeContext) var connection = CreateHubConnection(server.Url, path, transportType, protocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); - var channel = await connection.StreamAsChannelAsync("StreamException").OrTimeout(); + await connection.StartAsync().DefaultTimeout(); + var channel = await connection.StreamAsChannelAsync("StreamException").DefaultTimeout(); - var ex = await Assert.ThrowsAsync(() => channel.ReadAndCollectAllAsync().OrTimeout()); + var ex = await Assert.ThrowsAsync(() => channel.ReadAndCollectAllAsync().DefaultTimeout()); Assert.Equal("An unexpected error occurred invoking 'StreamException' on the server. InvalidOperationException: Error occurred while streaming.", ex.Message); } catch (Exception ex) @@ -1057,7 +1057,7 @@ bool ExpectedErrors(WriteContext writeContext) } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -1072,9 +1072,9 @@ public async Task ServerThrowsHubExceptionIfHubMethodCannotBeResolved(string hub var connection = CreateHubConnection(server.Url, hubPath, transportType, hubProtocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); - var ex = await Assert.ThrowsAsync(() => connection.InvokeAsync("!@#$%")).OrTimeout(); + var ex = await Assert.ThrowsAsync(() => connection.InvokeAsync("!@#$%")).DefaultTimeout(); Assert.Equal("Failed to invoke '!@#$%' due to an error on the server. HubException: Method does not exist.", ex.Message); } catch (Exception ex) @@ -1084,7 +1084,7 @@ public async Task ServerThrowsHubExceptionIfHubMethodCannotBeResolved(string hub } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -1099,9 +1099,9 @@ public async Task ServerThrowsHubExceptionIfHubMethodCannotBeResolvedAndArgument var connection = CreateHubConnection(server.Url, hubPath, transportType, hubProtocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); - var ex = await Assert.ThrowsAsync(() => connection.InvokeAsync("!@#$%", 10, "test")).OrTimeout(); + var ex = await Assert.ThrowsAsync(() => connection.InvokeAsync("!@#$%", 10, "test")).DefaultTimeout(); Assert.Equal("Failed to invoke '!@#$%' due to an error on the server. HubException: Method does not exist.", ex.Message); } catch (Exception ex) @@ -1111,7 +1111,7 @@ public async Task ServerThrowsHubExceptionIfHubMethodCannotBeResolvedAndArgument } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -1126,9 +1126,9 @@ public async Task ServerThrowsHubExceptionOnHubMethodArgumentCountMismatch(strin var connection = CreateHubConnection(server.Url, "/default", HttpTransportType.LongPolling, hubProtocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); - var ex = await Assert.ThrowsAsync(() => connection.InvokeAsync("Echo", "p1", 42)).OrTimeout(); + var ex = await Assert.ThrowsAsync(() => connection.InvokeAsync("Echo", "p1", 42)).DefaultTimeout(); Assert.Equal("Failed to invoke 'Echo' due to an error on the server. InvalidDataException: Invocation provides 2 argument(s) but target expects 1.", ex.Message); } catch (Exception ex) @@ -1138,7 +1138,7 @@ public async Task ServerThrowsHubExceptionOnHubMethodArgumentCountMismatch(strin } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -1153,9 +1153,9 @@ public async Task ServerThrowsHubExceptionOnHubMethodArgumentTypeMismatch(string var connection = CreateHubConnection(server.Url, hubPath, transportType, hubProtocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); - var ex = await Assert.ThrowsAsync(() => connection.InvokeAsync("Echo", new[] { 42 })).OrTimeout(); + var ex = await Assert.ThrowsAsync(() => connection.InvokeAsync("Echo", new[] { 42 })).DefaultTimeout(); Assert.StartsWith("Failed to invoke 'Echo' due to an error on the server.", ex.Message); } catch (Exception ex) @@ -1165,7 +1165,7 @@ public async Task ServerThrowsHubExceptionOnHubMethodArgumentTypeMismatch(string } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -1180,10 +1180,10 @@ public async Task ServerThrowsHubExceptionIfStreamingHubMethodCannotBeResolved(s var connection = CreateHubConnection(server.Url, hubPath, transportType, hubProtocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); var channel = await connection.StreamAsChannelAsync("!@#$%"); - var ex = await Assert.ThrowsAsync(() => channel.ReadAndCollectAllAsync().OrTimeout()); + var ex = await Assert.ThrowsAsync(() => channel.ReadAndCollectAllAsync().DefaultTimeout()); Assert.Equal("Failed to invoke '!@#$%' due to an error on the server. HubException: Method does not exist.", ex.Message); } catch (Exception ex) @@ -1193,7 +1193,7 @@ public async Task ServerThrowsHubExceptionIfStreamingHubMethodCannotBeResolved(s } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -1208,10 +1208,10 @@ public async Task ServerThrowsHubExceptionOnStreamingHubMethodArgumentCountMisma var connection = CreateHubConnection(server.Url, hubPath, transportType, hubProtocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); var channel = await connection.StreamAsChannelAsync("Stream", 42, 42); - var ex = await Assert.ThrowsAsync(() => channel.ReadAndCollectAllAsync().OrTimeout()); + var ex = await Assert.ThrowsAsync(() => channel.ReadAndCollectAllAsync().DefaultTimeout()); Assert.Equal("Failed to invoke 'Stream' due to an error on the server. InvalidDataException: Invocation provides 2 argument(s) but target expects 1.", ex.Message); } catch (Exception ex) @@ -1221,7 +1221,7 @@ public async Task ServerThrowsHubExceptionOnStreamingHubMethodArgumentCountMisma } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -1236,10 +1236,10 @@ public async Task ServerThrowsHubExceptionOnStreamingHubMethodArgumentTypeMismat var connection = CreateHubConnection(server.Url, hubPath, transportType, hubProtocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); var channel = await connection.StreamAsChannelAsync("Stream", "xyz"); - var ex = await Assert.ThrowsAsync(() => channel.ReadAndCollectAllAsync().OrTimeout()); + var ex = await Assert.ThrowsAsync(() => channel.ReadAndCollectAllAsync().DefaultTimeout()); Assert.Equal("Failed to invoke 'Stream' due to an error on the server. InvalidDataException: Error binding arguments. Make sure that the types of the provided values match the types of the hub method being invoked.", ex.Message); } catch (Exception ex) @@ -1249,7 +1249,7 @@ public async Task ServerThrowsHubExceptionOnStreamingHubMethodArgumentTypeMismat } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -1264,9 +1264,9 @@ public async Task ServerThrowsHubExceptionIfNonStreamMethodInvokedWithStreamAsyn var connection = CreateHubConnection(server.Url, hubPath, transportType, hubProtocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); - var channel = await connection.StreamAsChannelAsync("HelloWorld").OrTimeout(); - var ex = await Assert.ThrowsAsync(() => channel.ReadAndCollectAllAsync()).OrTimeout(); + await connection.StartAsync().DefaultTimeout(); + var channel = await connection.StreamAsChannelAsync("HelloWorld").DefaultTimeout(); + var ex = await Assert.ThrowsAsync(() => channel.ReadAndCollectAllAsync()).DefaultTimeout(); Assert.Equal("The client attempted to invoke the non-streaming 'HelloWorld' method with a streaming invocation.", ex.Message); } catch (Exception ex) @@ -1276,7 +1276,7 @@ public async Task ServerThrowsHubExceptionIfNonStreamMethodInvokedWithStreamAsyn } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -1291,9 +1291,9 @@ public async Task ServerThrowsHubExceptionIfStreamMethodInvokedWithInvoke(string var connection = CreateHubConnection(server.Url, hubPath, transportType, hubProtocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); - var ex = await Assert.ThrowsAsync(() => connection.InvokeAsync("Stream", 3)).OrTimeout(); + var ex = await Assert.ThrowsAsync(() => connection.InvokeAsync("Stream", 3)).DefaultTimeout(); Assert.Equal("The client attempted to invoke the streaming 'Stream' method with a non-streaming invocation.", ex.Message); } catch (Exception ex) @@ -1303,7 +1303,7 @@ public async Task ServerThrowsHubExceptionIfStreamMethodInvokedWithInvoke(string } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -1318,9 +1318,9 @@ public async Task ServerThrowsHubExceptionIfBuildingAsyncEnumeratorIsNotPossible var connection = CreateHubConnection(server.Url, hubPath, transportType, hubProtocol, LoggerFactory); try { - await connection.StartAsync().OrTimeout(); - var channel = await connection.StreamAsChannelAsync("StreamBroken").OrTimeout(); - var ex = await Assert.ThrowsAsync(() => channel.ReadAndCollectAllAsync()).OrTimeout(); + await connection.StartAsync().DefaultTimeout(); + var channel = await connection.StreamAsChannelAsync("StreamBroken").DefaultTimeout(); + var ex = await Assert.ThrowsAsync(() => channel.ReadAndCollectAllAsync()).DefaultTimeout(); Assert.Equal("The value returned by the streaming method 'StreamBroken' is not a ChannelReader<> or IAsyncEnumerable<>.", ex.Message); } catch (Exception ex) @@ -1330,7 +1330,7 @@ public async Task ServerThrowsHubExceptionIfBuildingAsyncEnumeratorIsNotPossible } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -1360,15 +1360,15 @@ public async Task ServerLogsErrorIfClientInvokeCannotBeSerialized(string protoco connection.Closed += (ex) => { closedTcs.TrySetResult(ex); return Task.CompletedTask; }; try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); var result = connection.InvokeAsync(nameof(TestHub.CallWithUnserializableObject)); // The connection should close. - var exception = await closedTcs.Task.OrTimeout(); + var exception = await closedTcs.Task.DefaultTimeout(); Assert.Contains("Connection closed with an error.", exception.Message); - var hubException = await Assert.ThrowsAsync(() => result).OrTimeout(); + var hubException = await Assert.ThrowsAsync(() => result).DefaultTimeout(); Assert.Contains("Connection closed with an error.", hubException.Message); Assert.Contains(exceptionSubstring, hubException.Message); } @@ -1379,7 +1379,7 @@ public async Task ServerLogsErrorIfClientInvokeCannotBeSerialized(string protoco } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } var errorLog = server.GetLogs().SingleOrDefault(r => r.Write.EventId.Name == "FailedWritingMessage"); @@ -1414,15 +1414,15 @@ public async Task ServerLogsErrorIfReturnValueCannotBeSerialized(string protocol connection.Closed += (ex) => { closedTcs.TrySetResult(ex); return Task.CompletedTask; }; try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); - var result = connection.InvokeAsync(nameof(TestHub.GetUnserializableObject)).OrTimeout(); + var result = connection.InvokeAsync(nameof(TestHub.GetUnserializableObject)).DefaultTimeout(); // The connection should close. - var exception = await closedTcs.Task.OrTimeout(); + var exception = await closedTcs.Task.DefaultTimeout(); Assert.Contains("Connection closed with an error.", exception.Message); - var hubException = await Assert.ThrowsAsync(() => result).OrTimeout(); + var hubException = await Assert.ThrowsAsync(() => result).DefaultTimeout(); Assert.Contains("Connection closed with an error.", hubException.Message); Assert.Contains(exceptionSubstring, hubException.Message); } @@ -1433,7 +1433,7 @@ public async Task ServerLogsErrorIfReturnValueCannotBeSerialized(string protocol } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } var errorLog = server.GetLogs().SingleOrDefault(r => r.Write.EventId.Name == "FailedWritingMessage"); @@ -1453,13 +1453,13 @@ public async Task RandomGenericIsNotTreatedAsStream() await using (var server = await StartServer()) { var connection = CreateHubConnection(server.Url, hubPath, transportType, hubProtocol, LoggerFactory); - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); // List will be looked at to replace with a StreamPlaceholder and should be skipped, so an error will be thrown from the // protocol on the server when it tries to match List with a StreamPlaceholder - var hubException = await Assert.ThrowsAsync(() => connection.InvokeAsync("StreamEcho", new List { "1", "2" }).OrTimeout()); + var hubException = await Assert.ThrowsAsync(() => connection.InvokeAsync("StreamEcho", new List { "1", "2" }).DefaultTimeout()); Assert.Equal("Failed to invoke 'StreamEcho' due to an error on the server. InvalidDataException: Invocation provides 1 argument(s) but target expects 0.", hubException.Message); - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -1485,8 +1485,8 @@ async Task AccessTokenProvider() .Build(); try { - await hubConnection.StartAsync().OrTimeout(); - var message = await hubConnection.InvokeAsync(nameof(TestHub.Echo), "Hello, World!").OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); + var message = await hubConnection.InvokeAsync(nameof(TestHub.Echo), "Hello, World!").DefaultTimeout(); Assert.Equal("Hello, World!", message); } catch (Exception ex) @@ -1496,7 +1496,7 @@ async Task AccessTokenProvider() } finally { - await hubConnection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); } } } @@ -1518,12 +1518,12 @@ bool ExpectedErrors(WriteContext writeContext) .Build(); try { - var ex = await Assert.ThrowsAnyAsync(() => hubConnection.StartAsync().OrTimeout()); + var ex = await Assert.ThrowsAnyAsync(() => hubConnection.StartAsync().DefaultTimeout()); Assert.Equal("Response status code does not indicate success: 401 (Unauthorized).", ex.Message); } finally { - await hubConnection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); } } } @@ -1540,8 +1540,8 @@ public async Task ClientCanUseJwtBearerTokenForAuthenticationWhenRedirected(Http .Build(); try { - await hubConnection.StartAsync().OrTimeout(); - var message = await hubConnection.InvokeAsync(nameof(TestHub.Echo), "Hello, World!").OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); + var message = await hubConnection.InvokeAsync(nameof(TestHub.Echo), "Hello, World!").DefaultTimeout(); Assert.Equal("Hello, World!", message); } catch (Exception ex) @@ -1551,7 +1551,7 @@ public async Task ClientCanUseJwtBearerTokenForAuthenticationWhenRedirected(Http } finally { - await hubConnection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); } } } @@ -1572,8 +1572,8 @@ public async Task ClientCanSendHeaders(HttpTransportType transportType) .Build(); try { - await hubConnection.StartAsync().OrTimeout(); - var headerValues = await hubConnection.InvokeAsync(nameof(TestHub.GetHeaderValues), new[] { "X-test", "X-42" }).OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); + var headerValues = await hubConnection.InvokeAsync(nameof(TestHub.GetHeaderValues), new[] { "X-test", "X-42" }).DefaultTimeout(); Assert.Equal(new[] { "42", "test" }, headerValues); } catch (Exception ex) @@ -1583,7 +1583,7 @@ public async Task ClientCanSendHeaders(HttpTransportType transportType) } finally { - await hubConnection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); } } } @@ -1603,8 +1603,8 @@ public async Task UserAgentIsSet() .Build(); try { - await hubConnection.StartAsync().OrTimeout(); - var headerValues = await hubConnection.InvokeAsync(nameof(TestHub.GetHeaderValues), new[] { "User-Agent" }).OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); + var headerValues = await hubConnection.InvokeAsync(nameof(TestHub.GetHeaderValues), new[] { "User-Agent" }).DefaultTimeout(); Assert.NotNull(headerValues); Assert.Single(headerValues); @@ -1625,7 +1625,7 @@ public async Task UserAgentIsSet() } finally { - await hubConnection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); } } } @@ -1644,8 +1644,8 @@ public async Task UserAgentCanBeCleared() .Build(); try { - await hubConnection.StartAsync().OrTimeout(); - var headerValues = await hubConnection.InvokeAsync(nameof(TestHub.GetHeaderValues), new[] { "User-Agent" }).OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); + var headerValues = await hubConnection.InvokeAsync(nameof(TestHub.GetHeaderValues), new[] { "User-Agent" }).DefaultTimeout(); Assert.NotNull(headerValues); Assert.Single(headerValues); @@ -1660,7 +1660,7 @@ public async Task UserAgentCanBeCleared() } finally { - await hubConnection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); } } } @@ -1679,8 +1679,8 @@ public async Task UserAgentCanBeSet() .Build(); try { - await hubConnection.StartAsync().OrTimeout(); - var headerValues = await hubConnection.InvokeAsync(nameof(TestHub.GetHeaderValues), new[] { "User-Agent" }).OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); + var headerValues = await hubConnection.InvokeAsync(nameof(TestHub.GetHeaderValues), new[] { "User-Agent" }).DefaultTimeout(); Assert.NotNull(headerValues); Assert.Single(headerValues); @@ -1695,7 +1695,7 @@ public async Task UserAgentCanBeSet() } finally { - await hubConnection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); } } } @@ -1719,8 +1719,8 @@ public async Task WebSocketOptionsAreApplied() .Build(); try { - await hubConnection.StartAsync().OrTimeout(); - var cookieValue = await hubConnection.InvokeAsync(nameof(TestHub.GetCookieValue), "Foo").OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); + var cookieValue = await hubConnection.InvokeAsync(nameof(TestHub.GetCookieValue), "Foo").DefaultTimeout(); Assert.Equal("Bar", cookieValue); } catch (Exception ex) @@ -1730,7 +1730,7 @@ public async Task WebSocketOptionsAreApplied() } finally { - await hubConnection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); } } } @@ -1747,8 +1747,8 @@ public async Task CookiesFromNegotiateAreAppliedToWebSockets() .Build(); try { - await hubConnection.StartAsync().OrTimeout(); - var cookieValue = await hubConnection.InvokeAsync(nameof(TestHub.GetCookieValue), "fromNegotiate").OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); + var cookieValue = await hubConnection.InvokeAsync(nameof(TestHub.GetCookieValue), "fromNegotiate").DefaultTimeout(); Assert.Equal("a value", cookieValue); } catch (Exception ex) @@ -1758,7 +1758,7 @@ public async Task CookiesFromNegotiateAreAppliedToWebSockets() } finally { - await hubConnection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); } } } @@ -1774,9 +1774,9 @@ public async Task CheckHttpConnectionFeatures() .Build(); try { - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); - var features = await hubConnection.InvokeAsync(nameof(TestHub.GetIHttpConnectionFeatureProperties)).OrTimeout(); + var features = await hubConnection.InvokeAsync(nameof(TestHub.GetIHttpConnectionFeatureProperties)).DefaultTimeout(); var localPort = features[0].GetInt64(); var remotePort = features[1].GetInt64(); var localIP = features[2].GetString(); @@ -1794,7 +1794,7 @@ public async Task CheckHttpConnectionFeatures() } finally { - await hubConnection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); } } } @@ -1813,9 +1813,9 @@ public async Task UserIdProviderCanAccessHttpContext() .Build(); try { - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); - var userIdentifier = await hubConnection.InvokeAsync(nameof(TestHub.GetUserIdentifier)).OrTimeout(); + var userIdentifier = await hubConnection.InvokeAsync(nameof(TestHub.GetUserIdentifier)).DefaultTimeout(); Assert.Equal("SuperAdmin", userIdentifier); } catch (Exception ex) @@ -1825,7 +1825,7 @@ public async Task UserIdProviderCanAccessHttpContext() } finally { - await hubConnection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); } } } @@ -1843,9 +1843,9 @@ public async Task NegotiationSkipsServerSentEventsWhenUsingBinaryProtocol() var hubConnection = hubConnectionBuilder.Build(); try { - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); - var transport = await hubConnection.InvokeAsync(nameof(TestHub.GetActiveTransportName)).OrTimeout(); + var transport = await hubConnection.InvokeAsync(nameof(TestHub.GetActiveTransportName)).DefaultTimeout(); Assert.Equal(HttpTransportType.LongPolling, transport); } catch (Exception ex) @@ -1855,7 +1855,7 @@ public async Task NegotiationSkipsServerSentEventsWhenUsingBinaryProtocol() } finally { - await hubConnection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); } } } @@ -1890,7 +1890,7 @@ public async Task StopCausesPollToReturnImmediately() { // if we completed running before the poll or after the poll started then the task // might complete successfully - await pollTracker.ActivePoll.OrTimeout(); + await pollTracker.ActivePoll.DefaultTimeout(); } catch (OperationCanceledException) { @@ -1939,17 +1939,17 @@ bool ExpectedErrors(WriteContext writeContext) }; - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); var initialConnectionId = connection.ConnectionId; connection.OnServerTimeout(); - await reconnectingTcs.Task.OrTimeout(); - var newConnectionId = await reconnectedTcs.Task.OrTimeout(); + await reconnectingTcs.Task.DefaultTimeout(); + var newConnectionId = await reconnectedTcs.Task.DefaultTimeout(); Assert.NotEqual(initialConnectionId, newConnectionId); Assert.Equal(connection.ConnectionId, newConnectionId); - var result = await connection.InvokeAsync(nameof(TestHub.Echo), echoMessage).OrTimeout(); + var result = await connection.InvokeAsync(nameof(TestHub.Echo), echoMessage).DefaultTimeout(); Assert.Equal(echoMessage, result); } catch (Exception ex) @@ -1959,7 +1959,7 @@ bool ExpectedErrors(WriteContext writeContext) } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -1999,17 +1999,17 @@ bool ExpectedErrors(WriteContext writeContext) return Task.CompletedTask; }; - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); var initialConnectionId = connection.ConnectionId; connection.OnServerTimeout(); - await reconnectingTcs.Task.OrTimeout(); - var newConnectionId = await reconnectedTcs.Task.OrTimeout(); + await reconnectingTcs.Task.DefaultTimeout(); + var newConnectionId = await reconnectedTcs.Task.DefaultTimeout(); Assert.NotEqual(initialConnectionId, newConnectionId); Assert.Equal(connection.ConnectionId, newConnectionId); - var result = await connection.InvokeAsync(nameof(TestHub.Echo), echoMessage).OrTimeout(); + var result = await connection.InvokeAsync(nameof(TestHub.Echo), echoMessage).DefaultTimeout(); Assert.Equal(echoMessage, result); } catch (Exception ex) @@ -2019,7 +2019,7 @@ bool ExpectedErrors(WriteContext writeContext) } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -2065,17 +2065,17 @@ bool ExpectedErrors(WriteContext writeContext) return Task.CompletedTask; }; - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); Assert.Null(connection.ConnectionId); connection.OnServerTimeout(); - await reconnectingTcs.Task.OrTimeout(); - var newConnectionId = await reconnectedTcs.Task.OrTimeout(); + await reconnectingTcs.Task.DefaultTimeout(); + var newConnectionId = await reconnectedTcs.Task.DefaultTimeout(); Assert.Null(newConnectionId); Assert.Null(connection.ConnectionId); - var result = await connection.InvokeAsync(nameof(TestHub.Echo), echoMessage).OrTimeout(); + var result = await connection.InvokeAsync(nameof(TestHub.Echo), echoMessage).DefaultTimeout(); Assert.Equal(echoMessage, result); } catch (Exception ex) @@ -2085,7 +2085,7 @@ bool ExpectedErrors(WriteContext writeContext) } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } diff --git a/src/SignalR/clients/csharp/Client/test/FunctionalTests/HubProtocolVersionTests.cs b/src/SignalR/clients/csharp/Client/test/FunctionalTests/HubProtocolVersionTests.cs index fbf5ea3fd6be..8c779c59bf8d 100644 --- a/src/SignalR/clients/csharp/Client/test/FunctionalTests/HubProtocolVersionTests.cs +++ b/src/SignalR/clients/csharp/Client/test/FunctionalTests/HubProtocolVersionTests.cs @@ -45,9 +45,9 @@ public async Task ClientUsingOldCallWithOriginalProtocol(HttpTransportType trans try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); - var result = await connection.InvokeAsync(nameof(VersionHub.Echo), "Hello World!").OrTimeout(); + var result = await connection.InvokeAsync(nameof(VersionHub.Echo), "Hello World!").DefaultTimeout(); Assert.Equal("Hello World!", result); } @@ -58,7 +58,7 @@ public async Task ClientUsingOldCallWithOriginalProtocol(HttpTransportType trans } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -78,9 +78,9 @@ public async Task ClientUsingOldCallWithNewProtocol(HttpTransportType transportT try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); - var result = await connection.InvokeAsync(nameof(VersionHub.Echo), "Hello World!").OrTimeout(); + var result = await connection.InvokeAsync(nameof(VersionHub.Echo), "Hello World!").DefaultTimeout(); Assert.Equal("Hello World!", result); } @@ -91,7 +91,7 @@ public async Task ClientUsingOldCallWithNewProtocol(HttpTransportType transportT } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -127,10 +127,10 @@ public async Task ClientUsingNewCallWithNewProtocol(HttpTransportType transportT try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); // Task should already have been awaited in StartAsync - var connectionContext = await proxyConnectionFactory.ConnectTask.OrTimeout(); + var connectionContext = await proxyConnectionFactory.ConnectTask.DefaultTimeout(); // Simulate a new call from the client var messageToken = new JObject @@ -140,9 +140,9 @@ public async Task ClientUsingNewCallWithNewProtocol(HttpTransportType transportT connectionContext.Transport.Output.Write(Encoding.UTF8.GetBytes(messageToken.ToString())); connectionContext.Transport.Output.Write(new[] { (byte)0x1e }); - await connectionContext.Transport.Output.FlushAsync().OrTimeout(); + await connectionContext.Transport.Output.FlushAsync().DefaultTimeout(); - await tcs.Task.OrTimeout(); + await tcs.Task.DefaultTimeout(); } catch (Exception ex) { @@ -151,7 +151,7 @@ public async Task ClientUsingNewCallWithNewProtocol(HttpTransportType transportT } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -179,7 +179,7 @@ bool ExpectedErrors(WriteContext writeContext) { await ExceptionAssert.ThrowsAsync( () => connection.StartAsync(), - "Unable to complete handshake with the server due to an error: The server does not support version 2147483647 of the 'json' protocol.").OrTimeout(); + "Unable to complete handshake with the server due to an error: The server does not support version 2147483647 of the 'json' protocol.").DefaultTimeout(); } catch (Exception ex) { @@ -188,7 +188,7 @@ await ExceptionAssert.ThrowsAsync( } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } diff --git a/src/SignalR/clients/csharp/Client/test/UnitTests/HttpConnectionTests.ConnectionLifecycle.cs b/src/SignalR/clients/csharp/Client/test/UnitTests/HttpConnectionTests.ConnectionLifecycle.cs index 0a1f7e0052b7..9b869a545e49 100644 --- a/src/SignalR/clients/csharp/Client/test/UnitTests/HttpConnectionTests.ConnectionLifecycle.cs +++ b/src/SignalR/clients/csharp/Client/test/UnitTests/HttpConnectionTests.ConnectionLifecycle.cs @@ -2,18 +2,16 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.IO.Pipelines; using System.Net; using System.Net.Http; using System.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Connections; using Microsoft.AspNetCore.Http.Connections; using Microsoft.AspNetCore.Http.Connections.Client; using Microsoft.AspNetCore.Http.Connections.Client.Internal; using Microsoft.AspNetCore.Internal; using Microsoft.AspNetCore.SignalR.Tests; -using Microsoft.Extensions.Logging; +using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Logging.Testing; using Xunit; @@ -30,8 +28,8 @@ public async Task CanStartStartedConnection() { await WithConnectionAsync(CreateConnection(loggerFactory: LoggerFactory), async (connection) => { - await connection.StartAsync().OrTimeout(); - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); + await connection.StartAsync().DefaultTimeout(); }); } } @@ -46,12 +44,12 @@ await WithConnectionAsync( async (connection) => { var firstStart = connection.StartAsync(); - await syncPoint.WaitForSyncPoint().OrTimeout(); + await syncPoint.WaitForSyncPoint().DefaultTimeout(); var secondStart = connection.StartAsync(); syncPoint.Continue(); - await firstStart.OrTimeout(); - await secondStart.OrTimeout(); + await firstStart.DefaultTimeout(); + await secondStart.DefaultTimeout(); }); } } @@ -65,11 +63,11 @@ await WithConnectionAsync( CreateConnection(loggerFactory: LoggerFactory), async (connection) => { - await connection.StartAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); var exception = await Assert.ThrowsAsync( - async () => await connection.StartAsync()).OrTimeout(); + async () => await connection.StartAsync()).DefaultTimeout(); Assert.Equal(nameof(HttpConnection), exception.ObjectName); }); @@ -123,7 +121,7 @@ await WithConnectionAsync( async (connection) => { Assert.Equal(0, startCounter); - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); Assert.Equal(passThreshold, startCounter); }); } @@ -156,7 +154,7 @@ await WithConnectionAsync( transport: new TestTransport(onTransportStart: OnTransportStart)), async (connection) => { - var ex = await Assert.ThrowsAsync(() => connection.StartAsync()).OrTimeout(); + var ex = await Assert.ThrowsAsync(() => connection.StartAsync()).DefaultTimeout(); Assert.Equal("Unable to connect to the server with any of the available transports. " + "(WebSockets failed: Transport failed to start) (ServerSentEvents failed: Transport failed to start) (LongPolling failed: Transport failed to start)", ex.Message); @@ -181,7 +179,7 @@ await WithConnectionAsync( CreateConnection(loggerFactory: LoggerFactory), async (connection) => { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); }); } } @@ -201,21 +199,21 @@ await WithConnectionAsync( { // Start the connection and wait for the transport to start up. var startTask = connection.StartAsync(); - await transportStart.WaitForSyncPoint().OrTimeout(); + await transportStart.WaitForSyncPoint().DefaultTimeout(); // While the transport is starting, dispose the connection var disposeTask = connection.DisposeAsync(); transportStart.Continue(); // We need to release StartAsync, because Dispose waits for it. // Wait for start to finish, as that has to finish before the transport will be stopped. - await startTask.OrTimeout(); + await startTask.DefaultTimeout(); // Then release DisposeAsync (via the transport StopAsync call) - await transportStop.WaitForSyncPoint().OrTimeout(); + await transportStop.WaitForSyncPoint().DefaultTimeout(); transportStop.Continue(); // Dispose should finish - await disposeTask.OrTimeout(); + await disposeTask.DefaultTimeout(); }); } } @@ -232,13 +230,13 @@ await WithConnectionAsync( async (connection) => { // Start the connection - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); // Dispose the connection var stopTask = connection.DisposeAsync(); // Once the transport starts shutting down - await transportStop.WaitForSyncPoint().OrTimeout(); + await transportStop.WaitForSyncPoint().DefaultTimeout(); Assert.False(stopTask.IsCompleted); // Start disposing again, and then let the first dispose continue @@ -246,11 +244,11 @@ await WithConnectionAsync( transportStop.Continue(); // Wait for the tasks to complete - await stopTask.OrTimeout(); - await disposeTask.OrTimeout(); + await stopTask.DefaultTimeout(); + await disposeTask.DefaultTimeout(); // We should be disposed and thus unable to restart. - await AssertDisposedAsync(connection).OrTimeout(); + await AssertDisposedAsync(connection).DefaultTimeout(); }); } } @@ -268,13 +266,13 @@ await WithConnectionAsync( async (connection) => { // Start the transport - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); Assert.NotNull(testTransport.Receiving); Assert.False(testTransport.Receiving.IsCompleted); // Stop the connection, and we should stop the transport - await connection.DisposeAsync().OrTimeout(); - await testTransport.Receiving.OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); + await testTransport.Receiving.DefaultTimeout(); }); } } @@ -313,8 +311,8 @@ await WithConnectionAsync( CreateConnection(httpHandler, LoggerFactory), async (connection) => { - await connection.StartAsync().OrTimeout(); - await connection.Transport.Output.WriteAsync(new byte[] { 0x42 }).OrTimeout(); + await connection.StartAsync().DefaultTimeout(); + await connection.Transport.Output.WriteAsync(new byte[] { 0x42 }).DefaultTimeout(); await Assert.ThrowsAsync(async () => await connection.Transport.Input.ReadAsync()); }); @@ -346,7 +344,7 @@ await WithConnectionAsync( async (connection) => { await Assert.ThrowsAsync( - () => connection.StartAsync().OrTimeout()); + () => connection.StartAsync().DefaultTimeout()); }); } } @@ -375,7 +373,7 @@ await WithConnectionAsync( Assert.False(connectResponseTcs.Task.IsCompleted); Assert.False(startTask.IsCompleted); connectResponseTcs.TrySetResult(); - await startTask.OrTimeout(); + await startTask.DefaultTimeout(); }); } } @@ -392,7 +390,7 @@ public async Task CanCancelStartingConnectionAfterNegotiate() testHttpHandler.OnNegotiate(async (request, cancellationToken) => { // Wait here for the test code to cancel the "outer" token - await negotiateSyncPoint.WaitToContinue().OrTimeout(); + await negotiateSyncPoint.WaitToContinue().DefaultTimeout(); // Cancel cancellationToken.ThrowIfCancellationRequested(); @@ -410,7 +408,7 @@ await WithConnectionAsync( // Wait for the connection to get to the "WaitToContinue" call above, // which means it has gotten to Negotiate - await negotiateSyncPoint.WaitForSyncPoint().OrTimeout(); + await negotiateSyncPoint.WaitForSyncPoint().DefaultTimeout(); // Assert that StartAsync has not yet been canceled Assert.False(startTask.IsCanceled); @@ -421,7 +419,7 @@ await WithConnectionAsync( negotiateSyncPoint.Continue(); // Assert that StartAsync was canceled - await Assert.ThrowsAsync(() => startTask).OrTimeout(); + await Assert.ThrowsAsync(() => startTask).DefaultTimeout(); }); } } @@ -445,7 +443,7 @@ await WithConnectionAsync( { // We aggregate failures that happen when we start the transport. The operation canceled exception will // be an inner exception. - var ex = await Assert.ThrowsAsync(async () => await connection.StartAsync(cts.Token)).OrTimeout(); + var ex = await Assert.ThrowsAsync(async () => await connection.StartAsync(cts.Token)).DefaultTimeout(); Assert.Equal(3, ex.InnerExceptions.Count); var innerEx = ex.InnerExceptions[2]; var innerInnerEx = innerEx.InnerException; @@ -470,7 +468,7 @@ await WithConnectionAsync( })), async (connection) => { - await Assert.ThrowsAsync(async () => await connection.StartAsync(new CancellationToken(canceled: true))).OrTimeout(); + await Assert.ThrowsAsync(async () => await connection.StartAsync(new CancellationToken(canceled: true))).DefaultTimeout(); }); Assert.False(transportStartCalled); @@ -501,7 +499,7 @@ await WithConnectionAsync( CreateConnection(httpHandler, loggerFactory: LoggerFactory, transport: sse, transportType: HttpTransportType.ServerSentEvents), async (connection) => { - var ex = await Assert.ThrowsAsync(async () => await connection.StartAsync()).OrTimeout(); + var ex = await Assert.ThrowsAsync(async () => await connection.StartAsync()).DefaultTimeout(); }); } } @@ -527,7 +525,7 @@ await WithConnectionAsync( CreateConnection(httpHandler, transport: lp, transportType: HttpTransportType.LongPolling), async (connection) => { - var ex = await Assert.ThrowsAsync(async () => await connection.StartAsync(cts.Token).OrTimeout()); + var ex = await Assert.ThrowsAsync(async () => await connection.StartAsync(cts.Token).DefaultTimeout()); }); } } diff --git a/src/SignalR/clients/csharp/Client/test/UnitTests/HttpConnectionTests.Helpers.cs b/src/SignalR/clients/csharp/Client/test/UnitTests/HttpConnectionTests.Helpers.cs index 5a788be1cfdc..b39d62b8f685 100644 --- a/src/SignalR/clients/csharp/Client/test/UnitTests/HttpConnectionTests.Helpers.cs +++ b/src/SignalR/clients/csharp/Client/test/UnitTests/HttpConnectionTests.Helpers.cs @@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Http.Connections; using Microsoft.AspNetCore.Http.Connections.Client; using Microsoft.AspNetCore.Http.Connections.Client.Internal; +using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; @@ -75,7 +76,7 @@ private static async Task WithConnectionAsync(HttpConnection connection, Func { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); }); } - Assert.Equal(expectedNegotiate, await negotiateUrlTcs.Task.OrTimeout()); + Assert.Equal(expectedNegotiate, await negotiateUrlTcs.Task.DefaultTimeout()); } [Fact] @@ -117,7 +118,7 @@ await WithConnectionAsync( CreateConnection(testHttpHandler, loggerFactory: noErrorScope.LoggerFactory), async (connection) => { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); connectionId = connection.ConnectionId; }); } @@ -154,7 +155,7 @@ await WithConnectionAsync( CreateConnection(testHttpHandler, loggerFactory: noErrorScope.LoggerFactory), async (connection) => { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); connectionId = connection.ConnectionId; }); } @@ -193,7 +194,7 @@ await WithConnectionAsync( CreateConnection(testHttpHandler, loggerFactory: noErrorScope.LoggerFactory), async (connection) => { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); connectionId = connection.ConnectionId; }); } @@ -233,7 +234,7 @@ await WithConnectionAsync( CreateConnection(testHttpHandler, loggerFactory: noErrorScope.LoggerFactory), async (connection) => { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); connectionId = connection.ConnectionId; }); } @@ -292,7 +293,7 @@ await WithConnectionAsync( CreateConnection(testHttpHandler, loggerFactory: noErrorScope.LoggerFactory), async (connection) => { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); }); } @@ -322,7 +323,7 @@ await WithConnectionAsync( CreateConnection(testHttpHandler, loggerFactory: noErrorScope.LoggerFactory), async (connection) => { - var exception = await Assert.ThrowsAsync(() => connection.StartAsync().OrTimeout()); + var exception = await Assert.ThrowsAsync(() => connection.StartAsync().DefaultTimeout()); Assert.Equal("Negotiate redirection limit exceeded.", exception.Message); }); } @@ -398,7 +399,7 @@ await WithConnectionAsync( CreateConnection(testHttpHandler, loggerFactory: noErrorScope.LoggerFactory, accessTokenProvider: AccessTokenProvider), async (connection) => { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); }); } @@ -461,7 +462,7 @@ await WithConnectionAsync( CreateConnection(testHttpHandler, loggerFactory: noErrorScope.LoggerFactory), async (connection) => { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); }); } @@ -516,7 +517,7 @@ await WithConnectionAsync( CreateConnection(testHttpHandler, transportFactory: transportFactory.Object, loggerFactory: noErrorScope.LoggerFactory, transferFormat: TransferFormat.Binary), async (connection) => { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); }); } } @@ -563,7 +564,7 @@ await WithConnectionAsync( CreateConnection(testHttpHandler, transportFactory: transportFactory.Object, transferFormat: TransferFormat.Binary), async (connection) => { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); }); } @@ -592,7 +593,7 @@ await WithConnectionAsync( CreateConnection(testHttpHandler, loggerFactory: noErrorScope.LoggerFactory), async (connection) => { - var exception = await Assert.ThrowsAsync(() => connection.StartAsync().OrTimeout()); + var exception = await Assert.ThrowsAsync(() => connection.StartAsync().DefaultTimeout()); Assert.Equal("Test error.", exception.Message); }); } @@ -609,7 +610,7 @@ await WithConnectionAsync( async (connection) => { var exception = await Assert.ThrowsAsync( - () => connection.StartAsync().OrTimeout()); + () => connection.StartAsync().DefaultTimeout()); Assert.Equal(expectedExceptionMessage, exception.Message); }); diff --git a/src/SignalR/clients/csharp/Client/test/UnitTests/HttpConnectionTests.Transport.cs b/src/SignalR/clients/csharp/Client/test/UnitTests/HttpConnectionTests.Transport.cs index fb1d29600ddb..00058169ea55 100644 --- a/src/SignalR/clients/csharp/Client/test/UnitTests/HttpConnectionTests.Transport.cs +++ b/src/SignalR/clients/csharp/Client/test/UnitTests/HttpConnectionTests.Transport.cs @@ -4,7 +4,6 @@ using System; using System.Globalization; using System.IO.Pipelines; -using System.Linq; using System.Net; using System.Net.Http; using System.Reflection; @@ -16,6 +15,7 @@ using Microsoft.AspNetCore.Http.Connections.Client; using Microsoft.AspNetCore.Http.Connections.Client.Internal; using Microsoft.AspNetCore.SignalR.Tests; +using Microsoft.AspNetCore.Testing; using Microsoft.Net.Http.Headers; using Xunit; @@ -66,7 +66,7 @@ await WithConnectionAsync( CreateConnection(testHttpHandler, transportType: transportType, accessTokenProvider: AccessTokenProvider), async (connection) => { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); await connection.Transport.Output.WriteAsync(Encoding.UTF8.GetBytes("Hello world 1")); await connection.Transport.Output.WriteAsync(Encoding.UTF8.GetBytes("Hello world 2")); }); @@ -91,7 +91,7 @@ await WithConnectionAsync( CreateConnection(testHttpHandler, transportType: transportType, loggerFactory: LoggerFactory), async (connection) => { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); var feature = connection.Features.Get(); Assert.NotNull(feature); @@ -142,7 +142,7 @@ await WithConnectionAsync( CreateConnection(testHttpHandler, transportType: transportType), async (connection) => { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); await connection.Transport.Output.WriteAsync(Encoding.UTF8.GetBytes("Hello World")); }); // Fail safe in case the code is modified and some requests don't execute as a result @@ -182,7 +182,7 @@ await WithConnectionAsync( CreateConnection(testHttpHandler, transportType: transportType), async (connection) => { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); await connection.Transport.Output.WriteAsync(Encoding.UTF8.GetBytes("Hello World")); }); // Fail safe in case the code is modified and some requests don't execute as a result @@ -214,7 +214,7 @@ await WithConnectionAsync( CreateConnection(testHttpHandler), async (connection) => { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); Assert.Contains("This is a test", Encoding.UTF8.GetString(await connection.Transport.Input.ReadAllAsync())); }); } @@ -241,11 +241,11 @@ await WithConnectionAsync( CreateConnection(testHttpHandler), async (connection) => { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); - await connection.Transport.Output.WriteAsync(data).OrTimeout(); + await connection.Transport.Output.WriteAsync(data).DefaultTimeout(); - Assert.Equal(data, await sendTcs.Task.OrTimeout()); + Assert.Equal(data, await sendTcs.Task.DefaultTimeout()); longPollTcs.TrySetResult(ResponseUtils.CreateResponse(HttpStatusCode.NoContent)); }); @@ -259,7 +259,7 @@ public Task SendThrowsIfConnectionIsNotStarted() async (connection) => { var exception = await Assert.ThrowsAsync( - () => connection.Transport.Output.WriteAsync(new byte[0]).OrTimeout()); + () => connection.Transport.Output.WriteAsync(new byte[0]).DefaultTimeout()); Assert.Equal($"Cannot access the {nameof(Transport)} pipe before the connection has started.", exception.Message); }); } @@ -271,11 +271,11 @@ public Task TransportPipeCannotBeAccessedAfterConnectionIsDisposed() CreateConnection(), async (connection) => { - await connection.StartAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); var exception = await Assert.ThrowsAsync( - () => connection.Transport.Output.WriteAsync(new byte[0]).OrTimeout()); + () => connection.Transport.Output.WriteAsync(new byte[0]).DefaultTimeout()); Assert.Equal(nameof(HttpConnection), exception.ObjectName); }); } @@ -288,12 +288,12 @@ public Task TransportIsShutDownAfterDispose() CreateConnection(transport: transport), async (connection) => { - await connection.StartAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); // This will throw OperationCanceledException if it's forcibly terminated // which we don't want - await transport.Receiving.OrTimeout(); + await transport.Receiving.DefaultTimeout(); }); } @@ -306,7 +306,7 @@ public Task StartAsyncTransferFormatOverridesOptions() CreateConnection(transport: transport, transferFormat: TransferFormat.Binary), async (connection) => { - await connection.StartAsync(TransferFormat.Text).OrTimeout(); + await connection.StartAsync(TransferFormat.Text).DefaultTimeout(); Assert.Equal(TransferFormat.Text, transport.Format); }); diff --git a/src/SignalR/clients/csharp/Client/test/UnitTests/HttpConnectionTests.cs b/src/SignalR/clients/csharp/Client/test/UnitTests/HttpConnectionTests.cs index 421af402d8bc..101595571b81 100644 --- a/src/SignalR/clients/csharp/Client/test/UnitTests/HttpConnectionTests.cs +++ b/src/SignalR/clients/csharp/Client/test/UnitTests/HttpConnectionTests.cs @@ -7,10 +7,10 @@ using System.Net.Http; using System.Security.Cryptography.X509Certificates; using System.Threading.Tasks; -using Microsoft.AspNetCore.Connections; using Microsoft.AspNetCore.Http.Connections; using Microsoft.AspNetCore.Http.Connections.Client; using Microsoft.AspNetCore.SignalR.Tests; +using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging.Testing; @@ -77,7 +77,7 @@ await WithConnectionAsync( CreateConnection(httpOptions), async (connection) => { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); }); Assert.NotNull(httpClientHandler); @@ -123,7 +123,7 @@ await WithConnectionAsync( CreateConnection(httpOptions, loggerFactory: mockLoggerFactory.Object), async (connection) => { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); }); } catch diff --git a/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.ConnectionLifecycle.cs b/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.ConnectionLifecycle.cs index 0c1efc2e3d23..7cd98bd917c8 100644 --- a/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.ConnectionLifecycle.cs +++ b/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.ConnectionLifecycle.cs @@ -12,6 +12,7 @@ using Microsoft.AspNetCore.Internal; using Microsoft.AspNetCore.SignalR.Protocol; using Microsoft.AspNetCore.SignalR.Tests; +using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging.Testing; using Newtonsoft.Json.Linq; @@ -42,7 +43,7 @@ await AsyncUsing(CreateHubConnection(testConnection), async connection => { Assert.Equal(HubConnectionState.Disconnected, connection.State); - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); Assert.True(testConnection.Started.IsCompleted); Assert.Equal(HubConnectionState.Connected, connection.State); }); @@ -59,7 +60,7 @@ await AsyncUsing(CreateHubConnection(testConnection), async connection => Assert.False(firstStart.IsCompleted); // Wait for us to be in IConnectionFactory.ConnectAsync - await syncPoint.WaitForSyncPoint().OrTimeout(); + await syncPoint.WaitForSyncPoint().DefaultTimeout(); // Try starting again var secondStart = connection.StartAsync(); @@ -69,8 +70,8 @@ await AsyncUsing(CreateHubConnection(testConnection), async connection => syncPoint.Continue(); // The first start should finish fine, but the second throws an InvalidOperationException. - await firstStart.OrTimeout(); - await Assert.ThrowsAsync(() => secondStart).OrTimeout(); + await firstStart.DefaultTimeout(); + await Assert.ThrowsAsync(() => secondStart).DefaultTimeout(); }); } @@ -92,14 +93,14 @@ await AsyncUsing(builder.Build(), async connection => { Assert.Equal(HubConnectionState.Disconnected, connection.State); - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); Assert.Equal(1, createCount); Assert.Equal(HubConnectionState.Connected, connection.State); - await connection.StopAsync().OrTimeout(); + await connection.StopAsync().DefaultTimeout(); Assert.Equal(HubConnectionState.Disconnected, connection.State); - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); Assert.Equal(2, createCount); Assert.Equal(HubConnectionState.Connected, connection.State); }); @@ -123,13 +124,13 @@ ValueTask ConnectionFactory(EndPoint endPoint) await AsyncUsing(builder.Build(), async connection => { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); Assert.Equal(1, createCount); var stopTask = connection.StopAsync(); // Wait to hit DisposeAsync on TestConnection (which should be after StopAsync has cleared the connection state) - await syncPoint.WaitForSyncPoint().OrTimeout(); + await syncPoint.WaitForSyncPoint().DefaultTimeout(); // We should not yet be able to start now because StopAsync hasn't completed Assert.False(stopTask.IsCompleted); @@ -138,10 +139,10 @@ await AsyncUsing(builder.Build(), async connection => // When we release the sync point, the StopAsync task will finish syncPoint.Continue(); - await stopTask.OrTimeout(); + await stopTask.DefaultTimeout(); // Which will then allow StartAsync to finish. - await startTask.OrTimeout(); + await startTask.DefaultTimeout(); }); } @@ -174,12 +175,12 @@ await AsyncUsing(CreateHubConnection(testConnection, loggerFactory: LoggerFactor testConnection.Transport.Input.Complete(); try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); } catch { } - await connection.StopAsync().OrTimeout(); + await connection.StopAsync().DefaultTimeout(); Assert.True(testConnection.Started.IsCompleted); }); } @@ -196,7 +197,7 @@ public async Task MethodsThatRequireStartedConnectionFailIfConnectionNotYetStart var testConnection = new TestConnection(); await AsyncUsing(CreateHubConnection(testConnection), async connection => { - var ex = await Assert.ThrowsAsync(() => method(connection)).OrTimeout(); + var ex = await Assert.ThrowsAsync(() => method(connection)).DefaultTimeout(); Assert.Equal($"The '{name}' method cannot be called if the connection is not active", ex.Message); }); } @@ -214,7 +215,7 @@ await AsyncUsing(CreateHubConnection(testConnection), async connection => // Start, and wait for the sync point to be hit var startTask = connection.StartAsync(); Assert.False(startTask.IsCompleted); - await syncPoint.WaitForSyncPoint().OrTimeout(); + await syncPoint.WaitForSyncPoint().DefaultTimeout(); // Run the method, but it will be waiting for the lock var targetTask = method(connection); @@ -223,16 +224,16 @@ await AsyncUsing(CreateHubConnection(testConnection), async connection => syncPoint.Continue(); // Wait for start to finish - await startTask.OrTimeout(); + await startTask.DefaultTimeout(); // We need some special logic to ensure InvokeAsync completes. if (string.Equals(name, nameof(HubConnection.InvokeCoreAsync))) { - await ForceLastInvocationToComplete(testConnection).OrTimeout(); + await ForceLastInvocationToComplete(testConnection).DefaultTimeout(); } // Wait for the method to complete. - await targetTask.OrTimeout(); + await targetTask.DefaultTimeout(); }); } @@ -246,7 +247,7 @@ await AsyncUsing(CreateHubConnection(testConnection), async connection => // Start, and wait for the sync point to be hit var startTask = connection.StartAsync(); Assert.False(startTask.IsCompleted); - await syncPoint.WaitForSyncPoint().OrTimeout(); + await syncPoint.WaitForSyncPoint().DefaultTimeout(); Assert.Equal(HubConnectionState.Connecting, connection.State); @@ -254,7 +255,7 @@ await AsyncUsing(CreateHubConnection(testConnection), async connection => syncPoint.Continue(); // Wait for start to finish - await startTask.OrTimeout(); + await startTask.DefaultTimeout(); Assert.Equal(HubConnectionState.Connected, connection.State); }); @@ -276,15 +277,15 @@ await AsyncUsing(CreateHubConnection(testConnection), async connection => Assert.Equal(HubConnectionState.Disconnected, connection.State); - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); Assert.True(testConnection.Started.IsCompleted); Assert.Equal(HubConnectionState.Connected, connection.State); - await connection.StopAsync().OrTimeout(); - await testConnection.Disposed.OrTimeout(); + await connection.StopAsync().DefaultTimeout(); + await testConnection.Disposed.DefaultTimeout(); Assert.Equal(HubConnectionState.Disconnected, connection.State); - await closed.Task.OrTimeout(); + await closed.Task.DefaultTimeout(); }); } @@ -294,11 +295,11 @@ public async Task StopAsyncStopsConnection() var testConnection = new TestConnection(); await AsyncUsing(CreateHubConnection(testConnection), async connection => { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); Assert.True(testConnection.Started.IsCompleted); - await connection.StopAsync().OrTimeout(); - await testConnection.Disposed.OrTimeout(); + await connection.StopAsync().DefaultTimeout(); + await testConnection.Disposed.DefaultTimeout(); }); } @@ -308,7 +309,7 @@ public async Task StopAsyncNoOpsIfConnectionNotYetStarted() var testConnection = new TestConnection(); await AsyncUsing(CreateHubConnection(testConnection), async connection => { - await connection.StopAsync().OrTimeout(); + await connection.StopAsync().DefaultTimeout(); Assert.False(testConnection.Disposed.IsCompleted); }); } @@ -321,15 +322,15 @@ await AsyncUsing(CreateHubConnection(testConnection), async connection => { Assert.Equal(HubConnectionState.Disconnected, connection.State); - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); Assert.True(testConnection.Started.IsCompleted); Assert.Equal(HubConnectionState.Connected, connection.State); - await connection.StopAsync().OrTimeout(); - await testConnection.Disposed.OrTimeout(); + await connection.StopAsync().DefaultTimeout(); + await testConnection.Disposed.DefaultTimeout(); Assert.Equal(HubConnectionState.Disconnected, connection.State); - await connection.StopAsync().OrTimeout(); + await connection.StopAsync().DefaultTimeout(); Assert.Equal(HubConnectionState.Disconnected, connection.State); }); } @@ -344,11 +345,11 @@ await AsyncUsing(CreateHubConnection(testConnection), async connection => { Assert.Equal(HubConnectionState.Disconnected, connection.State); - await connection.StopAsync().OrTimeout(); + await connection.StopAsync().DefaultTimeout(); Assert.False(testConnection.Disposed.IsCompleted); Assert.Equal(HubConnectionState.Disconnected, connection.State); - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); Assert.True(testConnection.Started.IsCompleted); Assert.Equal(HubConnectionState.Connected, connection.State); }); @@ -366,15 +367,15 @@ await AsyncUsing(CreateHubConnection(testConnection), async connection => closed.TrySetResult(); return Task.CompletedTask; }; - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); Assert.True(testConnection.Started.IsCompleted); // Complete the transport side and wait for the connection to close testConnection.CompleteFromTransport(); - await closed.Task.OrTimeout(); + await closed.Task.DefaultTimeout(); // We should be stopped now - var ex = await Assert.ThrowsAsync(() => connection.SendAsync("Foo")).OrTimeout(); + var ex = await Assert.ThrowsAsync(() => connection.SendAsync("Foo")).DefaultTimeout(); Assert.Equal($"The '{nameof(HubConnection.SendCoreAsync)}' method cannot be called if the connection is not active", ex.Message); }); } @@ -392,7 +393,7 @@ await AsyncUsing(CreateHubConnection(testConnection), async connection => return Task.CompletedTask; }; - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); Assert.True(testConnection.Started.IsCompleted); // Start shutting down and complete the transport side @@ -403,16 +404,16 @@ await AsyncUsing(CreateHubConnection(testConnection), async connection => await testConnection.Transport.Input.CompleteAsync(); // The stop should be completed. - await stopTask.OrTimeout(); + await stopTask.DefaultTimeout(); // The HubConnection should now be closed. - await connectionClosed.Task.OrTimeout(); + await connectionClosed.Task.DefaultTimeout(); // We should be stopped now - var ex = await Assert.ThrowsAsync(() => connection.SendAsync("Foo")).OrTimeout(); + var ex = await Assert.ThrowsAsync(() => connection.SendAsync("Foo")).DefaultTimeout(); Assert.Equal($"The '{nameof(HubConnection.SendCoreAsync)}' method cannot be called if the connection is not active", ex.Message); - await testConnection.Disposed.OrTimeout(); + await testConnection.Disposed.DefaultTimeout(); Assert.Equal(1, testConnection.DisposeCount); }); @@ -431,7 +432,7 @@ await AsyncUsing(CreateHubConnection(testConnection), async connection => return Task.CompletedTask; }; - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); Assert.True(testConnection.Started.IsCompleted); // Complete the transport side and wait for the connection to close @@ -440,14 +441,14 @@ await AsyncUsing(CreateHubConnection(testConnection), async connection => // Start stopping manually (these can't be synchronized by a Sync Point because the transport is disposed outside the lock) var stopTask = connection.StopAsync(); - await testConnection.Disposed.OrTimeout(); + await testConnection.Disposed.DefaultTimeout(); // Wait for the stop task to complete and the closed event to fire - await stopTask.OrTimeout(); - await connectionClosed.Task.OrTimeout(); + await stopTask.DefaultTimeout(); + await connectionClosed.Task.DefaultTimeout(); // We should be stopped now - var ex = await Assert.ThrowsAsync(() => connection.SendAsync("Foo")).OrTimeout(); + var ex = await Assert.ThrowsAsync(() => connection.SendAsync("Foo")).DefaultTimeout(); Assert.Equal($"The '{nameof(HubConnection.SendCoreAsync)}' method cannot be called if the connection is not active", ex.Message); }); } @@ -462,14 +463,14 @@ public async Task MethodsThatRequireActiveConnectionWaitForStopAndFailIfConnecti var testConnection = new TestConnection(onDispose: SyncPoint.Create(out var syncPoint)); await AsyncUsing(CreateHubConnection(testConnection), async connection => { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); // Stop and invoke the method. These two aren't synchronizable via a Sync Point any more because the transport is disposed // outside the lock :( var disposeTask = connection.StopAsync(); // Wait to hit DisposeAsync on TestConnection (which should be after StopAsync has cleared the connection state) - await syncPoint.WaitForSyncPoint().OrTimeout(); + await syncPoint.WaitForSyncPoint().DefaultTimeout(); var targetTask = method(connection); @@ -477,10 +478,10 @@ await AsyncUsing(CreateHubConnection(testConnection), async connection => syncPoint.Continue(); // Wait for the method to complete, with an expected error. - var ex = await Assert.ThrowsAsync(() => targetTask).OrTimeout(); + var ex = await Assert.ThrowsAsync(() => targetTask).DefaultTimeout(); Assert.Equal($"The '{methodName}' method cannot be called if the connection is not active", ex.Message); - await disposeTask.OrTimeout(); + await disposeTask.DefaultTimeout(); }); } @@ -513,13 +514,13 @@ bool ExpectedErrors(WriteContext writeContext) { hubConnection.HandshakeTimeout = TimeSpan.FromMilliseconds(1); - await Assert.ThrowsAsync(() => hubConnection.StartAsync()).OrTimeout(); + await Assert.ThrowsAsync(() => hubConnection.StartAsync()).DefaultTimeout(); Assert.Equal(HubConnectionState.Disconnected, hubConnection.State); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -540,13 +541,13 @@ public async Task StartAsyncWithTriggeredCancellationTokenIsCanceled() var hubConnection = CreateHubConnection(connection, loggerFactory: LoggerFactory); try { - await Assert.ThrowsAsync(() => hubConnection.StartAsync(new CancellationToken(canceled: true))).OrTimeout(); + await Assert.ThrowsAsync(() => hubConnection.StartAsync(new CancellationToken(canceled: true))).DefaultTimeout(); Assert.False(onStartCalled); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -587,16 +588,16 @@ bool ExpectedErrors(WriteContext writeContext) { var startTask = hubConnection.StartAsync(cts.Token); - await connection.ReadSentTextMessageAsync().OrTimeout(); + await connection.ReadSentTextMessageAsync().DefaultTimeout(); cts.Cancel(); // We aren't worried about the exact message and it's localized so asserting it is non-trivial. - await Assert.ThrowsAnyAsync(() => startTask).OrTimeout(); + await Assert.ThrowsAnyAsync(() => startTask).DefaultTimeout(); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -621,12 +622,12 @@ public async Task HubConnectionClosesWithErrorIfTerminatedWithPartialMessage() return Task.CompletedTask; }; - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); - await innerConnection.Application.Output.WriteAsync(Encoding.UTF8.GetBytes(new[] { '{' })).OrTimeout(); + await innerConnection.Application.Output.WriteAsync(Encoding.UTF8.GetBytes(new[] { '{' })).DefaultTimeout(); innerConnection.Application.Output.Complete(); - var exception = await closedEventTcs.Task.OrTimeout(); + var exception = await closedEventTcs.Task.DefaultTimeout(); Assert.Equal("Connection terminated while reading a message.", exception.Message); } diff --git a/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.Extensions.cs b/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.Extensions.cs index 24e8eb88bfa9..a12e74f049b9 100644 --- a/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.Extensions.cs +++ b/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.Extensions.cs @@ -3,6 +3,7 @@ using System; using System.Threading.Tasks; +using Microsoft.AspNetCore.Testing; using Xunit; namespace Microsoft.AspNetCore.SignalR.Client.Tests @@ -226,13 +227,13 @@ await connection.ReceiveJsonMessage( type = 1, target = "Foo", arguments = args - }).OrTimeout(); + }).DefaultTimeout(); - await handlerTcs.Task.OrTimeout(); + await handlerTcs.Task.DefaultTimeout(); } finally { - await hubConnection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); } } @@ -246,7 +247,7 @@ public async Task ConnectionNotClosedOnCallbackArgumentCountMismatch() try { hubConnection.On("Foo", r => { receiveTcs.SetResult(r); }); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); await connection.ReceiveJsonMessage( new @@ -255,7 +256,7 @@ await connection.ReceiveJsonMessage( type = 1, target = "Foo", arguments = new object[] { 42, "42" } - }).OrTimeout(); + }).DefaultTimeout(); await connection.ReceiveJsonMessage( new @@ -264,13 +265,13 @@ await connection.ReceiveJsonMessage( type = 1, target = "Foo", arguments = new object[] { 42 } - }).OrTimeout(); + }).DefaultTimeout(); - Assert.Equal(42, await receiveTcs.Task.OrTimeout()); + Assert.Equal(42, await receiveTcs.Task.DefaultTimeout()); } finally { - await hubConnection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); } } @@ -288,7 +289,7 @@ public async Task ConnectionNotClosedOnAsyncCallbackArgumentCountMismatch() receiveTcs.SetResult(r); return Task.CompletedTask; }); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); await connection.ReceiveJsonMessage( new @@ -297,7 +298,7 @@ await connection.ReceiveJsonMessage( type = 1, target = "Foo", arguments = new object[] { 42, "42" } - }).OrTimeout(); + }).DefaultTimeout(); await connection.ReceiveJsonMessage( new @@ -306,13 +307,13 @@ await connection.ReceiveJsonMessage( type = 1, target = "Foo", arguments = new object[] { 42 } - }).OrTimeout(); + }).DefaultTimeout(); - Assert.Equal(42, await receiveTcs.Task.OrTimeout()); + Assert.Equal(42, await receiveTcs.Task.DefaultTimeout()); } finally { - await hubConnection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); } } @@ -326,7 +327,7 @@ public async Task ConnectionNotClosedOnCallbackArgumentTypeMismatch() try { hubConnection.On("Foo", r => { receiveTcs.SetResult(r); }); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); await connection.ReceiveJsonMessage( new @@ -335,7 +336,7 @@ await connection.ReceiveJsonMessage( type = 1, target = "Foo", arguments = new object[] { "xxx" } - }).OrTimeout(); + }).DefaultTimeout(); await connection.ReceiveJsonMessage( new @@ -344,13 +345,13 @@ await connection.ReceiveJsonMessage( type = 1, target = "Foo", arguments = new object[] { 42 } - }).OrTimeout(); + }).DefaultTimeout(); - Assert.Equal(42, await receiveTcs.Task.OrTimeout()); + Assert.Equal(42, await receiveTcs.Task.DefaultTimeout()); } finally { - await hubConnection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); } } @@ -368,7 +369,7 @@ public async Task ConnectionNotClosedOnAsyncCallbackArgumentTypeMismatch() receiveTcs.SetResult(r); return Task.CompletedTask; }); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); await connection.ReceiveJsonMessage( new @@ -377,7 +378,7 @@ await connection.ReceiveJsonMessage( type = 1, target = "Foo", arguments = new object[] { "xxx" } - }).OrTimeout(); + }).DefaultTimeout(); await connection.ReceiveJsonMessage( new @@ -386,13 +387,13 @@ await connection.ReceiveJsonMessage( type = 1, target = "Foo", arguments = new object[] { 42 } - }).OrTimeout(); + }).DefaultTimeout(); - Assert.Equal(42, await receiveTcs.Task.OrTimeout()); + Assert.Equal(42, await receiveTcs.Task.DefaultTimeout()); } finally { - await hubConnection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); } } } diff --git a/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.Protocol.cs b/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.Protocol.cs index e254a79c5ce2..d9dc8cbd1be0 100644 --- a/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.Protocol.cs +++ b/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.Protocol.cs @@ -6,6 +6,7 @@ using System.Threading.Channels; using System.Threading.Tasks; using Microsoft.AspNetCore.SignalR.Tests; +using Microsoft.AspNetCore.Testing; using Xunit; namespace Microsoft.AspNetCore.SignalR.Client.Tests @@ -24,21 +25,21 @@ public async Task SendAsyncSendsANonBlockingInvocationMessage() var hubConnection = CreateHubConnection(connection); try { - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); - var invokeTask = hubConnection.SendAsync("Foo").OrTimeout(); + var invokeTask = hubConnection.SendAsync("Foo").DefaultTimeout(); - var invokeMessage = await connection.ReadSentTextMessageAsync().OrTimeout(); + var invokeMessage = await connection.ReadSentTextMessageAsync().DefaultTimeout(); // ReadSentTextMessageAsync strips off the record separator (because it has use it as a separator now that we use Pipelines) Assert.Equal("{\"type\":1,\"target\":\"Foo\",\"arguments\":[]}", invokeMessage); - await invokeTask.OrTimeout(); + await invokeTask.DefaultTimeout(); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -52,17 +53,17 @@ public async Task ClientSendsHandshakeMessageWhenStartingConnection() // We can't await StartAsync because it depends on the negotiate process! var startTask = hubConnection.StartAsync(); - var handshakeMessage = await connection.ReadHandshakeAndSendResponseAsync().OrTimeout(); + var handshakeMessage = await connection.ReadHandshakeAndSendResponseAsync().DefaultTimeout(); // ReadSentTextMessageAsync strips off the record separator (because it has use it as a separator now that we use Pipelines) Assert.Equal("{\"protocol\":\"json\",\"version\":1}", handshakeMessage); - await startTask.OrTimeout(); + await startTask.DefaultTimeout(); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -78,19 +79,19 @@ public async Task InvalidHandshakeResponseCausesStartToFail() // We can't await StartAsync because it depends on the negotiate process! var startTask = hubConnection.StartAsync(); - await connection.ReadSentTextMessageAsync().OrTimeout(); + await connection.ReadSentTextMessageAsync().DefaultTimeout(); // The client expects the first message to be a handshake response, but a handshake response doesn't have a "type". - await connection.ReceiveJsonMessage(new { type = "foo" }).OrTimeout(); + await connection.ReceiveJsonMessage(new { type = "foo" }).DefaultTimeout(); - var ex = await Assert.ThrowsAsync(() => startTask).OrTimeout(); + var ex = await Assert.ThrowsAsync(() => startTask).DefaultTimeout(); Assert.Equal("Expected a handshake response from the server.", ex.Message); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -106,14 +107,14 @@ public async Task ClientIsOkayReceivingMinorVersionInHandshake() try { var startTask = hubConnection.StartAsync(); - var message = await connection.ReadHandshakeAndSendResponseAsync(56).OrTimeout(); + var message = await connection.ReadHandshakeAndSendResponseAsync(56).DefaultTimeout(); - await startTask.OrTimeout(); + await startTask.DefaultTimeout(); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -124,11 +125,11 @@ public async Task InvokeSendsAnInvocationMessage() var hubConnection = CreateHubConnection(connection); try { - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var invokeTask = hubConnection.InvokeAsync("Foo"); - var invokeMessage = await connection.ReadSentTextMessageAsync().OrTimeout(); + var invokeMessage = await connection.ReadSentTextMessageAsync().DefaultTimeout(); // ReadSentTextMessageAsync strips off the record separator (because it has use it as a separator now that we use Pipelines) Assert.Equal("{\"type\":1,\"invocationId\":\"1\",\"target\":\"Foo\",\"arguments\":[]}", invokeMessage); @@ -137,8 +138,8 @@ public async Task InvokeSendsAnInvocationMessage() } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -157,17 +158,17 @@ public async Task ReceiveCloseMessageWithoutErrorWillCloseHubConnection() try { - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); - await connection.ReceiveJsonMessage(new { type = 7 }).OrTimeout(); + await connection.ReceiveJsonMessage(new { type = 7 }).DefaultTimeout(); - var closeException = await closedTcs.Task.OrTimeout(); + var closeException = await closedTcs.Task.DefaultTimeout(); Assert.Null(closeException); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -186,17 +187,17 @@ public async Task ReceiveCloseMessageWithErrorWillCloseHubConnection() try { - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); - await connection.ReceiveJsonMessage(new { type = 7, error = "Error!" }).OrTimeout(); + await connection.ReceiveJsonMessage(new { type = 7, error = "Error!" }).DefaultTimeout(); - var closeException = await closedTcs.Task.OrTimeout(); + var closeException = await closedTcs.Task.DefaultTimeout(); Assert.NotNull(closeException); Assert.Equal("The server closed the connection with the following error: Error!", closeException.Message); } finally { - await hubConnection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); } } @@ -207,23 +208,23 @@ public async Task StreamSendsAnInvocationMessage() var hubConnection = CreateHubConnection(connection); try { - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); - var channel = await hubConnection.StreamAsChannelAsync("Foo").OrTimeout(); + var channel = await hubConnection.StreamAsChannelAsync("Foo").DefaultTimeout(); - var invokeMessage = await connection.ReadSentTextMessageAsync().OrTimeout(); + var invokeMessage = await connection.ReadSentTextMessageAsync().DefaultTimeout(); // ReadSentTextMessageAsync strips off the record separator (because it has use it as a separator now that we use Pipelines) Assert.Equal("{\"type\":4,\"invocationId\":\"1\",\"target\":\"Foo\",\"arguments\":[]}", invokeMessage); // Complete the channel - await connection.ReceiveJsonMessage(new { invocationId = "1", type = 3 }).OrTimeout(); - await channel.Completion.OrTimeout(); + await connection.ReceiveJsonMessage(new { invocationId = "1", type = 3 }).DefaultTimeout(); + await channel.Completion.DefaultTimeout(); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -234,18 +235,18 @@ public async Task InvokeCompletedWhenCompletionMessageReceived() var hubConnection = CreateHubConnection(connection); try { - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var invokeTask = hubConnection.InvokeAsync("Foo"); - await connection.ReceiveJsonMessage(new { invocationId = "1", type = 3 }).OrTimeout(); + await connection.ReceiveJsonMessage(new { invocationId = "1", type = 3 }).DefaultTimeout(); - await invokeTask.OrTimeout(); + await invokeTask.DefaultTimeout(); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -256,18 +257,18 @@ public async Task StreamCompletesWhenCompletionMessageIsReceived() var hubConnection = CreateHubConnection(connection); try { - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); - var channel = await hubConnection.StreamAsChannelAsync("Foo").OrTimeout(); + var channel = await hubConnection.StreamAsChannelAsync("Foo").DefaultTimeout(); - await connection.ReceiveJsonMessage(new { invocationId = "1", type = 3 }).OrTimeout(); + await connection.ReceiveJsonMessage(new { invocationId = "1", type = 3 }).DefaultTimeout(); - Assert.Empty(await channel.ReadAndCollectAllAsync().OrTimeout()); + Assert.Empty(await channel.ReadAndCollectAllAsync().DefaultTimeout()); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -278,18 +279,18 @@ public async Task InvokeYieldsResultWhenCompletionMessageReceived() var hubConnection = CreateHubConnection(connection); try { - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var invokeTask = hubConnection.InvokeAsync("Foo"); - await connection.ReceiveJsonMessage(new { invocationId = "1", type = 3, result = 42 }).OrTimeout(); + await connection.ReceiveJsonMessage(new { invocationId = "1", type = 3, result = 42 }).DefaultTimeout(); - Assert.Equal(42, await invokeTask.OrTimeout()); + Assert.Equal(42, await invokeTask.DefaultTimeout()); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -300,19 +301,19 @@ public async Task InvokeFailsWithExceptionWhenCompletionWithErrorReceived() var hubConnection = CreateHubConnection(connection); try { - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var invokeTask = hubConnection.InvokeAsync("Foo"); - await connection.ReceiveJsonMessage(new { invocationId = "1", type = 3, error = "An error occurred" }).OrTimeout(); + await connection.ReceiveJsonMessage(new { invocationId = "1", type = 3, error = "An error occurred" }).DefaultTimeout(); - var ex = await Assert.ThrowsAsync(() => invokeTask).OrTimeout(); + var ex = await Assert.ThrowsAsync(() => invokeTask).DefaultTimeout(); Assert.Equal("An error occurred", ex.Message); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -323,19 +324,19 @@ public async Task StreamFailsIfCompletionMessageHasPayload() var hubConnection = CreateHubConnection(connection); try { - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); - var channel = await hubConnection.StreamAsChannelAsync("Foo").OrTimeout(); + var channel = await hubConnection.StreamAsChannelAsync("Foo").DefaultTimeout(); - await connection.ReceiveJsonMessage(new { invocationId = "1", type = 3, result = "Oops" }).OrTimeout(); + await connection.ReceiveJsonMessage(new { invocationId = "1", type = 3, result = "Oops" }).DefaultTimeout(); - var ex = await Assert.ThrowsAsync(() => channel.ReadAndCollectAllAsync()).OrTimeout(); + var ex = await Assert.ThrowsAsync(() => channel.ReadAndCollectAllAsync()).DefaultTimeout(); Assert.Equal("Server provided a result in a completion response to a streamed invocation.", ex.Message); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -346,19 +347,19 @@ public async Task StreamFailsWithExceptionWhenCompletionWithErrorReceived() var hubConnection = CreateHubConnection(connection); try { - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); - var channel = await hubConnection.StreamAsChannelAsync("Foo").OrTimeout(); + var channel = await hubConnection.StreamAsChannelAsync("Foo").DefaultTimeout(); - await connection.ReceiveJsonMessage(new { invocationId = "1", type = 3, error = "An error occurred" }).OrTimeout(); + await connection.ReceiveJsonMessage(new { invocationId = "1", type = 3, error = "An error occurred" }).DefaultTimeout(); - var ex = await Assert.ThrowsAsync(async () => await channel.ReadAndCollectAllAsync()).OrTimeout(); + var ex = await Assert.ThrowsAsync(async () => await channel.ReadAndCollectAllAsync()).DefaultTimeout(); Assert.Equal("An error occurred", ex.Message); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -369,19 +370,19 @@ public async Task InvokeFailsWithErrorWhenStreamingItemReceived() var hubConnection = CreateHubConnection(connection); try { - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var invokeTask = hubConnection.InvokeAsync("Foo"); - await connection.ReceiveJsonMessage(new { invocationId = "1", type = 2, item = 42 }).OrTimeout(); + await connection.ReceiveJsonMessage(new { invocationId = "1", type = 2, item = 42 }).DefaultTimeout(); - var ex = await Assert.ThrowsAsync(() => invokeTask).OrTimeout(); + var ex = await Assert.ThrowsAsync(() => invokeTask).DefaultTimeout(); Assert.Equal("Streaming hub methods must be invoked with the 'HubConnection.StreamAsChannelAsync' method.", ex.Message); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -392,23 +393,23 @@ public async Task StreamYieldsItemsAsTheyArrive() var hubConnection = CreateHubConnection(connection); try { - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); - var channel = await hubConnection.StreamAsChannelAsync("Foo").OrTimeout(); + var channel = await hubConnection.StreamAsChannelAsync("Foo").DefaultTimeout(); - await connection.ReceiveJsonMessage(new { invocationId = "1", type = 2, item = "1" }).OrTimeout(); - await connection.ReceiveJsonMessage(new { invocationId = "1", type = 2, item = "2" }).OrTimeout(); - await connection.ReceiveJsonMessage(new { invocationId = "1", type = 2, item = "3" }).OrTimeout(); - await connection.ReceiveJsonMessage(new { invocationId = "1", type = 3 }).OrTimeout(); + await connection.ReceiveJsonMessage(new { invocationId = "1", type = 2, item = "1" }).DefaultTimeout(); + await connection.ReceiveJsonMessage(new { invocationId = "1", type = 2, item = "2" }).DefaultTimeout(); + await connection.ReceiveJsonMessage(new { invocationId = "1", type = 2, item = "3" }).DefaultTimeout(); + await connection.ReceiveJsonMessage(new { invocationId = "1", type = 3 }).DefaultTimeout(); - var notifications = await channel.ReadAndCollectAllAsync().OrTimeout(); + var notifications = await channel.ReadAndCollectAllAsync().DefaultTimeout(); Assert.Equal(new[] { "1", "2", "3", }, notifications.ToArray()); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -420,19 +421,19 @@ public async Task HandlerRegisteredWithOnIsFiredWhenInvocationReceived() var handlerCalled = new TaskCompletionSource(); try { - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); hubConnection.On("Foo", (r1, r2, r3) => handlerCalled.TrySetResult(new object[] { r1, r2, r3 })); var args = new object[] { 1, "Foo", 2.0f }; - await connection.ReceiveJsonMessage(new { invocationId = "1", type = 1, target = "Foo", arguments = args }).OrTimeout(); + await connection.ReceiveJsonMessage(new { invocationId = "1", type = 1, target = "Foo", arguments = args }).DefaultTimeout(); - Assert.Equal(args, await handlerCalled.Task.OrTimeout()); + Assert.Equal(args, await handlerCalled.Task.DefaultTimeout()); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -444,7 +445,7 @@ public async Task HandlerIsRemovedProperlyWithOff() var handlerCalled = new TaskCompletionSource(); try { - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); hubConnection.On("Foo", (val) => { @@ -452,19 +453,19 @@ public async Task HandlerIsRemovedProperlyWithOff() }); hubConnection.Remove("Foo"); - await connection.ReceiveJsonMessage(new { invocationId = "1", type = 1, target = "Foo", arguments = 1 }).OrTimeout(); + await connection.ReceiveJsonMessage(new { invocationId = "1", type = 1, target = "Foo", arguments = 1 }).DefaultTimeout(); var handlerTask = handlerCalled.Task; // We expect the handler task to timeout since the handler has been removed with the call to Remove("Foo") - var ex = Assert.ThrowsAsync(async () => await handlerTask.OrTimeout(2000)); + var ex = Assert.ThrowsAsync(async () => await handlerTask.DefaultTimeout(2000)); // Ensure that the task from the WhenAny is not the handler task Assert.False(handlerCalled.Task.IsCompleted); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -476,7 +477,7 @@ public async Task DisposingSubscriptionAfterCallingRemoveHandlerDoesntFail() var handlerCalled = new TaskCompletionSource(); try { - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var subscription = hubConnection.On("Foo", (val) => { @@ -484,21 +485,21 @@ public async Task DisposingSubscriptionAfterCallingRemoveHandlerDoesntFail() }); hubConnection.Remove("Foo"); - await connection.ReceiveJsonMessage(new { invocationId = "1", type = 1, target = "Foo", arguments = 1 }).OrTimeout(); + await connection.ReceiveJsonMessage(new { invocationId = "1", type = 1, target = "Foo", arguments = 1 }).DefaultTimeout(); var handlerTask = handlerCalled.Task; subscription.Dispose(); // We expect the handler task to timeout since the handler has been removed with the call to Remove("Foo") - var ex = Assert.ThrowsAsync(async () => await handlerTask.OrTimeout(2000)); + var ex = Assert.ThrowsAsync(async () => await handlerTask.DefaultTimeout(2000)); // Ensure that the task from the WhenAny is not the handler task Assert.False(handlerCalled.Task.IsCompleted); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -510,24 +511,24 @@ public async Task AcceptsPingMessages() try { - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); // Send an invocation var invokeTask = hubConnection.InvokeAsync("Foo"); // Receive the ping mid-invocation so we can see that the rest of the flow works fine - await connection.ReceiveJsonMessage(new { type = 6 }).OrTimeout(); + await connection.ReceiveJsonMessage(new { type = 6 }).DefaultTimeout(); // Receive a completion - await connection.ReceiveJsonMessage(new { invocationId = "1", type = 3 }).OrTimeout(); + await connection.ReceiveJsonMessage(new { invocationId = "1", type = 3 }).DefaultTimeout(); // Ensure the invokeTask completes properly - await invokeTask.OrTimeout(); + await invokeTask.DefaultTimeout(); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -540,22 +541,22 @@ public async Task PartialHandshakeResponseWorks() { var task = hubConnection.StartAsync(); - await connection.ReceiveTextAsync("{").OrTimeout(); + await connection.ReceiveTextAsync("{").DefaultTimeout(); Assert.False(task.IsCompleted); - await connection.ReceiveTextAsync("}").OrTimeout(); + await connection.ReceiveTextAsync("}").DefaultTimeout(); Assert.False(task.IsCompleted); - await connection.ReceiveTextAsync("\u001e").OrTimeout(); + await connection.ReceiveTextAsync("\u001e").DefaultTimeout(); - await task.OrTimeout(); + await task.DefaultTimeout(); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -573,17 +574,17 @@ public async Task HandshakeAndInvocationInSameBufferWorks() tcs.TrySetResult(data); }); - await connection.ReceiveTextAsync(payload).OrTimeout(); + await connection.ReceiveTextAsync(payload).DefaultTimeout(); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); - var response = await tcs.Task.OrTimeout(); + var response = await tcs.Task.DefaultTimeout(); Assert.Equal("hello", response); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -600,26 +601,26 @@ public async Task PartialInvocationWorks() tcs.TrySetResult(data); }); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); - await connection.ReceiveTextAsync("{\"type\":1, ").OrTimeout(); + await connection.ReceiveTextAsync("{\"type\":1, ").DefaultTimeout(); Assert.False(tcs.Task.IsCompleted); - await connection.ReceiveTextAsync("\"target\": \"Echo\", \"arguments\"").OrTimeout(); + await connection.ReceiveTextAsync("\"target\": \"Echo\", \"arguments\"").DefaultTimeout(); Assert.False(tcs.Task.IsCompleted); - await connection.ReceiveTextAsync(":[\"hello\"]}\u001e").OrTimeout(); + await connection.ReceiveTextAsync(":[\"hello\"]}\u001e").DefaultTimeout(); - var response = await tcs.Task.OrTimeout(); + var response = await tcs.Task.DefaultTimeout(); Assert.Equal("hello", response); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -634,18 +635,18 @@ public async Task ClientPingsMultipleTimes() try { - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); - var firstPing = await connection.ReadSentTextMessageAsync(ignorePings: false).OrTimeout(); + var firstPing = await connection.ReadSentTextMessageAsync(ignorePings: false).DefaultTimeout(); Assert.Equal("{\"type\":6}", firstPing); - var secondPing = await connection.ReadSentTextMessageAsync(ignorePings: false).OrTimeout(); + var secondPing = await connection.ReadSentTextMessageAsync(ignorePings: false).DefaultTimeout(); Assert.Equal("{\"type\":6}", secondPing); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -660,19 +661,19 @@ public async Task ClientWithInherentKeepAliveDoesNotPing() try { - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); await Task.Delay(1000); - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); - Assert.Equal(0, (await connection.ReadAllSentMessagesAsync(ignorePings: false).OrTimeout()).Count); + Assert.Equal(0, (await connection.ReadAllSentMessagesAsync(ignorePings: false).DefaultTimeout()).Count); } finally { - await hubConnection.DisposeAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } diff --git a/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.Reconnect.cs b/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.Reconnect.cs index 225f2cac10f2..0d9a959e903a 100644 --- a/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.Reconnect.cs +++ b/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.Reconnect.cs @@ -12,6 +12,7 @@ using Microsoft.AspNetCore.Internal; using Microsoft.AspNetCore.SignalR.Protocol; using Microsoft.AspNetCore.SignalR.Tests; +using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging.Testing; using Moq; @@ -55,11 +56,11 @@ bool ExpectedErrors(WriteContext writeContext) return Task.CompletedTask; }; - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); testConnection.CompleteFromTransport(exception); - Assert.Same(exception, await closedErrorTcs.Task.OrTimeout()); + Assert.Same(exception, await closedErrorTcs.Task.DefaultTimeout()); Assert.False(reconnectingCalled); } } @@ -146,14 +147,14 @@ async Task OnTestConnectionStart() return Task.CompletedTask; }; - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); Assert.Same(originalConnectionId, hubConnection.ConnectionId); var firstException = new Exception(); (await testConnectionFactory.GetNextOrCurrentTestConnection()).CompleteFromTransport(firstException); - Assert.Same(firstException, await reconnectingErrorTcs.Task.OrTimeout()); + Assert.Same(firstException, await reconnectingErrorTcs.Task.DefaultTimeout()); Assert.Single(retryContexts); Assert.Same(firstException, retryContexts[0].RetryReason); Assert.Equal(0, retryContexts[0].PreviousRetryCount); @@ -162,16 +163,16 @@ async Task OnTestConnectionStart() var reconnectException = new Exception(); failReconnectTcs.SetException(reconnectException); - Assert.Same(reconnectedConnectionId, await reconnectedConnectionIdTcs.Task.OrTimeout()); + Assert.Same(reconnectedConnectionId, await reconnectedConnectionIdTcs.Task.DefaultTimeout()); Assert.Equal(2, retryContexts.Count); Assert.Same(reconnectException, retryContexts[1].RetryReason); Assert.Equal(1, retryContexts[1].PreviousRetryCount); Assert.True(TimeSpan.Zero <= retryContexts[1].ElapsedTime); - await hubConnection.StopAsync().OrTimeout(); + await hubConnection.StopAsync().DefaultTimeout(); - var closeError = await closedErrorTcs.Task.OrTimeout(); + var closeError = await closedErrorTcs.Task.DefaultTimeout(); Assert.Null(closeError); Assert.Equal(1, reconnectingCount); Assert.Equal(1, reconnectedCount); @@ -245,12 +246,12 @@ Task OnTestConnectionStart() return Task.CompletedTask; }; - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var firstException = new Exception(); (await testConnectionFactory.GetNextOrCurrentTestConnection()).CompleteFromTransport(firstException); - Assert.Same(firstException, await reconnectingErrorTcs.Task.OrTimeout()); + Assert.Same(firstException, await reconnectingErrorTcs.Task.DefaultTimeout()); Assert.Single(retryContexts); Assert.Same(firstException, retryContexts[0].RetryReason); Assert.Equal(0, retryContexts[0].PreviousRetryCount); @@ -259,7 +260,7 @@ Task OnTestConnectionStart() var reconnectException = new Exception(); failReconnectTcs.SetException(reconnectException); - var closeError = await closedErrorTcs.Task.OrTimeout(); + var closeError = await closedErrorTcs.Task.DefaultTimeout(); Assert.IsType(closeError); Assert.Equal(2, retryContexts.Count); @@ -324,18 +325,18 @@ bool ExpectedErrors(WriteContext writeContext) return Task.CompletedTask; }; - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var firstException = new Exception(); (await testConnectionFactory.GetNextOrCurrentTestConnection()).CompleteFromTransport(firstException); - Assert.Same(firstException, await reconnectingErrorTcs.Task.OrTimeout()); + Assert.Same(firstException, await reconnectingErrorTcs.Task.DefaultTimeout()); Assert.Single(retryContexts); Assert.Same(firstException, retryContexts[0].RetryReason); Assert.Equal(0, retryContexts[0].PreviousRetryCount); Assert.Equal(TimeSpan.Zero, retryContexts[0].ElapsedTime); - await reconnectedConnectionIdTcs.Task.OrTimeout(); + await reconnectedConnectionIdTcs.Task.DefaultTimeout(); Assert.Equal(1, reconnectingCount); Assert.Equal(1, reconnectedCount); @@ -347,21 +348,21 @@ bool ExpectedErrors(WriteContext writeContext) var secondException = new Exception(); (await testConnectionFactory.GetNextOrCurrentTestConnection()).CompleteFromTransport(secondException); - Assert.Same(secondException, await reconnectingErrorTcs.Task.OrTimeout()); + Assert.Same(secondException, await reconnectingErrorTcs.Task.DefaultTimeout()); Assert.Equal(2, retryContexts.Count); Assert.Same(secondException, retryContexts[1].RetryReason); Assert.Equal(0, retryContexts[1].PreviousRetryCount); Assert.Equal(TimeSpan.Zero, retryContexts[1].ElapsedTime); - await reconnectedConnectionIdTcs.Task.OrTimeout(); + await reconnectedConnectionIdTcs.Task.DefaultTimeout(); Assert.Equal(2, reconnectingCount); Assert.Equal(2, reconnectedCount); Assert.Equal(TaskStatus.WaitingForActivation, closedErrorTcs.Task.Status); - await hubConnection.StopAsync().OrTimeout(); + await hubConnection.StopAsync().DefaultTimeout(); - var closeError = await closedErrorTcs.Task.OrTimeout(); + var closeError = await closedErrorTcs.Task.DefaultTimeout(); Assert.Null(closeError); Assert.Equal(2, reconnectingCount); Assert.Equal(2, reconnectedCount); @@ -422,7 +423,7 @@ bool ExpectedErrors(WriteContext writeContext) return Task.CompletedTask; }; - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var currentConnection = await testConnectionFactory.GetNextOrCurrentTestConnection(); await currentConnection.ReceiveJsonMessage(new @@ -432,7 +433,7 @@ await currentConnection.ReceiveJsonMessage(new allowReconnect = true, }); - var reconnectingException = await reconnectingErrorTcs.Task.OrTimeout(); + var reconnectingException = await reconnectingErrorTcs.Task.DefaultTimeout(); var expectedMessage = "The server closed the connection with the following error: Error!"; Assert.Equal(expectedMessage, reconnectingException.Message); @@ -441,11 +442,11 @@ await currentConnection.ReceiveJsonMessage(new Assert.Equal(0, retryContexts[0].PreviousRetryCount); Assert.Equal(TimeSpan.Zero, retryContexts[0].ElapsedTime); - await reconnectedConnectionIdTcs.Task.OrTimeout(); + await reconnectedConnectionIdTcs.Task.DefaultTimeout(); - await hubConnection.StopAsync().OrTimeout(); + await hubConnection.StopAsync().DefaultTimeout(); - var closeError = await closedErrorTcs.Task.OrTimeout(); + var closeError = await closedErrorTcs.Task.DefaultTimeout(); Assert.Null(closeError); Assert.Equal(1, reconnectingCount); Assert.Equal(1, reconnectedCount); @@ -497,7 +498,7 @@ bool ExpectedErrors(WriteContext writeContext) return Task.CompletedTask; }; - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var currentConnection = await testConnectionFactory.GetNextOrCurrentTestConnection(); await currentConnection.ReceiveJsonMessage(new @@ -506,7 +507,7 @@ await currentConnection.ReceiveJsonMessage(new error = "Error!", }); - var closeError = await closedErrorTcs.Task.OrTimeout(); + var closeError = await closedErrorTcs.Task.DefaultTimeout(); Assert.Equal("The server closed the connection with the following error: Error!", closeError.Message); Assert.Equal(0, nextRetryDelayCallCount); @@ -556,12 +557,12 @@ bool ExpectedErrors(WriteContext writeContext) return Task.CompletedTask; }; - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var firstException = new Exception(); (await testConnectionFactory.GetNextOrCurrentTestConnection()).CompleteFromTransport(firstException); - await closedErrorTcs.Task.OrTimeout(); + await closedErrorTcs.Task.DefaultTimeout(); Assert.Equal(0, reconnectingCount); Assert.Equal(0, reconnectedCount); @@ -611,12 +612,12 @@ bool ExpectedErrors(WriteContext writeContext) return Task.CompletedTask; }; - var startTask = hubConnection.StartAsync().OrTimeout(); + var startTask = hubConnection.StartAsync().DefaultTimeout(); var firstException = new Exception(); (await testConnectionFactory.GetNextOrCurrentTestConnection()).CompleteFromTransport(firstException); - Assert.Same(firstException, await Assert.ThrowsAsync(() => startTask).OrTimeout()); + Assert.Same(firstException, await Assert.ThrowsAsync(() => startTask).DefaultTimeout()); Assert.Equal(HubConnectionState.Disconnected, hubConnection.State); Assert.Equal(0, reconnectingCount); Assert.Equal(0, reconnectedCount); @@ -689,14 +690,14 @@ bool ExpectedErrors(WriteContext writeContext) // Complete handshake var currentTestConnection = await testConnectionFactory.GetNextOrCurrentTestConnection(); - await currentTestConnection.ReadHandshakeAndSendResponseAsync().OrTimeout(); + await currentTestConnection.ReadHandshakeAndSendResponseAsync().DefaultTimeout(); - await startTask.OrTimeout(); + await startTask.DefaultTimeout(); var firstException = new Exception(); currentTestConnection.CompleteFromTransport(firstException); - Assert.Same(firstException, await reconnectingErrorTcs.Task.OrTimeout()); + Assert.Same(firstException, await reconnectingErrorTcs.Task.DefaultTimeout()); Assert.Single(retryContexts); Assert.Same(firstException, retryContexts[0].RetryReason); Assert.Equal(0, retryContexts[0].PreviousRetryCount); @@ -705,7 +706,7 @@ bool ExpectedErrors(WriteContext writeContext) var secondException = new Exception(); (await testConnectionFactory.GetNextOrCurrentTestConnection()).CompleteFromTransport(secondException); - await secondRetryDelayTcs.Task.OrTimeout(); + await secondRetryDelayTcs.Task.DefaultTimeout(); Assert.Equal(2, retryContexts.Count); Assert.Same(secondException, retryContexts[1].RetryReason); @@ -714,16 +715,16 @@ bool ExpectedErrors(WriteContext writeContext) // Complete handshake currentTestConnection = await testConnectionFactory.GetNextOrCurrentTestConnection(); - await currentTestConnection.ReadHandshakeAndSendResponseAsync().OrTimeout(); - await reconnectedConnectionIdTcs.Task.OrTimeout(); + await currentTestConnection.ReadHandshakeAndSendResponseAsync().DefaultTimeout(); + await reconnectedConnectionIdTcs.Task.DefaultTimeout(); Assert.Equal(1, reconnectingCount); Assert.Equal(1, reconnectedCount); Assert.Equal(TaskStatus.WaitingForActivation, closedErrorTcs.Task.Status); - await hubConnection.StopAsync().OrTimeout(); + await hubConnection.StopAsync().DefaultTimeout(); - var closeError = await closedErrorTcs.Task.OrTimeout(); + var closeError = await closedErrorTcs.Task.DefaultTimeout(); Assert.Null(closeError); Assert.Equal(1, reconnectingCount); Assert.Equal(1, reconnectedCount); @@ -796,14 +797,14 @@ bool ExpectedErrors(WriteContext writeContext) // Complete handshake var currentTestConnection = await testConnectionFactory.GetNextOrCurrentTestConnection(); - await currentTestConnection.ReadHandshakeAndSendResponseAsync().OrTimeout(); + await currentTestConnection.ReadHandshakeAndSendResponseAsync().DefaultTimeout(); - await startTask.OrTimeout(); + await startTask.DefaultTimeout(); var firstException = new Exception(); currentTestConnection.CompleteFromTransport(firstException); - Assert.Same(firstException, await reconnectingErrorTcs.Task.OrTimeout()); + Assert.Same(firstException, await reconnectingErrorTcs.Task.DefaultTimeout()); Assert.Single(retryContexts); Assert.Same(firstException, retryContexts[0].RetryReason); Assert.Equal(0, retryContexts[0].PreviousRetryCount); @@ -811,20 +812,20 @@ bool ExpectedErrors(WriteContext writeContext) // Respond to handshake with error. currentTestConnection = await testConnectionFactory.GetNextOrCurrentTestConnection(); - await currentTestConnection.ReadSentTextMessageAsync().OrTimeout(); + await currentTestConnection.ReadSentTextMessageAsync().DefaultTimeout(); var output = MemoryBufferWriter.Get(); try { HandshakeProtocol.WriteResponseMessage(new HandshakeResponseMessage("Error!"), output); - await currentTestConnection.Application.Output.WriteAsync(output.ToArray()).OrTimeout(); + await currentTestConnection.Application.Output.WriteAsync(output.ToArray()).DefaultTimeout(); } finally { MemoryBufferWriter.Return(output); } - await secondRetryDelayTcs.Task.OrTimeout(); + await secondRetryDelayTcs.Task.DefaultTimeout(); Assert.Equal(2, retryContexts.Count); Assert.IsType(retryContexts[1].RetryReason); @@ -834,16 +835,16 @@ bool ExpectedErrors(WriteContext writeContext) // Complete handshake currentTestConnection = await testConnectionFactory.GetNextOrCurrentTestConnection(); - await currentTestConnection.ReadHandshakeAndSendResponseAsync().OrTimeout(); - await reconnectedConnectionIdTcs.Task.OrTimeout(); + await currentTestConnection.ReadHandshakeAndSendResponseAsync().DefaultTimeout(); + await reconnectedConnectionIdTcs.Task.DefaultTimeout(); Assert.Equal(1, reconnectingCount); Assert.Equal(1, reconnectedCount); Assert.Equal(TaskStatus.WaitingForActivation, closedErrorTcs.Task.Status); - await hubConnection.StopAsync().OrTimeout(); + await hubConnection.StopAsync().DefaultTimeout(); - var closeError = await closedErrorTcs.Task.OrTimeout(); + var closeError = await closedErrorTcs.Task.DefaultTimeout(); Assert.Null(closeError); Assert.Equal(1, reconnectingCount); Assert.Equal(1, reconnectedCount); @@ -918,12 +919,12 @@ async Task OnTestConnectionStart() // Allow the first connection to start successfully. connectionStartTcs.SetResult(); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var firstException = new Exception(); (await testConnectionFactory.GetNextOrCurrentTestConnection()).CompleteFromTransport(firstException); - Assert.Same(firstException, await reconnectingErrorTcs.Task.OrTimeout()); + Assert.Same(firstException, await reconnectingErrorTcs.Task.DefaultTimeout()); Assert.Single(retryContexts); Assert.Same(firstException, retryContexts[0].RetryReason); Assert.Equal(0, retryContexts[0].PreviousRetryCount); @@ -933,11 +934,11 @@ async Task OnTestConnectionStart() var stopTask = hubConnection.StopAsync(); connectionStartTcs.SetResult(); - Assert.IsType(await closedErrorTcs.Task.OrTimeout()); + Assert.IsType(await closedErrorTcs.Task.DefaultTimeout()); Assert.Single(retryContexts); Assert.Equal(1, reconnectingCount); Assert.Equal(0, reconnectedCount); - await stopTask.OrTimeout(); + await stopTask.DefaultTimeout(); } } @@ -995,20 +996,20 @@ bool ExpectedErrors(WriteContext writeContext) }; // Allow the first connection to start successfully. - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var firstException = new Exception(); (await testConnectionFactory.GetNextOrCurrentTestConnection()).CompleteFromTransport(firstException); - Assert.Same(firstException, await reconnectingErrorTcs.Task.OrTimeout()); + Assert.Same(firstException, await reconnectingErrorTcs.Task.DefaultTimeout()); Assert.Single(retryContexts); Assert.Same(firstException, retryContexts[0].RetryReason); Assert.Equal(0, retryContexts[0].PreviousRetryCount); Assert.Equal(TimeSpan.Zero, retryContexts[0].ElapsedTime); - await hubConnection.StopAsync().OrTimeout(); + await hubConnection.StopAsync().DefaultTimeout(); - Assert.IsType(await closedErrorTcs.Task.OrTimeout()); + Assert.IsType(await closedErrorTcs.Task.DefaultTimeout()); Assert.Single(retryContexts); Assert.Equal(1, reconnectingCount); Assert.Equal(0, reconnectedCount); diff --git a/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.cs b/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.cs index c1090a0df66b..a3ece738adbd 100644 --- a/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.cs +++ b/src/SignalR/clients/csharp/Client/test/UnitTests/HubConnectionTests.cs @@ -3,7 +3,6 @@ using System; using System.Buffers; -using System.Collections.Generic; using System.Threading; using System.Threading.Channels; using System.Threading.Tasks; @@ -11,6 +10,7 @@ using Microsoft.AspNetCore.Connections.Features; using Microsoft.AspNetCore.SignalR.Protocol; using Microsoft.AspNetCore.SignalR.Tests; +using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Testing; @@ -33,10 +33,10 @@ bool ExpectedErrors(WriteContext writeContext) { var exception = new InvalidOperationException(); var hubConnection = CreateHubConnection(new TestConnection(), protocol: MockHubProtocol.Throw(exception), LoggerFactory); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var actualException = - await Assert.ThrowsAsync(async () => await hubConnection.InvokeAsync("test").OrTimeout()); + await Assert.ThrowsAsync(async () => await hubConnection.InvokeAsync("test").DefaultTimeout()); Assert.Same(exception, actualException); } } @@ -48,10 +48,10 @@ public async Task SendAsyncThrowsIfSerializingMessageFails() { var exception = new InvalidOperationException(); var hubConnection = CreateHubConnection(new TestConnection(), protocol: MockHubProtocol.Throw(exception), LoggerFactory); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var actualException = - await Assert.ThrowsAsync(async () => await hubConnection.SendAsync("test").OrTimeout()); + await Assert.ThrowsAsync(async () => await hubConnection.SendAsync("test").DefaultTimeout()); Assert.Same(exception, actualException); } } @@ -73,8 +73,8 @@ public async Task ClosedEventRaisedWhenTheClientIsStopped() return Task.CompletedTask; }; - await hubConnection.StartAsync().OrTimeout(); - await hubConnection.StopAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); + await hubConnection.StopAsync().DefaultTimeout(); Assert.Null(await closedEventTcs.Task); } @@ -87,15 +87,15 @@ public async Task StopAsyncCanBeCalledFromOnHandler() var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); hubConnection.On("method", async () => { - await hubConnection.StopAsync().OrTimeout(); + await hubConnection.StopAsync().DefaultTimeout(); tcs.SetResult(); }); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); - await connection.ReceiveJsonMessage(new { type = HubProtocolConstants.InvocationMessageType, target= "method", arguments = new object[] { } }).OrTimeout(); + await connection.ReceiveJsonMessage(new { type = HubProtocolConstants.InvocationMessageType, target= "method", arguments = new object[] { } }).DefaultTimeout(); - await tcs.Task.OrTimeout(); + await tcs.Task.DefaultTimeout(); } [Fact] @@ -112,12 +112,12 @@ public async Task StopAsyncDoesNotWaitForOnHandlers() await tcs.Task; }); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); - await connection.ReceiveJsonMessage(new { type = HubProtocolConstants.InvocationMessageType, target = "method", arguments = new object[] { } }).OrTimeout(); + await connection.ReceiveJsonMessage(new { type = HubProtocolConstants.InvocationMessageType, target = "method", arguments = new object[] { } }).DefaultTimeout(); - await methodCalledTcs.Task.OrTimeout(); - await hubConnection.StopAsync().OrTimeout(); + await methodCalledTcs.Task.DefaultTimeout(); + await hubConnection.StopAsync().DefaultTimeout(); tcs.SetResult(); } @@ -129,9 +129,9 @@ public async Task PendingInvocationsAreCanceledWhenConnectionClosesCleanly() { var hubConnection = CreateHubConnection(new TestConnection(), loggerFactory: LoggerFactory); - await hubConnection.StartAsync().OrTimeout(); - var invokeTask = hubConnection.InvokeAsync("testMethod").OrTimeout(); - await hubConnection.StopAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); + var invokeTask = hubConnection.InvokeAsync("testMethod").DefaultTimeout(); + await hubConnection.StopAsync().DefaultTimeout(); await Assert.ThrowsAsync(async () => await invokeTask); } @@ -151,8 +151,8 @@ bool ExpectedErrors(WriteContext writeContext) var connection = new TestConnection(); var hubConnection = CreateHubConnection(connection, protocol: Mock.Of(), LoggerFactory); - await hubConnection.StartAsync().OrTimeout(); - var invokeTask = hubConnection.InvokeAsync("testMethod").OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); + var invokeTask = hubConnection.InvokeAsync("testMethod").DefaultTimeout(); var exception = new InvalidOperationException(); connection.CompleteFromTransport(exception); @@ -169,9 +169,9 @@ public async Task PendingInvocationsAreCanceledWhenTokenTriggered() { var hubConnection = CreateHubConnection(new TestConnection(), loggerFactory: LoggerFactory); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var cts = new CancellationTokenSource(); - var invokeTask = hubConnection.InvokeAsync("testMethod", cancellationToken: cts.Token).OrTimeout(); + var invokeTask = hubConnection.InvokeAsync("testMethod", cancellationToken: cts.Token).DefaultTimeout(); cts.Cancel(); await Assert.ThrowsAsync(async () => await invokeTask); @@ -186,14 +186,14 @@ public async Task InvokeAsyncCanceledWhenPassedCanceledToken() var connection = new TestConnection(); var hubConnection = CreateHubConnection(connection, loggerFactory: LoggerFactory); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); await Assert.ThrowsAsync(() => - hubConnection.InvokeAsync("testMethod", cancellationToken: new CancellationToken(canceled: true)).OrTimeout()); + hubConnection.InvokeAsync("testMethod", cancellationToken: new CancellationToken(canceled: true)).DefaultTimeout()); - await hubConnection.StopAsync().OrTimeout(); + await hubConnection.StopAsync().DefaultTimeout(); // Assert that InvokeAsync didn't send a message - Assert.Null(await connection.ReadSentTextMessageAsync().OrTimeout()); + Assert.Null(await connection.ReadSentTextMessageAsync().DefaultTimeout()); } } @@ -205,14 +205,14 @@ public async Task SendAsyncCanceledWhenPassedCanceledToken() var connection = new TestConnection(); var hubConnection = CreateHubConnection(connection, loggerFactory: LoggerFactory); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); await Assert.ThrowsAsync(() => - hubConnection.SendAsync("testMethod", cancellationToken: new CancellationToken(canceled: true)).OrTimeout()); + hubConnection.SendAsync("testMethod", cancellationToken: new CancellationToken(canceled: true)).DefaultTimeout()); - await hubConnection.StopAsync().OrTimeout(); + await hubConnection.StopAsync().DefaultTimeout(); // Assert that SendAsync didn't send a message - Assert.Null(await connection.ReadSentTextMessageAsync().OrTimeout()); + Assert.Null(await connection.ReadSentTextMessageAsync().DefaultTimeout()); } } @@ -224,14 +224,14 @@ public async Task StreamAsChannelAsyncCanceledWhenPassedCanceledToken() var connection = new TestConnection(); var hubConnection = CreateHubConnection(connection, loggerFactory: LoggerFactory); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); await Assert.ThrowsAsync(() => - hubConnection.StreamAsChannelAsync("testMethod", cancellationToken: new CancellationToken(canceled: true)).OrTimeout()); + hubConnection.StreamAsChannelAsync("testMethod", cancellationToken: new CancellationToken(canceled: true)).DefaultTimeout()); - await hubConnection.StopAsync().OrTimeout(); + await hubConnection.StopAsync().DefaultTimeout(); // Assert that StreamAsChannelAsync didn't send a message - Assert.Null(await connection.ReadSentTextMessageAsync().OrTimeout()); + Assert.Null(await connection.ReadSentTextMessageAsync().DefaultTimeout()); } } @@ -243,14 +243,14 @@ public async Task StreamAsyncCanceledWhenPassedCanceledToken() var connection = new TestConnection(); var hubConnection = CreateHubConnection(connection, loggerFactory: LoggerFactory); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var result = hubConnection.StreamAsync("testMethod", cancellationToken: new CancellationToken(canceled: true)); - await Assert.ThrowsAsync(() => result.GetAsyncEnumerator().MoveNextAsync().OrTimeout()); + await Assert.ThrowsAsync(() => result.GetAsyncEnumerator().MoveNextAsync().DefaultTimeout()); - await hubConnection.StopAsync().OrTimeout(); + await hubConnection.StopAsync().DefaultTimeout(); // Assert that StreamAsync didn't send a message - Assert.Null(await connection.ReadSentTextMessageAsync().OrTimeout()); + Assert.Null(await connection.ReadSentTextMessageAsync().DefaultTimeout()); } } @@ -262,21 +262,21 @@ public async Task CanCancelTokenAfterStreamIsCompleted() var connection = new TestConnection(); var hubConnection = CreateHubConnection(connection, loggerFactory: LoggerFactory); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var asyncEnumerable = hubConnection.StreamAsync("Stream", 1); using var cts = new CancellationTokenSource(); await using var e = asyncEnumerable.GetAsyncEnumerator(cts.Token); var task = e.MoveNextAsync(); - var item = await connection.ReadSentJsonAsync().OrTimeout(); + var item = await connection.ReadSentJsonAsync().DefaultTimeout(); await connection.ReceiveJsonMessage( new { type = HubProtocolConstants.CompletionMessageType, invocationId = item["invocationId"] } - ).OrTimeout(); + ).DefaultTimeout(); - await task.OrTimeout(); + await task.DefaultTimeout(); - while (await e.MoveNextAsync().OrTimeout()) + while (await e.MoveNextAsync().DefaultTimeout()) { } // Cancel after stream is completed but before the AsyncEnumerator is disposed @@ -304,9 +304,9 @@ bool ExpectedErrors(WriteContext writeContext) return Task.CompletedTask; }; - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); - var exception = Assert.IsType(await closeTcs.Task.OrTimeout()); + var exception = Assert.IsType(await closeTcs.Task.DefaultTimeout()); // We use an interpolated string so the tests are accurate on non-US machines. Assert.Equal($"Server timeout ({hubConnection.ServerTimeout.TotalMilliseconds:0.00}ms) elapsed without receiving a message from the server.", exception.Message); @@ -323,7 +323,7 @@ public async Task ServerTimeoutIsDisabledWhenUsingTransportWithInherentKeepAlive var hubConnection = CreateHubConnection(testConnection, loggerFactory: LoggerFactory); hubConnection.ServerTimeout = TimeSpan.FromMilliseconds(1); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var closeTcs = new TaskCompletionSource(); hubConnection.Closed += ex => @@ -332,11 +332,11 @@ public async Task ServerTimeoutIsDisabledWhenUsingTransportWithInherentKeepAlive return Task.CompletedTask; }; - await hubConnection.RunTimerActions().OrTimeout(); + await hubConnection.RunTimerActions().DefaultTimeout(); Assert.False(closeTcs.Task.IsCompleted); - await hubConnection.DisposeAsync().OrTimeout(); + await hubConnection.DisposeAsync().DefaultTimeout(); } } @@ -355,10 +355,10 @@ bool ExpectedErrors(WriteContext writeContext) var hubConnection = CreateHubConnection(new TestConnection(), loggerFactory: LoggerFactory); hubConnection.ServerTimeout = TimeSpan.FromMilliseconds(2000); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); // Start an invocation (but we won't complete it) - var invokeTask = hubConnection.InvokeAsync("Method").OrTimeout(); + var invokeTask = hubConnection.InvokeAsync("Method").DefaultTimeout(); var exception = await Assert.ThrowsAsync(() => invokeTask); @@ -375,34 +375,34 @@ public async Task StreamIntsToServer() { var connection = new TestConnection(); var hubConnection = CreateHubConnection(connection, loggerFactory: LoggerFactory); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var channel = Channel.CreateUnbounded(); var invokeTask = hubConnection.InvokeAsync("SomeMethod", channel.Reader); - var invocation = await connection.ReadSentJsonAsync().OrTimeout(); + var invocation = await connection.ReadSentJsonAsync().DefaultTimeout(); Assert.Equal(HubProtocolConstants.InvocationMessageType, invocation["type"]); Assert.Equal("SomeMethod", invocation["target"]); var streamId = invocation["streamIds"][0]; foreach (var number in new[] { 42, 43, 322, 3145, -1234 }) { - await channel.Writer.WriteAsync(number).AsTask().OrTimeout(); + await channel.Writer.WriteAsync(number).AsTask().DefaultTimeout(); - var item = await connection.ReadSentJsonAsync().OrTimeout(); + var item = await connection.ReadSentJsonAsync().DefaultTimeout(); Assert.Equal(HubProtocolConstants.StreamItemMessageType, item["type"]); Assert.Equal(number, item["item"]); Assert.Equal(streamId, item["invocationId"]); } channel.Writer.TryComplete(); - var completion = await connection.ReadSentJsonAsync().OrTimeout(); + var completion = await connection.ReadSentJsonAsync().DefaultTimeout(); Assert.Equal(HubProtocolConstants.CompletionMessageType, completion["type"]); await connection.ReceiveJsonMessage( new { type = HubProtocolConstants.CompletionMessageType, invocationId = invocation["invocationId"], result = 42 } - ).OrTimeout(); - var result = await invokeTask.OrTimeout(); + ).DefaultTimeout(); + var result = await invokeTask.DefaultTimeout(); Assert.Equal(42, result); } } @@ -415,12 +415,12 @@ public async Task StreamIntsToServerViaSend() { var connection = new TestConnection(); var hubConnection = CreateHubConnection(connection, loggerFactory: LoggerFactory); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var channel = Channel.CreateUnbounded(); var sendTask = hubConnection.SendAsync("SomeMethod", channel.Reader); - var invocation = await connection.ReadSentJsonAsync().OrTimeout(); + var invocation = await connection.ReadSentJsonAsync().DefaultTimeout(); Assert.Equal(HubProtocolConstants.InvocationMessageType, invocation["type"]); Assert.Equal("SomeMethod", invocation["target"]); Assert.Null(invocation["invocationId"]); @@ -430,7 +430,7 @@ public async Task StreamIntsToServerViaSend() { await channel.Writer.WriteAsync(item); - var received = await connection.ReadSentJsonAsync().OrTimeout(); + var received = await connection.ReadSentJsonAsync().DefaultTimeout(); Assert.Equal(HubProtocolConstants.StreamItemMessageType, received["type"]); Assert.Equal(item, received["item"]); Assert.Equal(streamId, received["invocationId"]); @@ -446,12 +446,12 @@ public async Task StreamsObjectsToServer() { var connection = new TestConnection(); var hubConnection = CreateHubConnection(connection, loggerFactory: LoggerFactory); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var channel = Channel.CreateUnbounded(); var invokeTask = hubConnection.InvokeAsync("UploadMethod", channel.Reader); - var invocation = await connection.ReadSentJsonAsync().OrTimeout(); + var invocation = await connection.ReadSentJsonAsync().DefaultTimeout(); Assert.Equal(HubProtocolConstants.InvocationMessageType, invocation["type"]); Assert.Equal("UploadMethod", invocation["target"]); var id = invocation["invocationId"]; @@ -461,21 +461,21 @@ public async Task StreamsObjectsToServer() { await channel.Writer.WriteAsync(item); - var received = await connection.ReadSentJsonAsync().OrTimeout(); + var received = await connection.ReadSentJsonAsync().DefaultTimeout(); Assert.Equal(HubProtocolConstants.StreamItemMessageType, received["type"]); Assert.Equal(item.Foo, received["item"]["foo"]); Assert.Equal(item.Bar, received["item"]["bar"]); } channel.Writer.TryComplete(); - var completion = await connection.ReadSentJsonAsync().OrTimeout(); + var completion = await connection.ReadSentJsonAsync().DefaultTimeout(); Assert.Equal(HubProtocolConstants.CompletionMessageType, completion["type"]); var expected = new SampleObject("oof", 14); await connection.ReceiveJsonMessage( new { type = HubProtocolConstants.CompletionMessageType, invocationId = id, result = expected } - ).OrTimeout(); - var result = await invokeTask.OrTimeout(); + ).DefaultTimeout(); + var result = await invokeTask.DefaultTimeout(); Assert.Equal(expected.Foo, result.Foo); Assert.Equal(expected.Bar, result.Bar); @@ -490,13 +490,13 @@ public async Task UploadStreamCancellationSendsStreamComplete() { var connection = new TestConnection(); var hubConnection = CreateHubConnection(connection, loggerFactory: LoggerFactory); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var cts = new CancellationTokenSource(); var channel = Channel.CreateUnbounded(); var invokeTask = hubConnection.InvokeAsync("UploadMethod", channel.Reader, cts.Token); - var invokeMessage = await connection.ReadSentJsonAsync().OrTimeout(); + var invokeMessage = await connection.ReadSentJsonAsync().DefaultTimeout(); Assert.Equal(HubProtocolConstants.InvocationMessageType, invokeMessage["type"]); cts.Cancel(); @@ -508,7 +508,7 @@ public async Task UploadStreamCancellationSendsStreamComplete() } // the next sent message should be a completion message - var complete = await connection.ReadSentJsonAsync().OrTimeout(); + var complete = await connection.ReadSentJsonAsync().DefaultTimeout(); Assert.Equal(HubProtocolConstants.CompletionMessageType, complete["type"]); Assert.EndsWith("canceled by client.", ((string)complete["error"])); } @@ -522,17 +522,17 @@ public async Task InvocationCanCompleteBeforeStreamCompletes() { var connection = new TestConnection(); var hubConnection = CreateHubConnection(connection, loggerFactory: LoggerFactory); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var channel = Channel.CreateUnbounded(); var invokeTask = hubConnection.InvokeAsync("UploadMethod", channel.Reader); - var invocation = await connection.ReadSentJsonAsync().OrTimeout(); + var invocation = await connection.ReadSentJsonAsync().DefaultTimeout(); Assert.Equal(HubProtocolConstants.InvocationMessageType, invocation["type"]); var id = invocation["invocationId"]; await connection.ReceiveJsonMessage(new { type = HubProtocolConstants.CompletionMessageType, invocationId = id, result = 10 }); - var result = await invokeTask.OrTimeout(); + var result = await invokeTask.DefaultTimeout(); Assert.Equal(10L, result); // after the server returns, with whatever response @@ -554,7 +554,7 @@ bool ExpectedErrors(WriteContext writeContext) { var connection = new TestConnection(); var hubConnection = CreateHubConnection(connection, loggerFactory: LoggerFactory); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); // we expect to get sent ints, and receive an int back var channel = Channel.CreateUnbounded(); @@ -587,7 +587,7 @@ public async Task CanAwaitInvokeFromOnHandlerWithServerClosingConnection() { var connection = new TestConnection(); var hubConnection = CreateHubConnection(connection, loggerFactory: LoggerFactory); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); hubConnection.On("Echo", async msg => @@ -595,7 +595,7 @@ public async Task CanAwaitInvokeFromOnHandlerWithServerClosingConnection() try { // This should be canceled when the connection is closed - await hubConnection.InvokeAsync("Echo", msg).OrTimeout(); + await hubConnection.InvokeAsync("Echo", msg).DefaultTimeout(); } catch (Exception ex) { @@ -614,15 +614,15 @@ public async Task CanAwaitInvokeFromOnHandlerWithServerClosingConnection() return Task.CompletedTask; }; - await connection.ReceiveJsonMessage(new { type = HubProtocolConstants.InvocationMessageType, target = "Echo", arguments = new object[] { "42" } }).OrTimeout(); + await connection.ReceiveJsonMessage(new { type = HubProtocolConstants.InvocationMessageType, target = "Echo", arguments = new object[] { "42" } }).DefaultTimeout(); // Read sent message first to make sure invoke has been processed and is waiting for a response - await connection.ReadSentJsonAsync().OrTimeout(); - await connection.ReceiveJsonMessage(new { type = HubProtocolConstants.CloseMessageType }).OrTimeout(); + await connection.ReadSentJsonAsync().DefaultTimeout(); + await connection.ReceiveJsonMessage(new { type = HubProtocolConstants.CloseMessageType }).DefaultTimeout(); - await closedTcs.Task.OrTimeout(); + await closedTcs.Task.DefaultTimeout(); - await Assert.ThrowsAsync(() => tcs.Task.OrTimeout()); + await Assert.ThrowsAsync(() => tcs.Task.DefaultTimeout()); } } @@ -633,7 +633,7 @@ public async Task CanAwaitUsingHubConnection() { var connection = new TestConnection(); await using var hubConnection = CreateHubConnection(connection, loggerFactory: LoggerFactory); - await hubConnection.StartAsync().OrTimeout(); + await hubConnection.StartAsync().DefaultTimeout(); } } diff --git a/src/SignalR/clients/csharp/Client/test/UnitTests/LongPollingTransportTests.cs b/src/SignalR/clients/csharp/Client/test/UnitTests/LongPollingTransportTests.cs index 4274997b0459..fc048ee2beb1 100644 --- a/src/SignalR/clients/csharp/Client/test/UnitTests/LongPollingTransportTests.cs +++ b/src/SignalR/clients/csharp/Client/test/UnitTests/LongPollingTransportTests.cs @@ -14,6 +14,7 @@ using Microsoft.AspNetCore.Connections; using Microsoft.AspNetCore.Http.Connections.Client.Internal; using Microsoft.AspNetCore.SignalR.Tests; +using Microsoft.AspNetCore.Testing; using Moq; using Moq.Protected; using Xunit; @@ -55,7 +56,7 @@ public async Task LongPollingTransportStopsPollAndSendLoopsWhenTransportStopped( await longPollingTransport.StopAsync(); } - await transportActiveTask.OrTimeout(); + await transportActiveTask.DefaultTimeout(); } } @@ -79,7 +80,7 @@ public async Task LongPollingTransportStopsWhenPollReceives204() { await longPollingTransport.StartAsync(TestUri, TransferFormat.Binary); - await longPollingTransport.Running.OrTimeout(); + await longPollingTransport.Running.DefaultTimeout(); Assert.True(longPollingTransport.Input.TryRead(out var result)); Assert.True(result.IsCompleted); @@ -137,8 +138,8 @@ public async Task LongPollingTransportResponseWithNoContentDoesNotStopPoll() { await longPollingTransport.StartAsync(TestUri, TransferFormat.Binary); - var data = await longPollingTransport.Input.ReadAllAsync().OrTimeout(); - await longPollingTransport.Running.OrTimeout(); + var data = await longPollingTransport.Input.ReadAllAsync().DefaultTimeout(); + await longPollingTransport.Running.DefaultTimeout(); Assert.Equal(Encoding.UTF8.GetBytes("HelloWorld"), data); } finally @@ -208,7 +209,7 @@ async Task ReadAsync() await longPollingTransport.Input.ReadAsync(); } - await ReadAsync().OrTimeout(); + await ReadAsync().DefaultTimeout(); }); Assert.Contains(" 500 ", exception.Message); } @@ -255,13 +256,13 @@ public async Task StopTransportWhenConnectionAlreadyStoppedOnServer() { var longPollingTransport = new LongPollingTransport(httpClient, LoggerFactory); - await longPollingTransport.StartAsync(TestUri, TransferFormat.Binary).OrTimeout(); + await longPollingTransport.StartAsync(TestUri, TransferFormat.Binary).DefaultTimeout(); var stopTask = longPollingTransport.StopAsync(); pollRequestTcs.SetResult(); - await stopTask.OrTimeout(); + await stopTask.DefaultTimeout(); } } } @@ -301,9 +302,9 @@ public async Task LongPollingTransportStopsWhenSendRequestFails() await longPollingTransport.Output.WriteAsync(Encoding.UTF8.GetBytes("Hello World")); - await longPollingTransport.Running.OrTimeout(); + await longPollingTransport.Running.DefaultTimeout(); - var exception = await Assert.ThrowsAsync(async () => await longPollingTransport.Input.ReadAllAsync().OrTimeout()); + var exception = await Assert.ThrowsAsync(async () => await longPollingTransport.Input.ReadAllAsync().DefaultTimeout()); Assert.Contains(" 500 ", exception.Message); Assert.True(stopped); @@ -347,9 +348,9 @@ public async Task LongPollingTransportShutsDownWhenChannelIsClosed() longPollingTransport.Output.Complete(); - await longPollingTransport.Running.OrTimeout(); + await longPollingTransport.Running.DefaultTimeout(); - await longPollingTransport.Input.ReadAllAsync().OrTimeout(); + await longPollingTransport.Input.ReadAllAsync().DefaultTimeout(); } finally { @@ -380,9 +381,9 @@ public async Task LongPollingTransportShutsDownImmediatelyEvenIfServerDoesntComp longPollingTransport.Output.Complete(); - await longPollingTransport.Running.OrTimeout(); + await longPollingTransport.Running.DefaultTimeout(); - await longPollingTransport.Input.ReadAllAsync().OrTimeout(); + await longPollingTransport.Input.ReadAllAsync().DefaultTimeout(); } finally { @@ -430,7 +431,7 @@ public async Task LongPollingTransportDispatchesMessagesReceivedFromPoll() await longPollingTransport.StartAsync(TestUri, TransferFormat.Binary); // Wait for the transport to finish - await longPollingTransport.Running.OrTimeout(); + await longPollingTransport.Running.DefaultTimeout(); // Pull Messages out of the channel var message = await longPollingTransport.Input.ReadAllAsync(); @@ -501,7 +502,7 @@ public async Task LongPollingTransportSendsAvailableMessagesWhenTheyArrive() longPollingTransport.Output.Complete(); - await longPollingTransport.Running.OrTimeout(); + await longPollingTransport.Running.DefaultTimeout(); await longPollingTransport.Input.ReadAllAsync(); Assert.Single(sentRequests); @@ -568,9 +569,9 @@ public async Task LongPollingTransportSendsDeleteAfterPollEnds() var task = longPollingTransport.StopAsync(); - await deleteTcs.Task.OrTimeout(); + await deleteTcs.Task.DefaultTimeout(); - await task.OrTimeout(); + await task.DefaultTimeout(); } } @@ -664,7 +665,7 @@ public async Task LongPollingTransportRePollsIfRequestCanceled() { await longPollingTransport.StartAsync(TestUri, TransferFormat.Binary); - var completedTask = await Task.WhenAny(completionTcs.Task, longPollingTransport.Running).OrTimeout(); + var completedTask = await Task.WhenAny(completionTcs.Task, longPollingTransport.Running).DefaultTimeout(); Assert.Equal(completionTcs.Task, completedTask); } finally diff --git a/src/SignalR/clients/csharp/Client/test/UnitTests/ServerSentEventsTransportTests.cs b/src/SignalR/clients/csharp/Client/test/UnitTests/ServerSentEventsTransportTests.cs index 5ea3b18515a9..8ddae13f58c1 100644 --- a/src/SignalR/clients/csharp/Client/test/UnitTests/ServerSentEventsTransportTests.cs +++ b/src/SignalR/clients/csharp/Client/test/UnitTests/ServerSentEventsTransportTests.cs @@ -13,6 +13,7 @@ using Microsoft.AspNetCore.Http.Connections.Client.Internal; using Microsoft.AspNetCore.Internal; using Microsoft.AspNetCore.SignalR.Tests; +using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Logging.Testing; using Moq; using Moq.Protected; @@ -53,11 +54,11 @@ public async Task CanStartStopSSETransport() { var sseTransport = new ServerSentEventsTransport(httpClient, LoggerFactory); await sseTransport.StartAsync( - new Uri("http://fakeuri.org"), TransferFormat.Text).OrTimeout(); + new Uri("http://fakeuri.org"), TransferFormat.Text).DefaultTimeout(); - await eventStreamTcs.Task.OrTimeout(); - await sseTransport.StopAsync().OrTimeout(); - await sseTransport.Running.OrTimeout(); + await eventStreamTcs.Task.DefaultTimeout(); + await sseTransport.StopAsync().DefaultTimeout(); + await sseTransport.Running.DefaultTimeout(); } } finally @@ -102,19 +103,19 @@ public async Task SSETransportStopsSendAndReceiveLoopsWhenTransportStopped() try { await sseTransport.StartAsync( - new Uri("http://fakeuri.org"), TransferFormat.Text).OrTimeout(); + new Uri("http://fakeuri.org"), TransferFormat.Text).DefaultTimeout(); transportActiveTask = sseTransport.Running; Assert.False(transportActiveTask.IsCompleted); - var message = await sseTransport.Input.ReadSingleAsync().OrTimeout(); + var message = await sseTransport.Input.ReadSingleAsync().DefaultTimeout(); Assert.StartsWith("3:abc", Encoding.ASCII.GetString(message)); } finally { - await sseTransport.StopAsync().OrTimeout(); + await sseTransport.StopAsync().DefaultTimeout(); } - await transportActiveTask.OrTimeout(); + await transportActiveTask.DefaultTimeout(); } } @@ -152,11 +153,11 @@ public async Task SSETransportStopsWithErrorIfServerSendsIncompleteResults() var sseTransport = new ServerSentEventsTransport(httpClient, LoggerFactory); await sseTransport.StartAsync( - new Uri("http://fakeuri.org"), TransferFormat.Text).OrTimeout(); + new Uri("http://fakeuri.org"), TransferFormat.Text).DefaultTimeout(); var exception = await Assert.ThrowsAsync(() => sseTransport.Input.ReadAllAsync()); - await sseTransport.Running.OrTimeout(); + await sseTransport.Running.DefaultTimeout(); Assert.Equal("Incomplete message.", exception.Message); } @@ -210,16 +211,16 @@ bool ExpectedErrors(WriteContext writeContext) var sseTransport = new ServerSentEventsTransport(httpClient, LoggerFactory); await sseTransport.StartAsync( - new Uri("http://fakeuri.org"), TransferFormat.Text).OrTimeout(); + new Uri("http://fakeuri.org"), TransferFormat.Text).DefaultTimeout(); await eventStreamTcs.Task; await sseTransport.Output.WriteAsync(new byte[] { 0x42 }); - var exception = await Assert.ThrowsAsync(() => sseTransport.Input.ReadAllAsync().OrTimeout()); + var exception = await Assert.ThrowsAsync(() => sseTransport.Input.ReadAllAsync().DefaultTimeout()); Assert.Contains("500", exception.Message); // Errors are only communicated through the pipe - await sseTransport.Running.OrTimeout(); + await sseTransport.Running.DefaultTimeout(); } } @@ -260,12 +261,12 @@ public async Task SSETransportStopsIfChannelClosed() var sseTransport = new ServerSentEventsTransport(httpClient, LoggerFactory); await sseTransport.StartAsync( - new Uri("http://fakeuri.org"), TransferFormat.Text).OrTimeout(); - await eventStreamTcs.Task.OrTimeout(); + new Uri("http://fakeuri.org"), TransferFormat.Text).DefaultTimeout(); + await eventStreamTcs.Task.DefaultTimeout(); sseTransport.Output.Complete(); - await sseTransport.Running.OrTimeout(); + await sseTransport.Running.DefaultTimeout(); } } @@ -287,12 +288,12 @@ public async Task SSETransportStopsIfTheServerClosesTheStream() var sseTransport = new ServerSentEventsTransport(httpClient, LoggerFactory); await sseTransport.StartAsync( - new Uri("http://fakeuri.org"), TransferFormat.Text).OrTimeout(); + new Uri("http://fakeuri.org"), TransferFormat.Text).DefaultTimeout(); - var message = await sseTransport.Input.ReadSingleAsync().OrTimeout(); + var message = await sseTransport.Input.ReadSingleAsync().DefaultTimeout(); Assert.Equal("3:abc", Encoding.ASCII.GetString(message)); - await sseTransport.Running.OrTimeout(); + await sseTransport.Running.DefaultTimeout(); } } @@ -341,7 +342,7 @@ public async Task SSETransportCancelsSendOnStop() var sseTransport = new ServerSentEventsTransport(httpClient, LoggerFactory); await sseTransport.StartAsync( - new Uri("http://fakeuri.org"), TransferFormat.Text).OrTimeout(); + new Uri("http://fakeuri.org"), TransferFormat.Text).DefaultTimeout(); await eventStreamTcs.Task; await sseTransport.Output.WriteAsync(new byte[] { 0x42 }); @@ -375,7 +376,7 @@ public async Task SSETransportDoesNotSupportBinary() { var sseTransport = new ServerSentEventsTransport(httpClient, LoggerFactory); - var ex = await Assert.ThrowsAsync(() => sseTransport.StartAsync(new Uri("http://fakeuri.org"), TransferFormat.Binary).OrTimeout()); + var ex = await Assert.ThrowsAsync(() => sseTransport.StartAsync(new Uri("http://fakeuri.org"), TransferFormat.Binary).DefaultTimeout()); Assert.Equal("transferFormat", ex.ParamName); Assert.Equal($"The 'Binary' transfer format is not supported by this transport.", ex.GetLocalizationSafeMessage()); diff --git a/src/SignalR/clients/csharp/Client/test/UnitTests/TimerAwaitableTests.cs b/src/SignalR/clients/csharp/Client/test/UnitTests/TimerAwaitableTests.cs index 869626d7cd53..6dd578264976 100644 --- a/src/SignalR/clients/csharp/Client/test/UnitTests/TimerAwaitableTests.cs +++ b/src/SignalR/clients/csharp/Client/test/UnitTests/TimerAwaitableTests.cs @@ -22,7 +22,7 @@ public async Task FinalizerRunsIfTimerAwaitableReferencesObject() GC.WaitForPendingFinalizers(); // Make sure the finalizer runs - await tcs.Task.OrTimeout(); + await tcs.Task.DefaultTimeout(); } [MethodImpl(MethodImplOptions.NoInlining)] diff --git a/src/SignalR/common/Http.Connections/test/HttpConnectionDispatcherTests.cs b/src/SignalR/common/Http.Connections/test/HttpConnectionDispatcherTests.cs index 0db4c758509c..ec5a6313dc5b 100644 --- a/src/SignalR/common/Http.Connections/test/HttpConnectionDispatcherTests.cs +++ b/src/SignalR/common/Http.Connections/test/HttpConnectionDispatcherTests.cs @@ -17,7 +17,6 @@ using Microsoft.AspNetCore.Connections; using Microsoft.AspNetCore.Connections.Features; using Microsoft.AspNetCore.Http.Connections.Internal; -using Microsoft.AspNetCore.Http.Connections.Internal.Transports; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Internal; using Microsoft.AspNetCore.SignalR.Tests; @@ -119,7 +118,7 @@ public async Task CheckThatThresholdValuesAreEnforced() // Reading here puts us below the threshold await connection.Transport.Input.ConsumeAsync(5); - await writeTask.AsTask().OrTimeout(); + await writeTask.AsTask().DefaultTimeout(); } } @@ -222,7 +221,7 @@ public async Task CheckThatThresholdValuesAreEnforcedWithSends(HttpTransportType var executeTask = dispatcher.ExecuteAsync(context, new HttpConnectionDispatcherOptions(), app); Assert.False(executeTask.IsCompleted); await connection.Transport.Input.ConsumeAsync(10); - await executeTask.OrTimeout(); + await executeTask.DefaultTimeout(); Assert.True(connection.Transport.Input.TryRead(out var result)); Assert.Equal("Hi", Encoding.UTF8.GetString(result.Buffer.ToArray())); @@ -475,9 +474,9 @@ public async Task TransportEndingGracefullyWaitsOnApplication(HttpTransportType cts.Cancel(); } - await task.OrTimeout(); + await task.DefaultTimeout(); - await connection.ApplicationTask.OrTimeout(); + await connection.ApplicationTask.DefaultTimeout(); } } } @@ -530,7 +529,7 @@ public async Task TransportEndingGracefullyWaitsOnApplicationLongPolling() // Pretend the transport closed because the client disconnected cts.Cancel(); - await task.OrTimeout(); + await task.DefaultTimeout(); // We've been gone longer than the expiration time connection.LastSeenUtc = DateTime.UtcNow.Subtract(TimeSpan.FromSeconds(10)); @@ -540,7 +539,7 @@ public async Task TransportEndingGracefullyWaitsOnApplicationLongPolling() manager.Scan(); // The application task should complete gracefully - await connection.ApplicationTask.OrTimeout(); + await connection.ApplicationTask.DefaultTimeout(); } } } @@ -1046,7 +1045,7 @@ public async Task LongPollingTimeoutSets200StatusCode() var app = builder.Build(); var options = new HttpConnectionDispatcherOptions(); options.LongPolling.PollTimeout = TimeSpan.FromSeconds(2); - await dispatcher.ExecuteAsync(context, options, app).OrTimeout(); + await dispatcher.ExecuteAsync(context, options, app).DefaultTimeout(); Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode); } @@ -1138,16 +1137,16 @@ bool ExpectedErrors(WriteContext writeContext) var app = builder.Build(); var options = new HttpConnectionDispatcherOptions(); // First poll completes immediately - await dispatcher.ExecuteAsync(context, options, app).OrTimeout(); + await dispatcher.ExecuteAsync(context, options, app).DefaultTimeout(); var sync = new SyncPoint(); context.Response.Body = new BlockingStream(sync); var dispatcherTask = dispatcher.ExecuteAsync(context, options, app); - await connection.Transport.Output.WriteAsync(new byte[] { 1 }).OrTimeout(); - await sync.WaitForSyncPoint().OrTimeout(); + await connection.Transport.Output.WriteAsync(new byte[] { 1 }).DefaultTimeout(); + await sync.WaitForSyncPoint().DefaultTimeout(); // Cancel write to response body connection.TryCancelSend(long.MaxValue); sync.Continue(); - await dispatcherTask.OrTimeout(); + await dispatcherTask.DefaultTimeout(); // Connection should be removed on canceled write Assert.False(manager.TryGetConnection(connection.ConnectionId, out var _)); } @@ -1174,12 +1173,12 @@ public async Task SSEConnectionClosesWhenSendTimeoutReached() context.Response.Body = new BlockingStream(sync, isSSE: true); var options = new HttpConnectionDispatcherOptions(); var dispatcherTask = dispatcher.ExecuteAsync(context, options, app); - await connection.Transport.Output.WriteAsync(new byte[] { 1 }).OrTimeout(); - await sync.WaitForSyncPoint().OrTimeout(); + await connection.Transport.Output.WriteAsync(new byte[] { 1 }).DefaultTimeout(); + await sync.WaitForSyncPoint().DefaultTimeout(); // Cancel write to response body connection.TryCancelSend(long.MaxValue); sync.Continue(); - await dispatcherTask.OrTimeout(); + await dispatcherTask.DefaultTimeout(); // Connection should be removed on canceled write Assert.False(manager.TryGetConnection(connection.ConnectionId, out var _)); } @@ -1211,12 +1210,12 @@ bool ExpectedErrors(WriteContext writeContext) var options = new HttpConnectionDispatcherOptions(); options.WebSockets.CloseTimeout = TimeSpan.FromSeconds(0); var dispatcherTask = dispatcher.ExecuteAsync(context, options, app); - await connection.Transport.Output.WriteAsync(new byte[] { 1 }).OrTimeout(); - await sync.WaitForSyncPoint().OrTimeout(); + await connection.Transport.Output.WriteAsync(new byte[] { 1 }).DefaultTimeout(); + await sync.WaitForSyncPoint().DefaultTimeout(); // Cancel write to response body connection.TryCancelSend(long.MaxValue); sync.Continue(); - await dispatcherTask.OrTimeout(); + await dispatcherTask.DefaultTimeout(); // Connection should be removed on canceled write Assert.False(manager.TryGetConnection(connection.ConnectionId, out var _)); } @@ -1247,7 +1246,7 @@ public async Task WebSocketTransportTimesOutWhenCloseFrameNotReceived() var task = dispatcher.ExecuteAsync(context, options, app); - await task.OrTimeout(); + await task.DefaultTimeout(); } } @@ -1292,7 +1291,7 @@ public async Task RequestToActiveConnectionId409ForStreamingTransports(HttpTrans manager.CloseConnections(); - await request1.OrTimeout(); + await request1.DefaultTimeout(); } } @@ -1335,7 +1334,7 @@ public async Task RequestToActiveConnectionIdKillsPreviousConnectionLongPolling( var request2 = dispatcher.ExecuteAsync(context2, options, app); // Wait for poll to be canceled - await request1.OrTimeout(); + await request1.DefaultTimeout(); Assert.Equal(StatusCodes.Status204NoContent, context1.Response.StatusCode); @@ -1398,7 +1397,7 @@ public async Task MultipleRequestsToActiveConnectionId409ForLongPolling() lastPollTcs.SetResult(); - var completedTask = await Task.WhenAny(request1, request2).OrTimeout(); + var completedTask = await Task.WhenAny(request1, request2).DefaultTimeout(); if (completedTask == request1) { @@ -1415,8 +1414,8 @@ public async Task MultipleRequestsToActiveConnectionId409ForLongPolling() manager.CloseConnections(); - await request1.OrTimeout(); - await request2.OrTimeout(); + await request1.DefaultTimeout(); + await request2.DefaultTimeout(); } } @@ -1588,12 +1587,12 @@ public async Task AttemptingToPollWhileAlreadyPollingReplacesTheCurrentPoll() var task2 = dispatcher.ExecuteAsync(context2, options, app); // Task 1 should finish when request 2 arrives - await task1.OrTimeout(); + await task1.DefaultTimeout(); // Send a message from the app to complete Task 2 await connection.Transport.Output.WriteAsync(Encoding.UTF8.GetBytes("Hello, World")); - await task2.OrTimeout(); + await task2.DefaultTimeout(); // Verify the results Assert.Equal(StatusCodes.Status204NoContent, context1.Response.StatusCode); @@ -1672,14 +1671,14 @@ public async Task LongPollingKeepsWindowsPrincipalAndIdentityBetweenRequests() context.User.AddIdentity(new ClaimsIdentity()); // would get stuck if EndPoint was running - await dispatcher.ExecuteAsync(context, options, app).OrTimeout(); + await dispatcher.ExecuteAsync(context, options, app).DefaultTimeout(); Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode); var currentUser = connection.User; var connectionHandlerTask = dispatcher.ExecuteAsync(context, options, app); - await connection.Transport.Output.WriteAsync(Encoding.UTF8.GetBytes("Unblock")).AsTask().OrTimeout(); - await connectionHandlerTask.OrTimeout(); + await connection.Transport.Output.WriteAsync(Encoding.UTF8.GetBytes("Unblock")).AsTask().DefaultTimeout(); + await connectionHandlerTask.DefaultTimeout(); // This is the important check Assert.Same(currentUser, connection.User); @@ -1724,14 +1723,14 @@ public async Task LongPollingKeepsWindowsIdentityWithoutWindowsPrincipalBetweenR context.User.AddIdentity(new ClaimsIdentity()); // would get stuck if EndPoint was running - await dispatcher.ExecuteAsync(context, options, app).OrTimeout(); + await dispatcher.ExecuteAsync(context, options, app).DefaultTimeout(); Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode); var currentUser = connection.User; var connectionHandlerTask = dispatcher.ExecuteAsync(context, options, app); - await connection.Transport.Output.WriteAsync(Encoding.UTF8.GetBytes("Unblock")).AsTask().OrTimeout(); - await connectionHandlerTask.OrTimeout(); + await connection.Transport.Output.WriteAsync(Encoding.UTF8.GetBytes("Unblock")).AsTask().DefaultTimeout(); + await connectionHandlerTask.DefaultTimeout(); // This is the important check Assert.Same(currentUser, connection.User); @@ -1763,7 +1762,7 @@ public async Task SetsInherentKeepAliveFeatureOnFirstLongPollingRequest() var options = new HttpConnectionDispatcherOptions(); options.LongPolling.PollTimeout = TimeSpan.FromMilliseconds(1); // We don't care about the poll itself - await dispatcher.ExecuteAsync(context, options, app).OrTimeout(); + await dispatcher.ExecuteAsync(context, options, app).DefaultTimeout(); Assert.True(connection.HasInherentKeepAlive); @@ -1796,7 +1795,7 @@ public async Task DeleteEndpointRejectsRequestToTerminateNonLongPollingTransport var app = builder.Build(); var options = new HttpConnectionDispatcherOptions(); - _ = dispatcher.ExecuteAsync(context, options, app).OrTimeout(); + _ = dispatcher.ExecuteAsync(context, options, app).DefaultTimeout(); // Issue the delete request var deleteContext = new DefaultHttpContext(); @@ -1806,7 +1805,7 @@ public async Task DeleteEndpointRejectsRequestToTerminateNonLongPollingTransport var ms = new MemoryStream(); deleteContext.Response.Body = ms; - await dispatcher.ExecuteAsync(deleteContext, options, app).OrTimeout(); + await dispatcher.ExecuteAsync(deleteContext, options, app).DefaultTimeout(); // Verify the response from the DELETE request Assert.Equal(StatusCodes.Status400BadRequest, deleteContext.Response.StatusCode); @@ -1849,19 +1848,19 @@ public async Task DeleteEndpointGracefullyTerminatesLongPolling() Assert.False(pollTask.IsCompleted); - await dispatcher.ExecuteAsync(deleteContext, options, app).OrTimeout(); + await dispatcher.ExecuteAsync(deleteContext, options, app).DefaultTimeout(); - await pollTask.OrTimeout(); + await pollTask.DefaultTimeout(); // Verify that everything shuts down - await connection.ApplicationTask.OrTimeout(); - await connection.TransportTask.OrTimeout(); + await connection.ApplicationTask.DefaultTimeout(); + await connection.TransportTask.DefaultTimeout(); // Verify the response from the DELETE request Assert.Equal(StatusCodes.Status202Accepted, deleteContext.Response.StatusCode); Assert.Equal("text/plain", deleteContext.Response.ContentType); - await connection.DisposeAndRemoveTask.OrTimeout(); + await connection.DisposeAndRemoveTask.DefaultTimeout(); // Verify the connection was removed from the manager Assert.False(manager.TryGetConnection(connection.ConnectionToken, out _)); @@ -1889,7 +1888,7 @@ public async Task DeleteEndpointGracefullyTerminatesLongPollingEvenWhenBetweenPo var options = new HttpConnectionDispatcherOptions(); options.LongPolling.PollTimeout = TimeSpan.FromMilliseconds(1); - await dispatcher.ExecuteAsync(context, options, app).OrTimeout(); + await dispatcher.ExecuteAsync(context, options, app).DefaultTimeout(); // Issue the delete request and make sure the poll completes var deleteContext = new DefaultHttpContext(); @@ -1897,19 +1896,19 @@ public async Task DeleteEndpointGracefullyTerminatesLongPollingEvenWhenBetweenPo deleteContext.Request.QueryString = new QueryString($"?id={connection.ConnectionToken}"); deleteContext.Request.Method = "DELETE"; - await dispatcher.ExecuteAsync(deleteContext, options, app).OrTimeout(); + await dispatcher.ExecuteAsync(deleteContext, options, app).DefaultTimeout(); // Verify the response from the DELETE request Assert.Equal(StatusCodes.Status202Accepted, deleteContext.Response.StatusCode); Assert.Equal("text/plain", deleteContext.Response.ContentType); // Verify that everything shuts down - await connection.ApplicationTask.OrTimeout(); - await connection.TransportTask.OrTimeout(); + await connection.ApplicationTask.DefaultTimeout(); + await connection.TransportTask.DefaultTimeout(); Assert.NotNull(connection.DisposeAndRemoveTask); - await connection.DisposeAndRemoveTask.OrTimeout(); + await connection.DisposeAndRemoveTask.DefaultTimeout(); // Verify the connection was removed from the manager Assert.False(manager.TryGetConnection(connection.ConnectionToken, out _)); @@ -1951,12 +1950,12 @@ public async Task DeleteEndpointTerminatesLongPollingWithHangingApplication() Assert.False(pollTask.IsCompleted); - await dispatcher.ExecuteAsync(deleteContext, options, app).OrTimeout(); + await dispatcher.ExecuteAsync(deleteContext, options, app).DefaultTimeout(); - await pollTask.OrTimeout(); + await pollTask.DefaultTimeout(); // Verify that transport shuts down - await connection.TransportTask.OrTimeout(); + await connection.TransportTask.DefaultTimeout(); // Verify the response from the DELETE request Assert.Equal(StatusCodes.Status202Accepted, deleteContext.Response.StatusCode); @@ -1985,36 +1984,36 @@ public async Task PollCanReceiveFinalMessageAfterAppCompletes() var messageTcs2 = new TaskCompletionSource(); ConnectionDelegate connectionDelegate = async c => { - await waitForMessageTcs1.Task.OrTimeout(); - await c.Transport.Output.WriteAsync(Encoding.UTF8.GetBytes("Message1")).OrTimeout(); + await waitForMessageTcs1.Task.DefaultTimeout(); + await c.Transport.Output.WriteAsync(Encoding.UTF8.GetBytes("Message1")).DefaultTimeout(); messageTcs1.TrySetResult(); - await waitForMessageTcs2.Task.OrTimeout(); - await c.Transport.Output.WriteAsync(Encoding.UTF8.GetBytes("Message2")).OrTimeout(); + await waitForMessageTcs2.Task.DefaultTimeout(); + await c.Transport.Output.WriteAsync(Encoding.UTF8.GetBytes("Message2")).DefaultTimeout(); messageTcs2.TrySetResult(); }; { var options = new HttpConnectionDispatcherOptions(); var context = MakeRequest("/foo", connection, new ServiceCollection()); - await dispatcher.ExecuteAsync(context, options, connectionDelegate).OrTimeout(); + await dispatcher.ExecuteAsync(context, options, connectionDelegate).DefaultTimeout(); // second poll should have data waitForMessageTcs1.SetResult(); - await messageTcs1.Task.OrTimeout(); + await messageTcs1.Task.DefaultTimeout(); var ms = new MemoryStream(); context.Response.Body = ms; // Now send the second poll - await dispatcher.ExecuteAsync(context, options, connectionDelegate).OrTimeout(); + await dispatcher.ExecuteAsync(context, options, connectionDelegate).DefaultTimeout(); Assert.Equal("Message1", Encoding.UTF8.GetString(ms.ToArray())); waitForMessageTcs2.SetResult(); - await messageTcs2.Task.OrTimeout(); + await messageTcs2.Task.DefaultTimeout(); context = MakeRequest("/foo", connection, new ServiceCollection()); ms.Seek(0, SeekOrigin.Begin); context.Response.Body = ms; // This is the third poll which gets the final message after the app is complete - await dispatcher.ExecuteAsync(context, options, connectionDelegate).OrTimeout(); + await dispatcher.ExecuteAsync(context, options, connectionDelegate).DefaultTimeout(); Assert.Equal("Message2", Encoding.UTF8.GetString(ms.ToArray())); } } @@ -2108,13 +2107,13 @@ public async Task WriteThatIsDisposedBeforeCompleteReturns404() await streamCopySyncPoint.WaitForSyncPoint(); // Start disposing. This will close the output and cause the write to error - var disposeTask = connection.DisposeAsync().OrTimeout(); + var disposeTask = connection.DisposeAsync().DefaultTimeout(); // Continue writing on a completed writer streamCopySyncPoint.Continue(); - await sendTask.OrTimeout(); - await disposeTask.OrTimeout(); + await sendTask.DefaultTimeout(); + await disposeTask.DefaultTimeout(); // Ensure response status is correctly set Assert.Equal(404, context.Response.StatusCode); @@ -2159,17 +2158,17 @@ public async Task CanDisposeWhileWriteLockIsBlockedOnBackpressureAndResponseRetu requestBody.Seek(0, SeekOrigin.Begin); // Write some data to the pipe to fill it up and make the next write wait - await connection.ApplicationStream.WriteAsync(buffer, 0, buffer.Length).OrTimeout(); + await connection.ApplicationStream.WriteAsync(buffer, 0, buffer.Length).DefaultTimeout(); // Write. This will take the WriteLock and block because of back pressure var sendTask = dispatcher.ExecuteAsync(context, options, app); // Start disposing. This will take the StateLock and attempt to take the WriteLock // Dispose will cancel pending flush and should unblock WriteLock - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); // Sends were unblocked - await sendTask.OrTimeout(); + await sendTask.DefaultTimeout(); Assert.Equal(404, context.Response.StatusCode); } @@ -2213,18 +2212,18 @@ public async Task LongPollingCanPollIfWritePipeHasBackpressure() requestBody.Seek(0, SeekOrigin.Begin); // Write some data to the pipe to fill it up and make the next write wait - await connection.ApplicationStream.WriteAsync(buffer, 0, buffer.Length).OrTimeout(); + await connection.ApplicationStream.WriteAsync(buffer, 0, buffer.Length).DefaultTimeout(); // This will block until the pipe is unblocked - var sendTask = dispatcher.ExecuteAsync(context, options, app).OrTimeout(); + var sendTask = dispatcher.ExecuteAsync(context, options, app).DefaultTimeout(); Assert.False(sendTask.IsCompleted); var pollContext = MakeRequest("/foo", connection, services); // This should unblock the send that is waiting because of backpressure // Testing deadlock regression where pipe backpressure would hold the same lock that poll would use - await dispatcher.ExecuteAsync(pollContext, options, app).OrTimeout(); + await dispatcher.ExecuteAsync(pollContext, options, app).DefaultTimeout(); - await sendTask.OrTimeout(); + await sendTask.DefaultTimeout(); } } } @@ -2258,13 +2257,13 @@ bool ExpectedErrors(WriteContext writeContext) var context = MakeRequest("/foo", connection, services); // Initial poll will complete immediately - await dispatcher.ExecuteAsync(context, options, app).OrTimeout(); + await dispatcher.ExecuteAsync(context, options, app).DefaultTimeout(); var pollContext = MakeRequest("/foo", connection, services); var pollTask = dispatcher.ExecuteAsync(pollContext, options, app); // fail LongPollingTransport ReadAsync connection.Transport.Output.Complete(new InvalidOperationException()); - await pollTask.OrTimeout(); + await pollTask.DefaultTimeout(); Assert.Equal(StatusCodes.Status500InternalServerError, pollContext.Response.StatusCode); Assert.False(manager.TryGetConnection(connection.ConnectionToken, out var _)); @@ -2306,19 +2305,19 @@ public async Task LongPollingConnectionClosingTriggersConnectionClosedToken() Assert.False(pollTask.IsCompleted); - await dispatcher.ExecuteAsync(deleteContext, options, app).OrTimeout(); + await dispatcher.ExecuteAsync(deleteContext, options, app).DefaultTimeout(); - await pollTask.OrTimeout(); + await pollTask.DefaultTimeout(); // Verify that transport shuts down - await connection.TransportTask.OrTimeout(); + await connection.TransportTask.DefaultTimeout(); // Verify the response from the DELETE request Assert.Equal(StatusCodes.Status202Accepted, deleteContext.Response.StatusCode); Assert.Equal("text/plain", deleteContext.Response.ContentType); Assert.Equal(HttpConnectionStatus.Disposed, connection.Status); - await connection.ConnectionClosed.WaitForCancellationAsync().OrTimeout(); + await connection.ConnectionClosed.WaitForCancellationAsync().DefaultTimeout(); // Verify the connection not removed because application is hanging Assert.True(manager.TryGetConnection(connection.ConnectionId, out _)); @@ -2348,7 +2347,7 @@ public async Task SSEConnectionClosingTriggersConnectionClosedToken() // Close the SSE connection connection.Transport.Output.Complete(); - await connection.ConnectionClosed.WaitForCancellationAsync().OrTimeout(); + await connection.ConnectionClosed.WaitForCancellationAsync().DefaultTimeout(); } } @@ -2376,10 +2375,10 @@ public async Task WebSocketConnectionClosingTriggersConnectionClosedToken() _ = dispatcher.ExecuteAsync(context, options, app); var websocket = (TestWebSocketConnectionFeature)context.Features.Get(); - await websocket.Accepted.OrTimeout(); - await websocket.Client.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "", cancellationToken: default).OrTimeout(); + await websocket.Accepted.DefaultTimeout(); + await websocket.Client.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "", cancellationToken: default).DefaultTimeout(); - await connection.ConnectionClosed.WaitForCancellationAsync().OrTimeout(); + await connection.ConnectionClosed.WaitForCancellationAsync().DefaultTimeout(); } } @@ -2426,11 +2425,11 @@ public async Task AbortingConnectionAbortsHttpContextAndTriggersConnectionClosed var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); connection.ConnectionClosed.Register(() => tcs.SetResult(null)); - await tcs.Task.OrTimeout(); + await tcs.Task.DefaultTimeout(); tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); lifetimeFeature.RequestAborted.Register(() => tcs.SetResult(null)); - await tcs.Task.OrTimeout(); + await tcs.Task.DefaultTimeout(); } } @@ -2456,17 +2455,17 @@ public async Task ServicesAvailableWithLongPolling() var context = MakeRequest("/foo", connection, services); // Initial poll will complete immediately - await dispatcher.ExecuteAsync(context, options, app).OrTimeout(); + await dispatcher.ExecuteAsync(context, options, app).DefaultTimeout(); var pollContext = MakeRequest("/foo", connection, services); var pollTask = dispatcher.ExecuteAsync(pollContext, options, app); - await connection.Application.Output.WriteAsync(new byte[] { 1 }).OrTimeout(); - await pollTask.OrTimeout(); + await connection.Application.Output.WriteAsync(new byte[] { 1 }).DefaultTimeout(); + await pollTask.DefaultTimeout(); var memory = new Memory(new byte[10]); pollContext.Response.Body.Position = 0; - Assert.Equal(3, await pollContext.Response.Body.ReadAsync(memory).OrTimeout()); + Assert.Equal(3, await pollContext.Response.Body.ReadAsync(memory).DefaultTimeout()); Assert.Equal(new byte[] { 1, 2, 3 }, memory.Slice(0, 3).ToArray()); // Connection will use the original service provider so this will have no effect @@ -2474,14 +2473,14 @@ public async Task ServicesAvailableWithLongPolling() pollContext = MakeRequest("/foo", connection, services); pollTask = dispatcher.ExecuteAsync(pollContext, options, app); - await connection.Application.Output.WriteAsync(new byte[] { 1 }).OrTimeout(); - await pollTask.OrTimeout(); + await connection.Application.Output.WriteAsync(new byte[] { 1 }).DefaultTimeout(); + await pollTask.DefaultTimeout(); pollContext.Response.Body.Position = 0; - Assert.Equal(3, await pollContext.Response.Body.ReadAsync(memory).OrTimeout()); + Assert.Equal(3, await pollContext.Response.Body.ReadAsync(memory).DefaultTimeout()); Assert.Equal(new byte[] { 1, 2, 3 }, memory.Slice(0, 3).ToArray()); - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -2513,30 +2512,30 @@ public async Task ServicesPreserveScopeWithLongPolling() var context = MakeRequest("/foo", connection, services); // Initial poll will complete immediately - await dispatcher.ExecuteAsync(context, options, app).OrTimeout(); + await dispatcher.ExecuteAsync(context, options, app).DefaultTimeout(); var pollContext = MakeRequest("/foo", connection, services); var pollTask = dispatcher.ExecuteAsync(pollContext, options, app); - await connection.Application.Output.WriteAsync(new byte[] { 1 }).OrTimeout(); - await pollTask.OrTimeout(); + await connection.Application.Output.WriteAsync(new byte[] { 1 }).DefaultTimeout(); + await pollTask.DefaultTimeout(); var memory = new Memory(new byte[10]); pollContext.Response.Body.Position = 0; - Assert.Equal(3, await pollContext.Response.Body.ReadAsync(memory).OrTimeout()); + Assert.Equal(3, await pollContext.Response.Body.ReadAsync(memory).DefaultTimeout()); Assert.Equal(new byte[] { 2, 3, 4 }, memory.Slice(0, 3).ToArray()); pollContext = MakeRequest("/foo", connection, services); pollTask = dispatcher.ExecuteAsync(pollContext, options, app); - await connection.Application.Output.WriteAsync(new byte[] { 1 }).OrTimeout(); - await pollTask.OrTimeout(); + await connection.Application.Output.WriteAsync(new byte[] { 1 }).DefaultTimeout(); + await pollTask.DefaultTimeout(); pollContext.Response.Body.Position = 0; - Assert.Equal(3, await pollContext.Response.Body.ReadAsync(memory).OrTimeout()); + Assert.Equal(3, await pollContext.Response.Body.ReadAsync(memory).DefaultTimeout()); Assert.Equal(new byte[] { 2, 3, 4 }, memory.Slice(0, 3).ToArray()); - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -2568,10 +2567,10 @@ public async Task DisposeLongPollingConnectionDisposesServiceScope() var context = MakeRequest("/foo", connection, services); // Initial poll will complete immediately - await dispatcher.ExecuteAsync(context, options, app).OrTimeout(); + await dispatcher.ExecuteAsync(context, options, app).DefaultTimeout(); // ServiceScope will be disposed here - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); Assert.Throws(() => connection.ServiceScope.ServiceProvider.GetService()); } diff --git a/src/SignalR/common/Http.Connections/test/HttpConnectionManagerTests.cs b/src/SignalR/common/Http.Connections/test/HttpConnectionManagerTests.cs index 35528c76267e..5d2225aabb7f 100644 --- a/src/SignalR/common/Http.Connections/test/HttpConnectionManagerTests.cs +++ b/src/SignalR/common/Http.Connections/test/HttpConnectionManagerTests.cs @@ -2,13 +2,11 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.Buffers; using System.IO.Pipelines; using System.Threading.Tasks; -using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http.Connections.Internal; -using Microsoft.AspNetCore.Internal; using Microsoft.AspNetCore.SignalR.Tests; +using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; @@ -96,7 +94,7 @@ public async Task DisposingConnectionsClosesBothSidesOfThePipe(ConnectionStates try { - await connection.DisposeAsync(closeGracefully).OrTimeout(); + await connection.DisposeAsync(closeGracefully).DefaultTimeout(); } catch (Exception ex) when (!(ex is TimeoutException)) { @@ -276,7 +274,7 @@ public async Task DisposingConnectionMultipleTimesWaitsOnConnectionClose() tcs.TrySetResult(); - await Task.WhenAll(firstTask, secondTask).OrTimeout(); + await Task.WhenAll(firstTask, secondTask).DefaultTimeout(); } } @@ -299,10 +297,10 @@ public async Task DisposingConnectionMultipleGetsExceptionFromTransportOrApp() tcs.TrySetException(new InvalidOperationException("Error")); - var exception = await Assert.ThrowsAsync(async () => await firstTask.OrTimeout()); + var exception = await Assert.ThrowsAsync(async () => await firstTask.DefaultTimeout()); Assert.Equal("Error", exception.Message); - exception = await Assert.ThrowsAsync(async () => await secondTask.OrTimeout()); + exception = await Assert.ThrowsAsync(async () => await secondTask.DefaultTimeout()); Assert.Equal("Error", exception.Message); } } @@ -326,8 +324,8 @@ public async Task DisposingConnectionMultipleGetsCancellation() tcs.TrySetCanceled(); - await Assert.ThrowsAsync(async () => await firstTask.OrTimeout()); - await Assert.ThrowsAsync(async () => await secondTask.OrTimeout()); + await Assert.ThrowsAsync(async () => await firstTask.DefaultTimeout()); + await Assert.ThrowsAsync(async () => await secondTask.DefaultTimeout()); } } diff --git a/src/SignalR/common/Http.Connections/test/LongPollingTests.cs b/src/SignalR/common/Http.Connections/test/LongPollingTests.cs index 2cd7f547d550..03a97e2c7aff 100644 --- a/src/SignalR/common/Http.Connections/test/LongPollingTests.cs +++ b/src/SignalR/common/Http.Connections/test/LongPollingTests.cs @@ -10,6 +10,7 @@ using Microsoft.AspNetCore.Connections; using Microsoft.AspNetCore.Http.Connections.Internal.Transports; using Microsoft.AspNetCore.SignalR.Tests; +using Microsoft.AspNetCore.Testing; using Xunit; namespace Microsoft.AspNetCore.Http.Connections.Tests @@ -30,7 +31,7 @@ public async Task Set204StatusCodeWhenChannelComplete() connection.Transport.Output.Complete(); - await poll.ProcessRequestAsync(context, context.RequestAborted).OrTimeout(); + await poll.ProcessRequestAsync(context, context.RequestAborted).DefaultTimeout(); Assert.Equal(204, context.Response.StatusCode); } @@ -50,7 +51,7 @@ public async Task Set200StatusCodeWhenTimeoutTokenFires() using (var cts = CancellationTokenSource.CreateLinkedTokenSource(timeoutToken, context.RequestAborted)) { - await poll.ProcessRequestAsync(context, cts.Token).OrTimeout(); + await poll.ProcessRequestAsync(context, cts.Token).DefaultTimeout(); Assert.Equal(0, context.Response.ContentLength); Assert.Equal(200, context.Response.StatusCode); @@ -74,7 +75,7 @@ public async Task FrameSentAsSingleResponse() await connection.Transport.Output.WriteAsync(Encoding.UTF8.GetBytes("Hello World")); connection.Transport.Output.Complete(); - await poll.ProcessRequestAsync(context, context.RequestAborted).OrTimeout(); + await poll.ProcessRequestAsync(context, context.RequestAborted).DefaultTimeout(); Assert.Equal(200, context.Response.StatusCode); Assert.Equal("Hello World", Encoding.UTF8.GetString(ms.ToArray())); @@ -100,7 +101,7 @@ public async Task MultipleFramesSentAsSingleResponse() connection.Transport.Output.Complete(); - await poll.ProcessRequestAsync(context, context.RequestAborted).OrTimeout(); + await poll.ProcessRequestAsync(context, context.RequestAborted).DefaultTimeout(); Assert.Equal(200, context.Response.StatusCode); diff --git a/src/SignalR/common/Http.Connections/test/MapConnectionHandlerTests.cs b/src/SignalR/common/Http.Connections/test/MapConnectionHandlerTests.cs index 7b734ac2fa5c..0ea8179dbe63 100644 --- a/src/SignalR/common/Http.Connections/test/MapConnectionHandlerTests.cs +++ b/src/SignalR/common/Http.Connections/test/MapConnectionHandlerTests.cs @@ -324,8 +324,8 @@ public async Task MapConnectionHandlerWithWebSocketSubProtocolSetsProtocol() client.Options.AddSubProtocol("protocol2"); await client.ConnectAsync(new Uri(address), CancellationToken.None); Assert.Equal("protocol1", client.SubProtocol); - await client.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None).OrTimeout(); - var result = await client.ReceiveAsync(new ArraySegment(new byte[1024]), CancellationToken.None).OrTimeout(); + await client.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None).DefaultTimeout(); + var result = await client.ReceiveAsync(new ArraySegment(new byte[1024]), CancellationToken.None).DefaultTimeout(); Assert.Equal(WebSocketMessageType.Close, result.MessageType); } diff --git a/src/SignalR/common/Http.Connections/test/ServerSentEventsTests.cs b/src/SignalR/common/Http.Connections/test/ServerSentEventsTests.cs index 85d929e8b9c6..ba7e81677e08 100644 --- a/src/SignalR/common/Http.Connections/test/ServerSentEventsTests.cs +++ b/src/SignalR/common/Http.Connections/test/ServerSentEventsTests.cs @@ -8,8 +8,9 @@ using Microsoft.AspNetCore.Connections; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Http.Connections.Internal.Transports; -using Xunit; +using Microsoft.AspNetCore.Testing; using Microsoft.AspNetCore.SignalR.Tests; +using Xunit; namespace Microsoft.AspNetCore.Http.Connections.Tests { @@ -74,7 +75,7 @@ public async Task SSEWritesMessages() await connection.Transport.Output.WriteAsync(Encoding.ASCII.GetBytes("Hello")); connection.Transport.Output.Complete(); - await task.OrTimeout(); + await task.DefaultTimeout(); Assert.Equal(":\r\ndata: Hello\r\n\r\n", Encoding.ASCII.GetString(ms.ToArray())); } } @@ -99,7 +100,7 @@ public async Task SSEWritesVeryLargeMessages() await connection.Transport.Output.WriteAsync(Encoding.ASCII.GetBytes(hText + wText)); connection.Transport.Output.Complete(); - await task.OrTimeout(); + await task.DefaultTimeout(); Assert.Equal(":\r\ndata: " + hText + wText + "\r\n\r\n", Encoding.ASCII.GetString(ms.ToArray())); } } diff --git a/src/SignalR/common/Http.Connections/test/WebSocketsTests.cs b/src/SignalR/common/Http.Connections/test/WebSocketsTests.cs index 27fc62cc7d21..5fcf20d49399 100644 --- a/src/SignalR/common/Http.Connections/test/WebSocketsTests.cs +++ b/src/SignalR/common/Http.Connections/test/WebSocketsTests.cs @@ -14,6 +14,7 @@ using Microsoft.AspNetCore.Http.Connections.Internal.Transports; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.SignalR.Tests; +using Microsoft.AspNetCore.Testing; using Microsoft.Net.Http.Headers; using Xunit; @@ -152,9 +153,9 @@ async Task CompleteApplicationAfterTransportCompletes() feature.Client.SendAbort(); // Wait for the transport - await transport.OrTimeout(); + await transport.DefaultTimeout(); - await client.OrTimeout(); + await client.DefaultTimeout(); } } } @@ -179,13 +180,13 @@ public async Task ClientReceivesInternalServerErrorWhenTheApplicationFails() // Fail in the app connection.Transport.Output.Complete(new InvalidOperationException("Catastrophic failure.")); - var clientSummary = await client.OrTimeout(); + var clientSummary = await client.DefaultTimeout(); Assert.Equal(WebSocketCloseStatus.InternalServerError, clientSummary.CloseResult.CloseStatus); // Close from the client await feature.Client.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None); - await transport.OrTimeout(); + await transport.DefaultTimeout(); } } } @@ -214,7 +215,7 @@ public async Task TransportClosesOnCloseTimeoutIfClientDoesNotSendCloseFrame() // End the app connection.Transport.Output.Complete(); - await transport.OrTimeout(TimeSpan.FromSeconds(10)); + await transport.DefaultTimeout(TimeSpan.FromSeconds(10)); // Now we're closed Assert.Equal(WebSocketState.Aborted, serverSocket.State); @@ -251,7 +252,7 @@ public async Task TransportFailsOnTimeoutWithErrorWhenApplicationFailsAndClientD // fail the client to server channel connection.Transport.Output.Complete(new Exception()); - await transport.OrTimeout(); + await transport.DefaultTimeout(); Assert.Equal(WebSocketState.Aborted, serverSocket.State); } @@ -286,11 +287,11 @@ public async Task ServerGracefullyClosesWhenApplicationEndsThenClientSendsCloseF // close the client to server channel connection.Transport.Output.Complete(); - _ = await client.OrTimeout(); + _ = await client.DefaultTimeout(); - await feature.Client.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, null, CancellationToken.None).OrTimeout(); + await feature.Client.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, null, CancellationToken.None).DefaultTimeout(); - await transport.OrTimeout(); + await transport.DefaultTimeout(); Assert.Equal(WebSocketCloseStatus.NormalClosure, serverSocket.CloseStatus); } @@ -322,14 +323,14 @@ public async Task ServerGracefullyClosesWhenClientSendsCloseFrameThenApplication // Run the client socket var client = feature.Client.ExecuteAndCaptureFramesAsync(); - await feature.Client.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, null, CancellationToken.None).OrTimeout(); + await feature.Client.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, null, CancellationToken.None).DefaultTimeout(); // close the client to server channel connection.Transport.Output.Complete(); - _ = await client.OrTimeout(); + _ = await client.DefaultTimeout(); - await transport.OrTimeout(); + await transport.DefaultTimeout(); Assert.Equal(WebSocketCloseStatus.NormalClosure, serverSocket.CloseStatus); } @@ -375,14 +376,14 @@ public async Task SubProtocolSelectorIsUsedToSelectSubProtocol() // Run the client socket var client = feature.Client.ExecuteAndCaptureFramesAsync(); - await feature.Client.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, null, CancellationToken.None).OrTimeout(); + await feature.Client.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, null, CancellationToken.None).DefaultTimeout(); // close the client to server channel connection.Transport.Output.Complete(); - _ = await client.OrTimeout(); + _ = await client.DefaultTimeout(); - await transport.OrTimeout(); + await transport.DefaultTimeout(); } } } @@ -403,7 +404,7 @@ public async Task MultiSegmentSendWillNotSendEmptyEndOfMessageFrame() await serverSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "", default); - var messages = await client.OrTimeout(); + var messages = await client.DefaultTimeout(); Assert.Equal(2, messages.Received.Count); // First message: 1 byte, endOfMessage false diff --git a/src/SignalR/common/testassets/Tests.Utils/TaskExtensions.cs b/src/SignalR/common/testassets/Tests.Utils/TaskExtensions.cs index 2e0a5215c3bb..f2e4e045ae45 100644 --- a/src/SignalR/common/testassets/Tests.Utils/TaskExtensions.cs +++ b/src/SignalR/common/testassets/Tests.Utils/TaskExtensions.cs @@ -1,10 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System.Diagnostics; -using System.IO.Pipelines; -using System.Runtime.CompilerServices; -using Microsoft.AspNetCore.Testing; namespace System.Threading.Tasks { @@ -15,44 +11,6 @@ namespace System.Threading.Tasks #endif static class TaskExtensions { - private const int DefaultTimeout = 30 * 1000; - - public static Task OrTimeout(this ValueTask task, int milliseconds = DefaultTimeout, [CallerMemberName] string memberName = null, [CallerFilePath] string filePath = null, [CallerLineNumber] int? lineNumber = null) - { - return OrTimeout(task, new TimeSpan(0, 0, 0, 0, milliseconds), memberName, filePath, lineNumber); - } - - public static Task OrTimeout(this ValueTask task, TimeSpan timeout, [CallerMemberName] string memberName = null, [CallerFilePath] string filePath = null, [CallerLineNumber] int? lineNumber = null) - { - return task.AsTask().TimeoutAfter(timeout, filePath, lineNumber ?? 0); - } - - public static Task OrTimeout(this Task task, int milliseconds = DefaultTimeout, [CallerMemberName] string memberName = null, [CallerFilePath] string filePath = null, [CallerLineNumber] int? lineNumber = null) - { - return OrTimeout(task, new TimeSpan(0, 0, 0, 0, milliseconds), memberName, filePath, lineNumber); - } - - public static Task OrTimeout(this Task task, TimeSpan timeout, [CallerMemberName] string memberName = null, [CallerFilePath] string filePath = null, [CallerLineNumber] int? lineNumber = null) - { - return task.TimeoutAfter(timeout, filePath, lineNumber ?? 0); - } - - public static Task OrTimeout(this ValueTask task, int milliseconds = DefaultTimeout, [CallerMemberName] string memberName = null, [CallerFilePath] string filePath = null, [CallerLineNumber] int? lineNumber = null) => - OrTimeout(task, new TimeSpan(0, 0, 0, 0, milliseconds), memberName, filePath, lineNumber); - - public static Task OrTimeout(this ValueTask task, TimeSpan timeout, [CallerMemberName] string memberName = null, [CallerFilePath] string filePath = null, [CallerLineNumber] int? lineNumber = null) => - task.AsTask().OrTimeout(timeout, memberName, filePath, lineNumber); - - public static Task OrTimeout(this Task task, int milliseconds = DefaultTimeout, [CallerMemberName] string memberName = null, [CallerFilePath] string filePath = null, [CallerLineNumber] int? lineNumber = null) - { - return OrTimeout(task, new TimeSpan(0, 0, 0, 0, milliseconds), memberName, filePath, lineNumber); - } - - public static Task OrTimeout(this Task task, TimeSpan timeout, [CallerMemberName] string memberName = null, [CallerFilePath] string filePath = null, [CallerLineNumber] int? lineNumber = null) - { - return task.TimeoutAfter(timeout, filePath, lineNumber ?? 0); - } - public static async Task OrThrowIfOtherFails(this Task task, Task otherTask) { var completed = await Task.WhenAny(task, otherTask); diff --git a/src/SignalR/common/testassets/Tests.Utils/TestClient.cs b/src/SignalR/common/testassets/Tests.Utils/TestClient.cs index ca8962abf025..f899b8f5383a 100644 --- a/src/SignalR/common/testassets/Tests.Utils/TestClient.cs +++ b/src/SignalR/common/testassets/Tests.Utils/TestClient.cs @@ -12,6 +12,7 @@ using Microsoft.AspNetCore.Connections.Features; using Microsoft.AspNetCore.Internal; using Microsoft.AspNetCore.SignalR.Protocol; +using Microsoft.AspNetCore.Testing; namespace Microsoft.AspNetCore.SignalR.Tests { @@ -82,7 +83,7 @@ public async Task ConnectAsync( // note that the handshake response might not immediately be readable // e.g. server is waiting for request, times out after configured duration, // and sends response with timeout error - HandshakeResponseMessage = (HandshakeResponseMessage)await ReadAsync(true).OrTimeout(); + HandshakeResponseMessage = (HandshakeResponseMessage)await ReadAsync(true).DefaultTimeout(); } return connection; diff --git a/src/SignalR/perf/Microbenchmarks/HubConnectionReceiveBenchmark.cs b/src/SignalR/perf/Microbenchmarks/HubConnectionReceiveBenchmark.cs index a5481a7aa0f9..7423febea7b0 100644 --- a/src/SignalR/perf/Microbenchmarks/HubConnectionReceiveBenchmark.cs +++ b/src/SignalR/perf/Microbenchmarks/HubConnectionReceiveBenchmark.cs @@ -5,7 +5,6 @@ using System.Buffers; using System.IO.Pipelines; using System.Linq; -using System.Threading; using System.Threading.Tasks; using BenchmarkDotNet.Attributes; using Microsoft.AspNetCore.Connections; @@ -14,8 +13,8 @@ using Microsoft.AspNetCore.Internal; using Microsoft.AspNetCore.SignalR.Microbenchmarks.Shared; using Microsoft.AspNetCore.SignalR.Tests; +using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging.Abstractions; using Microsoft.AspNetCore.SignalR.Protocol; using Microsoft.Extensions.DependencyInjection.Extensions; @@ -158,7 +157,7 @@ public async Task ReceiveAsync() _tcs.SetResult(new ReadResult(new ReadOnlySequence(_invocationMessageBytes), false, false)); // Wait for all messages to be read and invoked - await _waitTcs.Task.OrTimeout(); + await _waitTcs.Task.DefaultTimeout(); } } } diff --git a/src/SignalR/server/SignalR/test/DefaultHubLifetimeManagerTests.cs b/src/SignalR/server/SignalR/test/DefaultHubLifetimeManagerTests.cs index c3c30c48017c..4fa44b97dfcd 100644 --- a/src/SignalR/server/SignalR/test/DefaultHubLifetimeManagerTests.cs +++ b/src/SignalR/server/SignalR/test/DefaultHubLifetimeManagerTests.cs @@ -6,6 +6,7 @@ using System.Threading; using Microsoft.AspNetCore.SignalR.Protocol; using Microsoft.AspNetCore.SignalR.Specification.Tests; +using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Xunit; @@ -28,13 +29,13 @@ public async Task SendAllAsyncWillCancelWithToken() var manager = CreateNewHubLifetimeManager(); var connection1 = HubConnectionContextUtils.Create(client1.Connection); var connection2 = HubConnectionContextUtils.Create(client2.Connection); - await manager.OnConnectedAsync(connection1).OrTimeout(); - await manager.OnConnectedAsync(connection2).OrTimeout(); + await manager.OnConnectedAsync(connection1).DefaultTimeout(); + await manager.OnConnectedAsync(connection2).DefaultTimeout(); var cts = new CancellationTokenSource(); - var sendTask = manager.SendAllAsync("Hello", new object[] { "World" }, cts.Token).OrTimeout(); + var sendTask = manager.SendAllAsync("Hello", new object[] { "World" }, cts.Token).DefaultTimeout(); Assert.False(sendTask.IsCompleted); cts.Cancel(); - await sendTask.OrTimeout(); + await sendTask.DefaultTimeout(); var message = Assert.IsType(client1.TryRead()); Assert.Equal("Hello", message.Target); Assert.Single(message.Arguments); @@ -44,7 +45,7 @@ public async Task SendAllAsyncWillCancelWithToken() { ((TaskCompletionSource)t).SetResult(); }, tcs); - await tcs.Task.OrTimeout(); + await tcs.Task.DefaultTimeout(); Assert.False(connection1.ConnectionAborted.IsCancellationRequested); } } @@ -58,19 +59,19 @@ public async Task SendAllExceptAsyncWillCancelWithToken() var manager = CreateNewHubLifetimeManager(); var connection1 = HubConnectionContextUtils.Create(client1.Connection); var connection2 = HubConnectionContextUtils.Create(client2.Connection); - await manager.OnConnectedAsync(connection1).OrTimeout(); - await manager.OnConnectedAsync(connection2).OrTimeout(); + await manager.OnConnectedAsync(connection1).DefaultTimeout(); + await manager.OnConnectedAsync(connection2).DefaultTimeout(); var cts = new CancellationTokenSource(); - var sendTask = manager.SendAllExceptAsync("Hello", new object[] { "World" }, new List { connection1.ConnectionId }, cts.Token).OrTimeout(); + var sendTask = manager.SendAllExceptAsync("Hello", new object[] { "World" }, new List { connection1.ConnectionId }, cts.Token).DefaultTimeout(); Assert.False(sendTask.IsCompleted); cts.Cancel(); - await sendTask.OrTimeout(); + await sendTask.DefaultTimeout(); var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); connection2.ConnectionAborted.Register(t => { ((TaskCompletionSource)t).SetResult(); }, tcs); - await tcs.Task.OrTimeout(); + await tcs.Task.DefaultTimeout(); Assert.False(connection1.ConnectionAborted.IsCancellationRequested); Assert.Null(client1.TryRead()); } @@ -83,18 +84,18 @@ public async Task SendConnectionAsyncWillCancelWithToken() { var manager = CreateNewHubLifetimeManager(); var connection1 = HubConnectionContextUtils.Create(client1.Connection); - await manager.OnConnectedAsync(connection1).OrTimeout(); + await manager.OnConnectedAsync(connection1).DefaultTimeout(); var cts = new CancellationTokenSource(); - var sendTask = manager.SendConnectionAsync(connection1.ConnectionId, "Hello", new object[] { "World" }, cts.Token).OrTimeout(); + var sendTask = manager.SendConnectionAsync(connection1.ConnectionId, "Hello", new object[] { "World" }, cts.Token).DefaultTimeout(); Assert.False(sendTask.IsCompleted); cts.Cancel(); - await sendTask.OrTimeout(); + await sendTask.DefaultTimeout(); var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); connection1.ConnectionAborted.Register(t => { ((TaskCompletionSource)t).SetResult(); }, tcs); - await tcs.Task.OrTimeout(); + await tcs.Task.DefaultTimeout(); } } @@ -105,18 +106,18 @@ public async Task SendConnectionsAsyncWillCancelWithToken() { var manager = CreateNewHubLifetimeManager(); var connection1 = HubConnectionContextUtils.Create(client1.Connection); - await manager.OnConnectedAsync(connection1).OrTimeout(); + await manager.OnConnectedAsync(connection1).DefaultTimeout(); var cts = new CancellationTokenSource(); - var sendTask = manager.SendConnectionsAsync(new List { connection1.ConnectionId }, "Hello", new object[] { "World" }, cts.Token).OrTimeout(); + var sendTask = manager.SendConnectionsAsync(new List { connection1.ConnectionId }, "Hello", new object[] { "World" }, cts.Token).DefaultTimeout(); Assert.False(sendTask.IsCompleted); cts.Cancel(); - await sendTask.OrTimeout(); + await sendTask.DefaultTimeout(); var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); connection1.ConnectionAborted.Register(t => { ((TaskCompletionSource)t).SetResult(); }, tcs); - await tcs.Task.OrTimeout(); + await tcs.Task.DefaultTimeout(); } } @@ -127,19 +128,19 @@ public async Task SendGroupAsyncWillCancelWithToken() { var manager = CreateNewHubLifetimeManager(); var connection1 = HubConnectionContextUtils.Create(client1.Connection); - await manager.OnConnectedAsync(connection1).OrTimeout(); - await manager.AddToGroupAsync(connection1.ConnectionId, "group").OrTimeout(); + await manager.OnConnectedAsync(connection1).DefaultTimeout(); + await manager.AddToGroupAsync(connection1.ConnectionId, "group").DefaultTimeout(); var cts = new CancellationTokenSource(); - var sendTask = manager.SendGroupAsync("group", "Hello", new object[] { "World" }, cts.Token).OrTimeout(); + var sendTask = manager.SendGroupAsync("group", "Hello", new object[] { "World" }, cts.Token).DefaultTimeout(); Assert.False(sendTask.IsCompleted); cts.Cancel(); - await sendTask.OrTimeout(); + await sendTask.DefaultTimeout(); var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); connection1.ConnectionAborted.Register(t => { ((TaskCompletionSource)t).SetResult(); }, tcs); - await tcs.Task.OrTimeout(); + await tcs.Task.DefaultTimeout(); } } @@ -152,21 +153,21 @@ public async Task SendGroupExceptAsyncWillCancelWithToken() var manager = CreateNewHubLifetimeManager(); var connection1 = HubConnectionContextUtils.Create(client1.Connection); var connection2 = HubConnectionContextUtils.Create(client2.Connection); - await manager.OnConnectedAsync(connection1).OrTimeout(); - await manager.OnConnectedAsync(connection2).OrTimeout(); - await manager.AddToGroupAsync(connection1.ConnectionId, "group").OrTimeout(); - await manager.AddToGroupAsync(connection2.ConnectionId, "group").OrTimeout(); + await manager.OnConnectedAsync(connection1).DefaultTimeout(); + await manager.OnConnectedAsync(connection2).DefaultTimeout(); + await manager.AddToGroupAsync(connection1.ConnectionId, "group").DefaultTimeout(); + await manager.AddToGroupAsync(connection2.ConnectionId, "group").DefaultTimeout(); var cts = new CancellationTokenSource(); - var sendTask = manager.SendGroupExceptAsync("group", "Hello", new object[] { "World" }, new List { connection1.ConnectionId }, cts.Token).OrTimeout(); + var sendTask = manager.SendGroupExceptAsync("group", "Hello", new object[] { "World" }, new List { connection1.ConnectionId }, cts.Token).DefaultTimeout(); Assert.False(sendTask.IsCompleted); cts.Cancel(); - await sendTask.OrTimeout(); + await sendTask.DefaultTimeout(); var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); connection2.ConnectionAborted.Register(t => { ((TaskCompletionSource)t).SetResult(); }, tcs); - await tcs.Task.OrTimeout(); + await tcs.Task.DefaultTimeout(); Assert.False(connection1.ConnectionAborted.IsCancellationRequested); Assert.Null(client1.TryRead()); } @@ -179,19 +180,19 @@ public async Task SendGroupsAsyncWillCancelWithToken() { var manager = CreateNewHubLifetimeManager(); var connection1 = HubConnectionContextUtils.Create(client1.Connection); - await manager.OnConnectedAsync(connection1).OrTimeout(); - await manager.AddToGroupAsync(connection1.ConnectionId, "group").OrTimeout(); + await manager.OnConnectedAsync(connection1).DefaultTimeout(); + await manager.AddToGroupAsync(connection1.ConnectionId, "group").DefaultTimeout(); var cts = new CancellationTokenSource(); - var sendTask = manager.SendGroupsAsync(new List { "group" }, "Hello", new object[] { "World" }, cts.Token).OrTimeout(); + var sendTask = manager.SendGroupsAsync(new List { "group" }, "Hello", new object[] { "World" }, cts.Token).DefaultTimeout(); Assert.False(sendTask.IsCompleted); cts.Cancel(); - await sendTask.OrTimeout(); + await sendTask.DefaultTimeout(); var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); connection1.ConnectionAborted.Register(t => { ((TaskCompletionSource)t).SetResult(); }, tcs); - await tcs.Task.OrTimeout(); + await tcs.Task.DefaultTimeout(); } } @@ -204,13 +205,13 @@ public async Task SendUserAsyncWillCancelWithToken() var manager = CreateNewHubLifetimeManager(); var connection1 = HubConnectionContextUtils.Create(client1.Connection, userIdentifier: "user"); var connection2 = HubConnectionContextUtils.Create(client2.Connection, userIdentifier: "user"); - await manager.OnConnectedAsync(connection1).OrTimeout(); - await manager.OnConnectedAsync(connection2).OrTimeout(); + await manager.OnConnectedAsync(connection1).DefaultTimeout(); + await manager.OnConnectedAsync(connection2).DefaultTimeout(); var cts = new CancellationTokenSource(); - var sendTask = manager.SendUserAsync("user", "Hello", new object[] { "World" }, cts.Token).OrTimeout(); + var sendTask = manager.SendUserAsync("user", "Hello", new object[] { "World" }, cts.Token).DefaultTimeout(); Assert.False(sendTask.IsCompleted); cts.Cancel(); - await sendTask.OrTimeout(); + await sendTask.DefaultTimeout(); var message = Assert.IsType(client1.TryRead()); Assert.Equal("Hello", message.Target); Assert.Single(message.Arguments); @@ -220,7 +221,7 @@ public async Task SendUserAsyncWillCancelWithToken() { ((TaskCompletionSource)t).SetResult(); }, tcs); - await tcs.Task.OrTimeout(); + await tcs.Task.DefaultTimeout(); Assert.False(connection1.ConnectionAborted.IsCancellationRequested); } } @@ -234,13 +235,13 @@ public async Task SendUsersAsyncWillCancelWithToken() var manager = CreateNewHubLifetimeManager(); var connection1 = HubConnectionContextUtils.Create(client1.Connection, userIdentifier: "user1"); var connection2 = HubConnectionContextUtils.Create(client2.Connection, userIdentifier: "user2"); - await manager.OnConnectedAsync(connection1).OrTimeout(); - await manager.OnConnectedAsync(connection2).OrTimeout(); + await manager.OnConnectedAsync(connection1).DefaultTimeout(); + await manager.OnConnectedAsync(connection2).DefaultTimeout(); var cts = new CancellationTokenSource(); - var sendTask = manager.SendUsersAsync(new List { "user1", "user2" }, "Hello", new object[] { "World" }, cts.Token).OrTimeout(); + var sendTask = manager.SendUsersAsync(new List { "user1", "user2" }, "Hello", new object[] { "World" }, cts.Token).DefaultTimeout(); Assert.False(sendTask.IsCompleted); cts.Cancel(); - await sendTask.OrTimeout(); + await sendTask.DefaultTimeout(); var message = Assert.IsType(client1.TryRead()); Assert.Equal("Hello", message.Target); Assert.Single(message.Arguments); @@ -250,7 +251,7 @@ public async Task SendUsersAsyncWillCancelWithToken() { ((TaskCompletionSource)t).SetResult(); }, tcs); - await tcs.Task.OrTimeout(); + await tcs.Task.DefaultTimeout(); Assert.False(connection1.ConnectionAborted.IsCancellationRequested); } } diff --git a/src/SignalR/server/SignalR/test/EndToEndTests.cs b/src/SignalR/server/SignalR/test/EndToEndTests.cs index caebf870c68f..aeea6e57c437 100644 --- a/src/SignalR/server/SignalR/test/EndToEndTests.cs +++ b/src/SignalR/server/SignalR/test/EndToEndTests.cs @@ -42,8 +42,8 @@ public async Task CanStartAndStopConnectionUsingDefaultTransport() // The test should connect to the server using WebSockets transport on Windows 8 and newer. // On Windows 7/2008R2 it should use ServerSentEvents transport to connect to the server. var connection = new HttpConnection(new Uri(url), HttpTransports.All, LoggerFactory); - await connection.StartAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -64,8 +64,8 @@ bool ExpectedErrors(WriteContext writeContext) // The test logic lives in the TestTransportFactory and FakeTransport. var connection = new HttpConnection(new HttpConnectionOptions { Url = new Uri(url), DefaultTransferFormat = TransferFormat.Text }, LoggerFactory, new TestTransportFactory()); - await connection.StartAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -78,8 +78,8 @@ public async Task CanStartAndStopConnectionUsingGivenTransport(HttpTransportType { var url = server.Url + "/echo"; var connection = new HttpConnection(new HttpConnectionOptions { Url = new Uri(url), Transports = transportType, DefaultTransferFormat = TransferFormat.Text }, LoggerFactory); - await connection.StartAsync().OrTimeout(); - await connection.DisposeAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -97,23 +97,23 @@ public async Task WebSocketsTest() var socketUrl = server.WebSocketsUrl + "/echo"; logger.LogInformation("Connecting WebSocket to {socketUrl}", socketUrl); - await ws.ConnectAsync(new Uri(socketUrl), CancellationToken.None).OrTimeout(); + await ws.ConnectAsync(new Uri(socketUrl), CancellationToken.None).DefaultTimeout(); var bytes = Encoding.UTF8.GetBytes(message); logger.LogInformation("Sending {length} byte frame", bytes.Length); - await ws.SendAsync(new ArraySegment(bytes), WebSocketMessageType.Binary, endOfMessage: true, CancellationToken.None).OrTimeout(); + await ws.SendAsync(new ArraySegment(bytes), WebSocketMessageType.Binary, endOfMessage: true, CancellationToken.None).DefaultTimeout(); logger.LogInformation("Receiving frame"); var buffer = new ArraySegment(new byte[1024]); - var result = await ws.ReceiveAsync(buffer, CancellationToken.None).OrTimeout(); + var result = await ws.ReceiveAsync(buffer, CancellationToken.None).DefaultTimeout(); logger.LogInformation("Received {length} byte frame", result.Count); Assert.Equal(bytes, buffer.Array.AsSpan(0, result.Count).ToArray()); logger.LogInformation("Closing socket"); - await ws.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None).OrTimeout(); + await ws.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None).DefaultTimeout(); logger.LogInformation("Waiting for close"); - result = await ws.ReceiveAsync(buffer, CancellationToken.None).OrTimeout(); + result = await ws.ReceiveAsync(buffer, CancellationToken.None).DefaultTimeout(); Assert.Equal(WebSocketMessageType.Close, result.MessageType); Assert.Equal(WebSocketCloseStatus.NormalClosure, result.CloseStatus); logger.LogInformation("Closed socket"); @@ -135,24 +135,24 @@ public async Task WebSocketsReceivesAndSendsPartialFramesTest() var socketUrl = server.WebSocketsUrl + "/echo"; logger.LogInformation("Connecting WebSocket to {socketUrl}", socketUrl); - await ws.ConnectAsync(new Uri(socketUrl), CancellationToken.None).OrTimeout(); + await ws.ConnectAsync(new Uri(socketUrl), CancellationToken.None).DefaultTimeout(); var bytes = Encoding.UTF8.GetBytes(message); logger.LogInformation("Sending {length} byte frame", bytes.Length); // We're sending a partial frame, we should still get the data - await ws.SendAsync(new ArraySegment(bytes), WebSocketMessageType.Binary, endOfMessage: false, CancellationToken.None).OrTimeout(); + await ws.SendAsync(new ArraySegment(bytes), WebSocketMessageType.Binary, endOfMessage: false, CancellationToken.None).DefaultTimeout(); logger.LogInformation("Receiving frame"); var buffer = new ArraySegment(new byte[1024]); - var result = await ws.ReceiveAsync(buffer, CancellationToken.None).OrTimeout(); + var result = await ws.ReceiveAsync(buffer, CancellationToken.None).DefaultTimeout(); logger.LogInformation("Received {length} byte frame", result.Count); Assert.Equal(bytes, buffer.Array.AsSpan(0, result.Count).ToArray()); logger.LogInformation("Closing socket"); - await ws.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None).OrTimeout(); + await ws.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None).DefaultTimeout(); logger.LogInformation("Waiting for close"); - result = await ws.ReceiveAsync(buffer, CancellationToken.None).OrTimeout(); + result = await ws.ReceiveAsync(buffer, CancellationToken.None).DefaultTimeout(); Assert.Equal(WebSocketMessageType.Close, result.MessageType); Assert.Equal(WebSocketCloseStatus.NormalClosure, result.CloseStatus); logger.LogInformation("Closed socket"); @@ -188,9 +188,9 @@ public async Task HttpRequestsNotSentWhenWebSocketsTransportRequestedAndSkipNego try { var message = new byte[] { 42 }; - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); - await connection.Transport.Output.WriteAsync(message).OrTimeout(); + await connection.Transport.Output.WriteAsync(message).DefaultTimeout(); var receivedData = await connection.Transport.Input.ReadAsync(1); Assert.Equal(message, receivedData); @@ -203,7 +203,7 @@ public async Task HttpRequestsNotSentWhenWebSocketsTransportRequestedAndSkipNego finally { logger.LogInformation("Disposing Connection"); - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); logger.LogInformation("Disposed Connection"); } } @@ -237,7 +237,7 @@ public async Task HttpConnectionThrowsIfSkipNegotiationSetAndTransportIsNotWebSo try { - var exception = await Assert.ThrowsAsync(() => connection.StartAsync().OrTimeout()); + var exception = await Assert.ThrowsAsync(() => connection.StartAsync().DefaultTimeout()); Assert.Equal("Negotiation can only be skipped when using the WebSocket transport directly.", exception.Message); } catch (Exception ex) @@ -247,7 +247,7 @@ public async Task HttpConnectionThrowsIfSkipNegotiationSetAndTransportIsNotWebSo } finally { - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } } @@ -268,7 +268,7 @@ public async Task ConnectionCanSendAndReceiveMessages(HttpTransportType transpor try { logger.LogInformation("Starting connection to {url}", url); - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); logger.LogInformation("Started connection to {url}", url); var bytes = Encoding.UTF8.GetBytes(message); @@ -276,7 +276,7 @@ public async Task ConnectionCanSendAndReceiveMessages(HttpTransportType transpor logger.LogInformation("Sending {length} byte message", bytes.Length); try { - await connection.Transport.Output.WriteAsync(bytes).OrTimeout(); + await connection.Transport.Output.WriteAsync(bytes).DefaultTimeout(); } catch (OperationCanceledException) { @@ -290,7 +290,7 @@ public async Task ConnectionCanSendAndReceiveMessages(HttpTransportType transpor logger.LogInformation("Sent message"); logger.LogInformation("Receiving message"); - Assert.Equal(message, Encoding.UTF8.GetString(await connection.Transport.Input.ReadAsync(bytes.Length).OrTimeout())); + Assert.Equal(message, Encoding.UTF8.GetString(await connection.Transport.Input.ReadAsync(bytes.Length).DefaultTimeout())); logger.LogInformation("Completed receive"); } catch (Exception ex) @@ -301,7 +301,7 @@ public async Task ConnectionCanSendAndReceiveMessages(HttpTransportType transpor finally { logger.LogInformation("Disposing Connection"); - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); logger.LogInformation("Disposed Connection"); } } @@ -325,7 +325,7 @@ public async Task ConnectionCanSendAndReceiveDifferentMessageSizesWebSocketsTran try { logger.LogInformation("Starting connection to {url}", url); - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); logger.LogInformation("Started connection to {url}", url); var bytes = Encoding.UTF8.GetBytes(message); @@ -333,7 +333,7 @@ public async Task ConnectionCanSendAndReceiveDifferentMessageSizesWebSocketsTran async Task SendMessage() { logger.LogInformation("Sending {length} byte message", bytes.Length); - await connection.Transport.Output.WriteAsync(bytes).OrTimeout(); + await connection.Transport.Output.WriteAsync(bytes).DefaultTimeout(); logger.LogInformation("Sent message"); } @@ -341,7 +341,7 @@ async Task ReceiveMessage() { logger.LogInformation("Receiving message"); // Big timeout here because it can take a while to receive all the bytes - var receivedData = await connection.Transport.Input.ReadAsync(bytes.Length).OrTimeout(TimeSpan.FromMinutes(2)); + var receivedData = await connection.Transport.Input.ReadAsync(bytes.Length).DefaultTimeout(TimeSpan.FromMinutes(2)); Assert.Equal(message, Encoding.UTF8.GetString(receivedData)); logger.LogInformation("Completed receive"); } @@ -362,7 +362,7 @@ async Task ReceiveMessage() finally { logger.LogInformation("Disposing Connection"); - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); logger.LogInformation("Disposed Connection"); } } @@ -386,7 +386,7 @@ bool ExpectedErrors(WriteContext writeContext) var url = server.Url + "/auth"; var connection = new HttpConnection(new Uri(url), HttpTransportType.WebSockets, LoggerFactory); - var exception = await Assert.ThrowsAsync(() => connection.StartAsync().OrTimeout()); + var exception = await Assert.ThrowsAsync(() => connection.StartAsync().DefaultTimeout()); Assert.Contains("401", exception.Message); } @@ -417,7 +417,7 @@ bool ExpectedErrors(WriteContext writeContext) var connection = new HttpConnection(options, LoggerFactory); - await Assert.ThrowsAsync(() => connection.StartAsync().OrTimeout()); + await Assert.ThrowsAsync(() => connection.StartAsync().DefaultTimeout()); } } @@ -443,7 +443,7 @@ bool ExpectedErrors(WriteContext writeContext) try { logger.LogInformation("Starting connection to {url}", url); - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); Assert.True(false); } catch (Exception ex) @@ -453,7 +453,7 @@ bool ExpectedErrors(WriteContext writeContext) finally { logger.LogInformation("Disposing Connection"); - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); logger.LogInformation("Disposed Connection"); } } @@ -496,13 +496,13 @@ bool ExpectedErrors(WriteContext writeContext) try { logger.LogInformation("Starting connection to {url}", url); - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); logger.LogInformation("Connected to {url}", url); } finally { logger.LogInformation("Disposing Connection"); - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); logger.LogInformation("Disposed Connection"); } } @@ -568,7 +568,7 @@ private async Task ServerClosesConnectionWithErrorIfHubCannotBeCreated(HttpTrans try { - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); } catch (OperationCanceledException) { @@ -578,7 +578,7 @@ private async Task ServerClosesConnectionWithErrorIfHubCannotBeCreated(HttpTrans // The closed event will still fire with the exception we care about. } - await closeTcs.Task.OrTimeout(); + await closeTcs.Task.DefaultTimeout(); } catch (Exception ex) { @@ -588,7 +588,7 @@ private async Task ServerClosesConnectionWithErrorIfHubCannotBeCreated(HttpTrans finally { logger.LogInformation("Disposing Connection"); - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); logger.LogInformation("Disposed Connection"); } } @@ -617,7 +617,7 @@ bool ExpectedErrors(WriteContext writeContext) try { logger.LogInformation("Starting connection to {url}", url); - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); Assert.True(false); } catch (Exception ex) @@ -627,7 +627,7 @@ bool ExpectedErrors(WriteContext writeContext) finally { logger.LogInformation("Disposing Connection"); - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); logger.LogInformation("Disposed Connection"); } } @@ -668,13 +668,13 @@ bool ExpectedErrors(WriteContext writeContext) try { logger.LogInformation("Starting connection to {url}", url); - await connection.StartAsync().OrTimeout(); + await connection.StartAsync().DefaultTimeout(); logger.LogInformation("Connected to {url}", url); } finally { logger.LogInformation("Disposing Connection"); - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); logger.LogInformation("Disposed Connection"); } } diff --git a/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs b/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs index cc46cbe81336..314da2851a08 100644 --- a/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs +++ b/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs @@ -22,6 +22,7 @@ using Microsoft.AspNetCore.Http.Connections.Features; using Microsoft.AspNetCore.SignalR.Internal; using Microsoft.AspNetCore.SignalR.Protocol; +using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Testing; @@ -78,7 +79,7 @@ public async Task AsyncDisposablesInHubsAreSupported() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - var result = (await client.InvokeAsync(nameof(HubWithAsyncDisposable.Test)).OrTimeout()); + var result = (await client.InvokeAsync(nameof(HubWithAsyncDisposable.Test)).DefaultTimeout()); Assert.NotNull(result); // kill the connection @@ -107,7 +108,7 @@ public async Task ConnectionAbortedTokenTriggers() // kill the connection client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); Assert.True(state.TokenCallbackTriggered); Assert.False(state.TokenStateInConnected); @@ -131,7 +132,7 @@ public async Task OnDisconnectedAsyncTriggersWhenAbortedTokenCallbackThrows() // kill the connection client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); var firedOnConnected = (bool)client.Connection.Items[nameof(ErrorInAbortedTokenHub.OnConnectedAsync)]; var firedOnDisconnected = (bool)client.Connection.Items[nameof(ErrorInAbortedTokenHub.OnDisconnectedAsync)]; @@ -154,12 +155,12 @@ public async Task AbortFromHubMethodForcesClientDisconnect() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.SendInvocationAsync(nameof(AbortHub.Kill)).OrTimeout(); + await client.SendInvocationAsync(nameof(AbortHub.Kill)).DefaultTimeout(); - var close = Assert.IsType(await client.ReadAsync().OrTimeout()); + var close = Assert.IsType(await client.ReadAsync().DefaultTimeout()); Assert.False(close.AllowReconnect); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); Assert.Null(client.TryRead()); } @@ -209,7 +210,7 @@ public async Task HandshakeTimesOut() Assert.NotNull(client.HandshakeResponseMessage); Assert.Equal("Handshake was canceled.", client.HandshakeResponseMessage.Error); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -267,7 +268,7 @@ public async Task HandshakeFailureFromUnknownProtocolSendsResponseWithError() client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -293,7 +294,7 @@ public async Task HandshakeFailureFromUnsupportedFormatSendsResponseWithError() client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -320,12 +321,12 @@ public async Task ConnectionClosedWhenHandshakeLargerThanMaxMessageSize() sendHandshakeRequestMessage: true, expectedHandshakeResponseMessage: false); - var message = await client.ReadAsync(isHandshake: true).OrTimeout(); + var message = await client.ReadAsync(isHandshake: true).DefaultTimeout(); Assert.Equal("Handshake was canceled.", ((HandshakeResponseMessage)message).Error); // Connection closes - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); client.Dispose(); } @@ -370,7 +371,7 @@ public async Task SendingHandshakeRequestInChunksWorks() client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -404,14 +405,14 @@ public async Task SendingInvocatonInChunksWorks() await client.Connection.Application.Output.WriteAsync(part3); - var completionMessage = await task.OrTimeout() as CompletionMessage; + var completionMessage = await task.DefaultTimeout() as CompletionMessage; Assert.NotNull(completionMessage); Assert.Equal("hello", completionMessage.Result); Assert.Equal("1", completionMessage.InvocationId); client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -449,7 +450,7 @@ public async Task SendingHandshakeRequestAndInvocationInSamePayloadParsesHandsha client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -470,7 +471,7 @@ public async Task HandshakeSuccessSendsResponseWithoutError() client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -494,7 +495,7 @@ public async Task HubMessageOverTheMaxMessageSizeThrows() client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } @@ -524,7 +525,7 @@ public async Task ChunkedHubMessageOverTheMaxMessageSizeThrows() client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } @@ -559,23 +560,23 @@ public async Task ManyHubMessagesOneOverTheMaxMessageSizeThrows() await client.Connection.Application.Output.FlushAsync(); // 2 invocations should be processed - var completionMessage = await client.ReadAsync().OrTimeout() as CompletionMessage; + var completionMessage = await client.ReadAsync().DefaultTimeout() as CompletionMessage; Assert.NotNull(completionMessage); Assert.Equal("1", completionMessage.InvocationId); Assert.Equal("one", completionMessage.Result); - completionMessage = await client.ReadAsync().OrTimeout() as CompletionMessage; + completionMessage = await client.ReadAsync().DefaultTimeout() as CompletionMessage; Assert.NotNull(completionMessage); Assert.Equal("2", completionMessage.InvocationId); Assert.Equal("two", completionMessage.Result); // We never receive the 3rd message since it was over the maximum message size - CloseMessage closeMessage = await client.ReadAsync().OrTimeout() as CloseMessage; + CloseMessage closeMessage = await client.ReadAsync().DefaultTimeout() as CloseMessage; Assert.NotNull(closeMessage); client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } @@ -610,24 +611,24 @@ public async Task ManyHubMessagesUnderTheMessageSizeButConfiguredWithMax() await client.Connection.Application.Output.FlushAsync(); // 2 invocations should be processed - var completionMessage = await client.ReadAsync().OrTimeout() as CompletionMessage; + var completionMessage = await client.ReadAsync().DefaultTimeout() as CompletionMessage; Assert.NotNull(completionMessage); Assert.Equal("1", completionMessage.InvocationId); Assert.Equal("one", completionMessage.Result); - completionMessage = await client.ReadAsync().OrTimeout() as CompletionMessage; + completionMessage = await client.ReadAsync().DefaultTimeout() as CompletionMessage; Assert.NotNull(completionMessage); Assert.Equal("2", completionMessage.InvocationId); Assert.Equal("two", completionMessage.Result); - completionMessage = await client.ReadAsync().OrTimeout() as CompletionMessage; + completionMessage = await client.ReadAsync().DefaultTimeout() as CompletionMessage; Assert.NotNull(completionMessage); Assert.Equal("3", completionMessage.InvocationId); Assert.Equal("three", completionMessage.Result); client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -652,7 +653,7 @@ public async Task HandshakeFailureFromIncompatibleProtocolVersionSendsResponseWi client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -668,7 +669,7 @@ public async Task ConnectionClosesOnServerWithPartialHandshakeMessageAndComplete { // partial handshake var payload = Encoding.UTF8.GetBytes("{\"protocol\": \"json\",\"ver"); - await client.Connection.Application.Output.WriteAsync(payload).OrTimeout(); + await client.Connection.Application.Output.WriteAsync(payload).DefaultTimeout(); var connectionHandlerTask = await client.ConnectAsync(connectionHandler, sendHandshakeRequestMessage: false, expectedHandshakeResponseMessage: false); // Complete the pipe to 'close' the connection @@ -678,7 +679,7 @@ public async Task ConnectionClosesOnServerWithPartialHandshakeMessageAndComplete var handshakeReadTask = client.ReadAsync(true); // Check that the connection was closed on the server - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); Assert.False(handshakeReadTask.IsCompleted); client.Dispose(); @@ -712,7 +713,7 @@ await Assert.ThrowsAsync( async () => { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); }); Assert.Equal("Lifetime manager OnConnectedAsync failed.", exception.Message); @@ -751,7 +752,7 @@ bool ExpectedErrors(WriteContext writeContext) var connectionHandlerTask = await client.ConnectAsync(connectionHandler); client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); mockLifetimeManager.Verify(m => m.OnConnectedAsync(It.IsAny()), Times.Once); mockLifetimeManager.Verify(m => m.OnDisconnectedAsync(It.IsAny()), Times.Once); @@ -805,7 +806,7 @@ public async Task HubMethodCanReturnValueFromTask() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - var result = (await client.InvokeAsync(nameof(MethodHub.TaskValueMethod)).OrTimeout()).Result; + var result = (await client.InvokeAsync(nameof(MethodHub.TaskValueMethod)).DefaultTimeout()).Result; // json serializer makes this a long Assert.Equal(42L, result); @@ -813,7 +814,7 @@ public async Task HubMethodCanReturnValueFromTask() // kill the connection client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -831,7 +832,7 @@ public async Task HubMethodCanReturnValueFromValueTask() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - var result = (await client.InvokeAsync(nameof(MethodHub.ValueTaskValueMethod)).OrTimeout()).Result; + var result = (await client.InvokeAsync(nameof(MethodHub.ValueTaskValueMethod)).DefaultTimeout()).Result; // json serializer makes this a long Assert.Equal(43L, result); @@ -839,7 +840,7 @@ public async Task HubMethodCanReturnValueFromValueTask() // kill the connection client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -857,14 +858,14 @@ public async Task HubMethodCanReturnValueTask() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - var result = (await client.InvokeAsync(nameof(MethodHub.ValueTaskMethod)).OrTimeout()).Result; + var result = (await client.InvokeAsync(nameof(MethodHub.ValueTaskMethod)).DefaultTimeout()).Result; Assert.Null(result); // kill the connection client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -881,14 +882,14 @@ public async Task HubMethodsAreCaseInsensitive(Type hubType) { var connectionHandlerTask = (Task)await client.ConnectAsync(connectionHandler); - var result = (await client.InvokeAsync("echo", "hello").OrTimeout()).Result; + var result = (await client.InvokeAsync("echo", "hello").DefaultTimeout()).Result; Assert.Equal("hello", result); // kill the connection client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -927,7 +928,7 @@ bool ExpectedErrors(WriteContext writeContext) { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - var message = await client.InvokeAsync(methodName).OrTimeout(); + var message = await client.InvokeAsync(methodName).DefaultTimeout(); if (detailedErrors) { @@ -941,7 +942,7 @@ bool ExpectedErrors(WriteContext writeContext) // kill the connection client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } @@ -959,15 +960,15 @@ public async Task HubMethodListeningToConnectionAbortedClosesOnConnectionContext { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.SendInvocationAsync(nameof(MethodHub.BlockingMethod)).OrTimeout(); + await client.SendInvocationAsync(nameof(MethodHub.BlockingMethod)).DefaultTimeout(); client.Connection.Abort(); - var closeMessage = Assert.IsType(await client.ReadAsync().OrTimeout()); + var closeMessage = Assert.IsType(await client.ReadAsync().DefaultTimeout()); Assert.False(closeMessage.AllowReconnect); // If this completes then the server has completed the connection - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); // Nothing written to connection because it was closed Assert.Null(client.TryRead()); @@ -996,14 +997,14 @@ bool ExpectedErrors(WriteContext writeContext) { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - var message = await client.InvokeAsync(methodName).OrTimeout(); + var message = await client.InvokeAsync(methodName).DefaultTimeout(); Assert.Equal($"An unexpected error occurred invoking '{methodName}' on the server. HubException: This is a hub exception", message.Error); // kill the connection client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -1021,7 +1022,7 @@ public async Task HubMethodDoesNotSendResultWhenInvocationIsNonBlocking() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.SendInvocationAsync(nameof(MethodHub.ValueMethod), nonBlocking: true).OrTimeout(); + await client.SendInvocationAsync(nameof(MethodHub.ValueMethod), nonBlocking: true).DefaultTimeout(); // kill the connection client.Dispose(); @@ -1032,7 +1033,7 @@ public async Task HubMethodDoesNotSendResultWhenInvocationIsNonBlocking() // Ensure the client channel is empty Assert.Null(client.TryRead()); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -1050,14 +1051,14 @@ public async Task HubMethodCanBeVoid() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - var result = (await client.InvokeAsync(nameof(MethodHub.VoidMethod)).OrTimeout()).Result; + var result = (await client.InvokeAsync(nameof(MethodHub.VoidMethod)).DefaultTimeout()).Result; Assert.Null(result); // kill the connection client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -1075,7 +1076,7 @@ public async Task HubMethodCanBeRenamedWithAttribute() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - var result = (await client.InvokeAsync("RenamedMethod").OrTimeout()).Result; + var result = (await client.InvokeAsync("RenamedMethod").DefaultTimeout()).Result; // json serializer makes this a long Assert.Equal(43L, result); @@ -1083,7 +1084,7 @@ public async Task HubMethodCanBeRenamedWithAttribute() // kill the connection client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -1101,7 +1102,7 @@ public async Task HubMethodNameAttributeIsInherited() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - var result = (await client.InvokeAsync("RenamedVirtualMethod").OrTimeout()).Result; + var result = (await client.InvokeAsync("RenamedVirtualMethod").DefaultTimeout()).Result; // json serializer makes this a long Assert.Equal(34L, result); @@ -1109,7 +1110,7 @@ public async Task HubMethodNameAttributeIsInherited() // kill the connection client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -1137,16 +1138,16 @@ bool ExpectedErrors(WriteContext writeContext) var connectionHandlerTask = await client.ConnectAsync(connectionHandler); // This invocation should be completely synchronous - await client.SendInvocationAsync(methodName, nonBlocking: true).OrTimeout(); + await client.SendInvocationAsync(methodName, nonBlocking: true).DefaultTimeout(); // kill the connection client.Dispose(); // only thing written should be close message - var closeMessage = await client.ReadAsync().OrTimeout(); + var closeMessage = await client.ReadAsync().DefaultTimeout(); Assert.IsType(closeMessage); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -1164,14 +1165,14 @@ public async Task HubMethodWithMultiParam() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - var result = (await client.InvokeAsync(nameof(MethodHub.ConcatString), (byte)32, 42, 'm', "string").OrTimeout()).Result; + var result = (await client.InvokeAsync(nameof(MethodHub.ConcatString), (byte)32, 42, 'm', "string").DefaultTimeout()).Result; Assert.Equal("32, 42, m, string", result); // kill the connection client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -1189,14 +1190,14 @@ public async Task CanCallInheritedHubMethodFromInheritingHub() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - var result = (await client.InvokeAsync(nameof(InheritedHub.BaseMethod), "string").OrTimeout()).Result; + var result = (await client.InvokeAsync(nameof(InheritedHub.BaseMethod), "string").DefaultTimeout()).Result; Assert.Equal("string", result); // kill the connection client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -1214,14 +1215,14 @@ public async Task CanCallOverridenVirtualHubMethod() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - var result = (await client.InvokeAsync(nameof(InheritedHub.VirtualMethod), 10).OrTimeout()).Result; + var result = (await client.InvokeAsync(nameof(InheritedHub.VirtualMethod), 10).DefaultTimeout()).Result; Assert.Equal(0L, result); // kill the connection client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -1239,14 +1240,14 @@ public async Task CannotCallOverriddenBaseHubMethod() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - var result = await client.InvokeAsync(nameof(MethodHub.OnDisconnectedAsync)).OrTimeout(); + var result = await client.InvokeAsync(nameof(MethodHub.OnDisconnectedAsync)).DefaultTimeout(); Assert.Equal("Failed to invoke 'OnDisconnectedAsync' due to an error on the server. HubException: Method does not exist.", result.Error); // kill the connection client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -1283,14 +1284,14 @@ public async Task CannotCallStaticHubMethods() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - var result = await client.InvokeAsync(nameof(MethodHub.StaticMethod)).OrTimeout(); + var result = await client.InvokeAsync(nameof(MethodHub.StaticMethod)).DefaultTimeout(); Assert.Equal("Failed to invoke 'StaticMethod' due to an error on the server. HubException: Method does not exist.", result.Error); // kill the connection client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -1308,22 +1309,22 @@ public async Task CannotCallObjectMethodsOnHub() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - var result = await client.InvokeAsync(nameof(MethodHub.ToString)).OrTimeout(); + var result = await client.InvokeAsync(nameof(MethodHub.ToString)).DefaultTimeout(); Assert.Equal("Failed to invoke 'ToString' due to an error on the server. HubException: Method does not exist.", result.Error); - result = await client.InvokeAsync(nameof(MethodHub.GetHashCode)).OrTimeout(); + result = await client.InvokeAsync(nameof(MethodHub.GetHashCode)).DefaultTimeout(); Assert.Equal("Failed to invoke 'GetHashCode' due to an error on the server. HubException: Method does not exist.", result.Error); - result = await client.InvokeAsync(nameof(MethodHub.Equals)).OrTimeout(); + result = await client.InvokeAsync(nameof(MethodHub.Equals)).DefaultTimeout(); Assert.Equal("Failed to invoke 'Equals' due to an error on the server. HubException: Method does not exist.", result.Error); - result = await client.InvokeAsync(nameof(MethodHub.ReferenceEquals)).OrTimeout(); + result = await client.InvokeAsync(nameof(MethodHub.ReferenceEquals)).DefaultTimeout(); Assert.Equal("Failed to invoke 'ReferenceEquals' due to an error on the server. HubException: Method does not exist.", result.Error); // kill the connection client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -1341,14 +1342,14 @@ public async Task CannotCallDisposeMethodOnHub() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - var result = await client.InvokeAsync(nameof(MethodHub.Dispose)).OrTimeout(); + var result = await client.InvokeAsync(nameof(MethodHub.Dispose)).DefaultTimeout(); Assert.Equal("Failed to invoke 'Dispose' due to an error on the server. HubException: Method does not exist.", result.Error); // kill the connection client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -1380,13 +1381,13 @@ public async Task BroadcastHubMethodSendsToAllClients(Type hubType) var firstConnectionHandlerTask = await firstClient.ConnectAsync(connectionHandler); var secondConnectionHandlerTask = await secondClient.ConnectAsync(connectionHandler); - await Task.WhenAll(firstClient.Connected, secondClient.Connected).OrTimeout(); + await Task.WhenAll(firstClient.Connected, secondClient.Connected).DefaultTimeout(); - await firstClient.SendInvocationAsync(nameof(MethodHub.BroadcastMethod), "test").OrTimeout(); + await firstClient.SendInvocationAsync(nameof(MethodHub.BroadcastMethod), "test").DefaultTimeout(); foreach (var result in await Task.WhenAll( firstClient.ReadAsync(), - secondClient.ReadAsync()).OrTimeout()) + secondClient.ReadAsync()).DefaultTimeout()) { var invocation = Assert.IsType(result); Assert.Equal("Broadcast", invocation.Target); @@ -1398,7 +1399,7 @@ public async Task BroadcastHubMethodSendsToAllClients(Type hubType) firstClient.Dispose(); secondClient.Dispose(); - await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask).OrTimeout(); + await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask).DefaultTimeout(); } } } @@ -1418,13 +1419,13 @@ public async Task SendArraySendsArrayToAllClients() var firstConnectionHandlerTask = await firstClient.ConnectAsync(connectionHandler); var secondConnectionHandlerTask = await secondClient.ConnectAsync(connectionHandler); - await Task.WhenAll(firstClient.Connected, secondClient.Connected).OrTimeout(); + await Task.WhenAll(firstClient.Connected, secondClient.Connected).DefaultTimeout(); - await firstClient.SendInvocationAsync(nameof(MethodHub.SendArray)).OrTimeout(); + await firstClient.SendInvocationAsync(nameof(MethodHub.SendArray)).DefaultTimeout(); foreach (var result in await Task.WhenAll( firstClient.ReadAsync(), - secondClient.ReadAsync()).OrTimeout()) + secondClient.ReadAsync()).DefaultTimeout()) { var invocation = Assert.IsType(result); Assert.Equal("Array", invocation.Target); @@ -1437,7 +1438,7 @@ public async Task SendArraySendsArrayToAllClients() firstClient.Dispose(); secondClient.Dispose(); - await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask).OrTimeout(); + await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask).DefaultTimeout(); } } } @@ -1456,20 +1457,20 @@ public async Task SendToOthers(Type hubType) var firstConnectionHandlerTask = await firstClient.ConnectAsync(connectionHandler); var secondConnectionHandlerTask = await secondClient.ConnectAsync(connectionHandler); - await Task.WhenAll(firstClient.Connected, secondClient.Connected).OrTimeout(); + await Task.WhenAll(firstClient.Connected, secondClient.Connected).DefaultTimeout(); - await firstClient.SendInvocationAsync("SendToOthers", "To others").OrTimeout(); + await firstClient.SendInvocationAsync("SendToOthers", "To others").DefaultTimeout(); - var secondClientResult = await secondClient.ReadAsync().OrTimeout(); + var secondClientResult = await secondClient.ReadAsync().DefaultTimeout(); var invocation = Assert.IsType(secondClientResult); Assert.Equal("Send", invocation.Target); Assert.Equal("To others", invocation.Arguments[0]); - var firstClientResult = await firstClient.ReadAsync().OrTimeout(); + var firstClientResult = await firstClient.ReadAsync().DefaultTimeout(); var completion = Assert.IsType(firstClientResult); - await secondClient.SendInvocationAsync("BroadcastMethod", "To everyone").OrTimeout(); - firstClientResult = await firstClient.ReadAsync().OrTimeout(); + await secondClient.SendInvocationAsync("BroadcastMethod", "To everyone").DefaultTimeout(); + firstClientResult = await firstClient.ReadAsync().DefaultTimeout(); invocation = Assert.IsType(firstClientResult); Assert.Equal("Broadcast", invocation.Target); Assert.Equal("To everyone", invocation.Arguments[0]); @@ -1478,7 +1479,7 @@ public async Task SendToOthers(Type hubType) firstClient.Dispose(); secondClient.Dispose(); - await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask).OrTimeout(); + await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask).DefaultTimeout(); } } } @@ -1497,17 +1498,17 @@ public async Task SendToCaller(Type hubType) var firstConnectionHandlerTask = await firstClient.ConnectAsync(connectionHandler); var secondConnectionHandlerTask = await secondClient.ConnectAsync(connectionHandler); - await Task.WhenAll(firstClient.Connected, secondClient.Connected).OrTimeout(); + await Task.WhenAll(firstClient.Connected, secondClient.Connected).DefaultTimeout(); - await firstClient.SendInvocationAsync("SendToCaller", "To caller").OrTimeout(); + await firstClient.SendInvocationAsync("SendToCaller", "To caller").DefaultTimeout(); - var firstClientResult = await firstClient.ReadAsync().OrTimeout(); + var firstClientResult = await firstClient.ReadAsync().DefaultTimeout(); var invocation = Assert.IsType(firstClientResult); Assert.Equal("Send", invocation.Target); Assert.Equal("To caller", invocation.Arguments[0]); - await firstClient.SendInvocationAsync("BroadcastMethod", "To everyone").OrTimeout(); - var secondClientResult = await secondClient.ReadAsync().OrTimeout(); + await firstClient.SendInvocationAsync("BroadcastMethod", "To everyone").DefaultTimeout(); + var secondClientResult = await secondClient.ReadAsync().DefaultTimeout(); invocation = Assert.IsType(secondClientResult); Assert.Equal("Broadcast", invocation.Target); Assert.Equal("To everyone", invocation.Arguments[0]); @@ -1516,7 +1517,7 @@ public async Task SendToCaller(Type hubType) firstClient.Dispose(); secondClient.Dispose(); - await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask).OrTimeout(); + await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask).DefaultTimeout(); } } } @@ -1562,22 +1563,22 @@ public async Task SendToAllExcept(Type hubType) var secondConnectionHandlerTask = await secondClient.ConnectAsync(connectionHandler); var thirdConnectionHandlerTask = await thirdClient.ConnectAsync(connectionHandler); - await Task.WhenAll(firstClient.Connected, secondClient.Connected, thirdClient.Connected).OrTimeout(); + await Task.WhenAll(firstClient.Connected, secondClient.Connected, thirdClient.Connected).DefaultTimeout(); var excludeSecondClientId = new HashSet(); excludeSecondClientId.Add(secondClient.Connection.ConnectionId); var excludeThirdClientId = new HashSet(); excludeThirdClientId.Add(thirdClient.Connection.ConnectionId); - await firstClient.SendInvocationAsync("SendToAllExcept", "To second", excludeThirdClientId).OrTimeout(); - await firstClient.SendInvocationAsync("SendToAllExcept", "To third", excludeSecondClientId).OrTimeout(); + await firstClient.SendInvocationAsync("SendToAllExcept", "To second", excludeThirdClientId).DefaultTimeout(); + await firstClient.SendInvocationAsync("SendToAllExcept", "To third", excludeSecondClientId).DefaultTimeout(); - var secondClientResult = await secondClient.ReadAsync().OrTimeout(); + var secondClientResult = await secondClient.ReadAsync().DefaultTimeout(); var invocation = Assert.IsType(secondClientResult); Assert.Equal("Send", invocation.Target); Assert.Equal("To second", invocation.Arguments[0]); - var thirdClientResult = await thirdClient.ReadAsync().OrTimeout(); + var thirdClientResult = await thirdClient.ReadAsync().DefaultTimeout(); invocation = Assert.IsType(thirdClientResult); Assert.Equal("Send", invocation.Target); Assert.Equal("To third", invocation.Arguments[0]); @@ -1587,7 +1588,7 @@ public async Task SendToAllExcept(Type hubType) secondClient.Dispose(); thirdClient.Dispose(); - await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask, thirdConnectionHandlerTask).OrTimeout(); + await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask, thirdConnectionHandlerTask).DefaultTimeout(); } } } @@ -1608,25 +1609,25 @@ public async Task SendToMultipleClients(Type hubType) var secondConnectionHandlerTask = await secondClient.ConnectAsync(connectionHandler); var thirdConnectionHandlerTask = await thirdClient.ConnectAsync(connectionHandler); - await Task.WhenAll(firstClient.Connected, secondClient.Connected, thirdClient.Connected).OrTimeout(); + await Task.WhenAll(firstClient.Connected, secondClient.Connected, thirdClient.Connected).DefaultTimeout(); var secondAndThirdClients = new HashSet {secondClient.Connection.ConnectionId, thirdClient.Connection.ConnectionId }; - await firstClient.SendInvocationAsync("SendToMultipleClients", "Second and Third", secondAndThirdClients).OrTimeout(); + await firstClient.SendInvocationAsync("SendToMultipleClients", "Second and Third", secondAndThirdClients).DefaultTimeout(); - var secondClientResult = await secondClient.ReadAsync().OrTimeout(); + var secondClientResult = await secondClient.ReadAsync().DefaultTimeout(); var invocation = Assert.IsType(secondClientResult); Assert.Equal("Send", invocation.Target); Assert.Equal("Second and Third", invocation.Arguments[0]); - var thirdClientResult = await thirdClient.ReadAsync().OrTimeout(); + var thirdClientResult = await thirdClient.ReadAsync().DefaultTimeout(); invocation = Assert.IsType(thirdClientResult); Assert.Equal("Send", invocation.Target); Assert.Equal("Second and Third", invocation.Arguments[0]); // Check that first client only got the completion message - var hubMessage = await firstClient.ReadAsync().OrTimeout(); + var hubMessage = await firstClient.ReadAsync().DefaultTimeout(); Assert.IsType(hubMessage); Assert.Null(firstClient.TryRead()); @@ -1635,7 +1636,7 @@ public async Task SendToMultipleClients(Type hubType) secondClient.Dispose(); thirdClient.Dispose(); - await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask, thirdConnectionHandlerTask).OrTimeout(); + await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask, thirdConnectionHandlerTask).DefaultTimeout(); } } } @@ -1656,22 +1657,22 @@ public async Task SendToMultipleUsers(Type hubType) var secondConnectionHandlerTask = await secondClient.ConnectAsync(connectionHandler); var thirdConnectionHandlerTask = await thirdClient.ConnectAsync(connectionHandler); - await Task.WhenAll(firstClient.Connected, secondClient.Connected, thirdClient.Connected).OrTimeout(); + await Task.WhenAll(firstClient.Connected, secondClient.Connected, thirdClient.Connected).DefaultTimeout(); - await firstClient.SendInvocationAsync(nameof(MethodHub.SendToMultipleUsers), new[] { "userB", "userC" }, "Second and Third").OrTimeout(); + await firstClient.SendInvocationAsync(nameof(MethodHub.SendToMultipleUsers), new[] { "userB", "userC" }, "Second and Third").DefaultTimeout(); - var secondClientResult = await secondClient.ReadAsync().OrTimeout(); + var secondClientResult = await secondClient.ReadAsync().DefaultTimeout(); var invocation = Assert.IsType(secondClientResult); Assert.Equal("Send", invocation.Target); Assert.Equal("Second and Third", invocation.Arguments[0]); - var thirdClientResult = await thirdClient.ReadAsync().OrTimeout(); + var thirdClientResult = await thirdClient.ReadAsync().DefaultTimeout(); invocation = Assert.IsType(thirdClientResult); Assert.Equal("Send", invocation.Target); Assert.Equal("Second and Third", invocation.Arguments[0]); // Check that first client only got the completion message - var hubMessage = await firstClient.ReadAsync().OrTimeout(); + var hubMessage = await firstClient.ReadAsync().DefaultTimeout(); Assert.IsType(hubMessage); Assert.Null(firstClient.TryRead()); @@ -1680,7 +1681,7 @@ public async Task SendToMultipleUsers(Type hubType) secondClient.Dispose(); thirdClient.Dispose(); - await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask, thirdConnectionHandlerTask).OrTimeout(); + await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask, thirdConnectionHandlerTask).DefaultTimeout(); } } } @@ -1699,9 +1700,9 @@ public async Task HubsCanAddAndSendToGroup(Type hubType) var firstConnectionHandlerTask = await firstClient.ConnectAsync(connectionHandler); var secondConnectionHandlerTask = await secondClient.ConnectAsync(connectionHandler); - await Task.WhenAll(firstClient.Connected, secondClient.Connected).OrTimeout(); + await Task.WhenAll(firstClient.Connected, secondClient.Connected).DefaultTimeout(); - var result = (await firstClient.InvokeAsync("GroupSendMethod", "testGroup", "test").OrTimeout()).Result; + var result = (await firstClient.InvokeAsync("GroupSendMethod", "testGroup", "test").DefaultTimeout()).Result; // check that 'firstConnection' hasn't received the group send Assert.Null(firstClient.TryRead()); @@ -1709,12 +1710,12 @@ public async Task HubsCanAddAndSendToGroup(Type hubType) // check that 'secondConnection' hasn't received the group send Assert.Null(secondClient.TryRead()); - result = (await secondClient.InvokeAsync(nameof(MethodHub.GroupAddMethod), "testGroup").OrTimeout()).Result; + result = (await secondClient.InvokeAsync(nameof(MethodHub.GroupAddMethod), "testGroup").DefaultTimeout()).Result; - await firstClient.SendInvocationAsync(nameof(MethodHub.GroupSendMethod), "testGroup", "test").OrTimeout(); + await firstClient.SendInvocationAsync(nameof(MethodHub.GroupSendMethod), "testGroup", "test").DefaultTimeout(); // check that 'secondConnection' has received the group send - var hubMessage = await secondClient.ReadAsync().OrTimeout(); + var hubMessage = await secondClient.ReadAsync().DefaultTimeout(); var invocation = Assert.IsType(hubMessage); Assert.Equal("Send", invocation.Target); Assert.Single(invocation.Arguments); @@ -1724,7 +1725,7 @@ public async Task HubsCanAddAndSendToGroup(Type hubType) firstClient.Dispose(); secondClient.Dispose(); - await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask).OrTimeout(); + await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask).DefaultTimeout(); } } } @@ -1743,9 +1744,9 @@ public async Task SendToGroupExcept(Type hubType) var firstConnectionHandlerTask = await firstClient.ConnectAsync(connectionHandler); var secondConnectionHandlerTask = await secondClient.ConnectAsync(connectionHandler); - await Task.WhenAll(firstClient.Connected, secondClient.Connected).OrTimeout(); + await Task.WhenAll(firstClient.Connected, secondClient.Connected).DefaultTimeout(); - var result = (await firstClient.InvokeAsync("GroupSendMethod", "testGroup", "test").OrTimeout()).Result; + var result = (await firstClient.InvokeAsync("GroupSendMethod", "testGroup", "test").DefaultTimeout()).Result; // check that 'firstConnection' hasn't received the group send Assert.Null(firstClient.TryRead()); @@ -1753,22 +1754,22 @@ public async Task SendToGroupExcept(Type hubType) // check that 'secondConnection' hasn't received the group send Assert.Null(secondClient.TryRead()); - await firstClient.InvokeAsync(nameof(MethodHub.GroupAddMethod), "testGroup").OrTimeout(); - await secondClient.InvokeAsync(nameof(MethodHub.GroupAddMethod), "testGroup").OrTimeout(); + await firstClient.InvokeAsync(nameof(MethodHub.GroupAddMethod), "testGroup").DefaultTimeout(); + await secondClient.InvokeAsync(nameof(MethodHub.GroupAddMethod), "testGroup").DefaultTimeout(); var excludedConnectionIds = new List { firstClient.Connection.ConnectionId }; - await firstClient.SendInvocationAsync("GroupExceptSendMethod", "testGroup", "test", excludedConnectionIds).OrTimeout(); + await firstClient.SendInvocationAsync("GroupExceptSendMethod", "testGroup", "test", excludedConnectionIds).DefaultTimeout(); // check that 'secondConnection' has received the group send - var hubMessage = await secondClient.ReadAsync().OrTimeout(); + var hubMessage = await secondClient.ReadAsync().DefaultTimeout(); var invocation = Assert.IsType(hubMessage); Assert.Equal("Send", invocation.Target); Assert.Single(invocation.Arguments); Assert.Equal("test", invocation.Arguments[0]); // Check that first client only got the completion message - hubMessage = await firstClient.ReadAsync().OrTimeout(); + hubMessage = await firstClient.ReadAsync().DefaultTimeout(); Assert.IsType(hubMessage); Assert.Null(firstClient.TryRead()); @@ -1777,7 +1778,7 @@ public async Task SendToGroupExcept(Type hubType) firstClient.Dispose(); secondClient.Dispose(); - await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask).OrTimeout(); + await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask).DefaultTimeout(); } } } @@ -1796,9 +1797,9 @@ public async Task SendToOthersInGroup(Type hubType) var firstConnectionHandlerTask = await firstClient.ConnectAsync(connectionHandler); var secondConnectionHandlerTask = await secondClient.ConnectAsync(connectionHandler); - await Task.WhenAll(firstClient.Connected, secondClient.Connected).OrTimeout(); + await Task.WhenAll(firstClient.Connected, secondClient.Connected).DefaultTimeout(); - var result = (await firstClient.InvokeAsync("GroupSendMethod", "testGroup", "test").OrTimeout()).Result; + var result = (await firstClient.InvokeAsync("GroupSendMethod", "testGroup", "test").DefaultTimeout()).Result; // check that 'firstConnection' hasn't received the group send Assert.Null(firstClient.TryRead()); @@ -1806,20 +1807,20 @@ public async Task SendToOthersInGroup(Type hubType) // check that 'secondConnection' hasn't received the group send Assert.Null(secondClient.TryRead()); - await firstClient.InvokeAsync(nameof(MethodHub.GroupAddMethod), "testGroup").OrTimeout(); - await secondClient.InvokeAsync(nameof(MethodHub.GroupAddMethod), "testGroup").OrTimeout(); + await firstClient.InvokeAsync(nameof(MethodHub.GroupAddMethod), "testGroup").DefaultTimeout(); + await secondClient.InvokeAsync(nameof(MethodHub.GroupAddMethod), "testGroup").DefaultTimeout(); - await firstClient.SendInvocationAsync("SendToOthersInGroup", "testGroup", "test").OrTimeout(); + await firstClient.SendInvocationAsync("SendToOthersInGroup", "testGroup", "test").DefaultTimeout(); // check that 'secondConnection' has received the group send - var hubMessage = await secondClient.ReadAsync().OrTimeout(); + var hubMessage = await secondClient.ReadAsync().DefaultTimeout(); var invocation = Assert.IsType(hubMessage); Assert.Equal("Send", invocation.Target); Assert.Single(invocation.Arguments); Assert.Equal("test", invocation.Arguments[0]); // Check that first client only got the completion message - hubMessage = await firstClient.ReadAsync().OrTimeout(); + hubMessage = await firstClient.ReadAsync().DefaultTimeout(); Assert.IsType(hubMessage); Assert.Null(firstClient.TryRead()); @@ -1828,7 +1829,7 @@ public async Task SendToOthersInGroup(Type hubType) firstClient.Dispose(); secondClient.Dispose(); - await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask).OrTimeout(); + await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask).DefaultTimeout(); } } } @@ -1847,21 +1848,21 @@ public async Task InvokeMultipleGroups(Type hubType) var firstConnectionHandlerTask = await firstClient.ConnectAsync(connectionHandler); var secondConnectionHandlerTask = await secondClient.ConnectAsync(connectionHandler); - await Task.WhenAll(firstClient.Connected, secondClient.Connected).OrTimeout(); + await Task.WhenAll(firstClient.Connected, secondClient.Connected).DefaultTimeout(); - await secondClient.InvokeAsync(nameof(MethodHub.GroupAddMethod), "GroupA").OrTimeout(); - await firstClient.InvokeAsync(nameof(MethodHub.GroupAddMethod), "GroupB").OrTimeout(); ; + await secondClient.InvokeAsync(nameof(MethodHub.GroupAddMethod), "GroupA").DefaultTimeout(); + await firstClient.InvokeAsync(nameof(MethodHub.GroupAddMethod), "GroupB").DefaultTimeout(); ; var groupNames = new List { "GroupA", "GroupB" }; - await firstClient.SendInvocationAsync(nameof(MethodHub.SendToMultipleGroups), "test", groupNames).OrTimeout(); + await firstClient.SendInvocationAsync(nameof(MethodHub.SendToMultipleGroups), "test", groupNames).DefaultTimeout(); - var hubMessage = await secondClient.ReadAsync().OrTimeout(); + var hubMessage = await secondClient.ReadAsync().DefaultTimeout(); var invocation = Assert.IsType(hubMessage); Assert.Equal("Send", invocation.Target); Assert.Single(invocation.Arguments); Assert.Equal("test", invocation.Arguments[0]); - hubMessage = await firstClient.ReadAsync().OrTimeout(); + hubMessage = await firstClient.ReadAsync().DefaultTimeout(); invocation = Assert.IsType(hubMessage); Assert.Equal("Send", invocation.Target); Assert.Single(invocation.Arguments); @@ -1871,7 +1872,7 @@ public async Task InvokeMultipleGroups(Type hubType) firstClient.Dispose(); secondClient.Dispose(); - await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask).OrTimeout(); + await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask).DefaultTimeout(); } } } @@ -1889,12 +1890,12 @@ public async Task RemoveFromGroupWhenNotInGroupDoesNotFail() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.SendInvocationAsync(nameof(MethodHub.GroupRemoveMethod), "testGroup").OrTimeout(); + await client.SendInvocationAsync(nameof(MethodHub.GroupRemoveMethod), "testGroup").DefaultTimeout(); // kill the connection client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -1913,12 +1914,12 @@ public async Task HubsCanSendToUser(Type hubType) var firstConnectionHandlerTask = await firstClient.ConnectAsync(connectionHandler); var secondConnectionHandlerTask = await secondClient.ConnectAsync(connectionHandler); - await Task.WhenAll(firstClient.Connected, secondClient.Connected).OrTimeout(); + await Task.WhenAll(firstClient.Connected, secondClient.Connected).DefaultTimeout(); - await firstClient.SendInvocationAsync("ClientSendMethod", "userB", "test").OrTimeout(); + await firstClient.SendInvocationAsync("ClientSendMethod", "userB", "test").DefaultTimeout(); // check that 'secondConnection' has received the group send - var hubMessage = await secondClient.ReadAsync().OrTimeout(); + var hubMessage = await secondClient.ReadAsync().DefaultTimeout(); var invocation = Assert.IsType(hubMessage); Assert.Equal("Send", invocation.Target); Assert.Single(invocation.Arguments); @@ -1928,7 +1929,7 @@ public async Task HubsCanSendToUser(Type hubType) firstClient.Dispose(); secondClient.Dispose(); - await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask).OrTimeout(); + await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask).DefaultTimeout(); } } } @@ -1947,12 +1948,12 @@ public async Task HubsCanSendToConnection(Type hubType) var firstConnectionHandlerTask = await firstClient.ConnectAsync(connectionHandler); var secondConnectionHandlerTask = await secondClient.ConnectAsync(connectionHandler); - await Task.WhenAll(firstClient.Connected, secondClient.Connected).OrTimeout(); + await Task.WhenAll(firstClient.Connected, secondClient.Connected).DefaultTimeout(); - await firstClient.SendInvocationAsync("ConnectionSendMethod", secondClient.Connection.ConnectionId, "test").OrTimeout(); + await firstClient.SendInvocationAsync("ConnectionSendMethod", secondClient.Connection.ConnectionId, "test").DefaultTimeout(); // check that 'secondConnection' has received the group send - var hubMessage = await secondClient.ReadAsync().OrTimeout(); + var hubMessage = await secondClient.ReadAsync().DefaultTimeout(); var invocation = Assert.IsType(hubMessage); Assert.Equal("Send", invocation.Target); Assert.Single(invocation.Arguments); @@ -1962,7 +1963,7 @@ public async Task HubsCanSendToConnection(Type hubType) firstClient.Dispose(); secondClient.Dispose(); - await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask).OrTimeout(); + await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask).DefaultTimeout(); } } } @@ -1980,12 +1981,12 @@ public async Task DelayedSendTest() var firstConnectionHandlerTask = await firstClient.ConnectAsync(connectionHandler); var secondConnectionHandlerTask = await secondClient.ConnectAsync(connectionHandler); - await Task.WhenAll(firstClient.Connected, secondClient.Connected).OrTimeout(); + await Task.WhenAll(firstClient.Connected, secondClient.Connected).DefaultTimeout(); - await firstClient.SendInvocationAsync("DelayedSend", secondClient.Connection.ConnectionId, "test").OrTimeout(); + await firstClient.SendInvocationAsync("DelayedSend", secondClient.Connection.ConnectionId, "test").DefaultTimeout(); // check that 'secondConnection' has received the group send - var hubMessage = await secondClient.ReadAsync().OrTimeout(); + var hubMessage = await secondClient.ReadAsync().DefaultTimeout(); var invocation = Assert.IsType(hubMessage); Assert.Equal("Send", invocation.Target); Assert.Single(invocation.Arguments); @@ -1995,7 +1996,7 @@ public async Task DelayedSendTest() firstClient.Dispose(); secondClient.Dispose(); - await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask).OrTimeout(); + await Task.WhenAll(firstConnectionHandlerTask, secondConnectionHandlerTask).DefaultTimeout(); } } } @@ -2020,9 +2021,9 @@ public async Task HubsCanStreamResponses(string method, string protocolName) var connectionHandlerTask = await client.ConnectAsync(connectionHandler); // Wait for a connection, or for the endpoint to fail. - await client.Connected.OrThrowIfOtherFails(connectionHandlerTask).OrTimeout(); + await client.Connected.OrThrowIfOtherFails(connectionHandlerTask).DefaultTimeout(); - var messages = await client.StreamAsync(method, 4).OrTimeout(); + var messages = await client.StreamAsync(method, 4).DefaultTimeout(); Assert.Equal(5, messages.Count); HubConnectionHandlerTestUtils.AssertHubMessage(new StreamItemMessage(string.Empty, "0"), messages[0]); @@ -2033,7 +2034,7 @@ public async Task HubsCanStreamResponses(string method, string protocolName) client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -2050,21 +2051,21 @@ public async Task NonErrorCompletionSentWhenStreamCanceledFromClient() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); var invocationId = Guid.NewGuid().ToString("N"); await client.SendHubMessageAsync(new StreamInvocationMessage(invocationId, nameof(StreamingHub.BlockingStream), Array.Empty())); // cancel the Streaming method - await client.SendHubMessageAsync(new CancelInvocationMessage(invocationId)).OrTimeout(); + await client.SendHubMessageAsync(new CancelInvocationMessage(invocationId)).DefaultTimeout(); - var hubMessage = Assert.IsType(await client.ReadAsync().OrTimeout()); + var hubMessage = Assert.IsType(await client.ReadAsync().DefaultTimeout()); Assert.Equal(invocationId, hubMessage.InvocationId); Assert.Null(hubMessage.Error); client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -2087,7 +2088,7 @@ public async Task ReceiveCorrectErrorFromStreamThrowing(bool detailedErrors) { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); var messages = await client.StreamAsync(nameof(StreamingHub.ExceptionStream)); @@ -2105,7 +2106,7 @@ public async Task ReceiveCorrectErrorFromStreamThrowing(bool detailedErrors) client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -2124,14 +2125,14 @@ public async Task CanSendToConnectionsWithDifferentProtocols() var firstConnectionHandlerTask = await client1.ConnectAsync(connectionHandler); var secondConnectionHandlerTask = await client2.ConnectAsync(connectionHandler); - await client1.Connected.OrTimeout(); - await client2.Connected.OrTimeout(); + await client1.Connected.DefaultTimeout(); + await client2.Connected.DefaultTimeout(); var sentMessage = "From Json"; await client1.SendInvocationAsync(nameof(MethodHub.BroadcastMethod), sentMessage); - var message1 = await client1.ReadAsync().OrTimeout(); - var message2 = await client2.ReadAsync().OrTimeout(); + var message1 = await client1.ReadAsync().DefaultTimeout(); + var message2 = await client2.ReadAsync().DefaultTimeout(); var completion1 = message1 as InvocationMessage; Assert.NotNull(completion1); @@ -2144,8 +2145,8 @@ public async Task CanSendToConnectionsWithDifferentProtocols() client1.Dispose(); client2.Dispose(); - await firstConnectionHandlerTask.OrTimeout(); - await secondConnectionHandlerTask.OrTimeout(); + await firstConnectionHandlerTask.DefaultTimeout(); + await secondConnectionHandlerTask.DefaultTimeout(); } } } @@ -2198,15 +2199,15 @@ public async Task UnauthorizedConnectionCannotInvokeHubMethodWithAuthorization() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); - var message = await client.InvokeAsync(nameof(MethodHub.AuthMethod)).OrTimeout(); + var message = await client.InvokeAsync(nameof(MethodHub.AuthMethod)).DefaultTimeout(); Assert.NotNull(message.Error); client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -2235,15 +2236,15 @@ public async Task AuthorizedConnectionCanInvokeHubMethodWithAuthorization() client.Connection.User.AddIdentity(new ClaimsIdentity(new[] { new Claim(ClaimTypes.NameIdentifier, "name") })); var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); - var message = await client.InvokeAsync(nameof(MethodHub.AuthMethod)).OrTimeout(); + var message = await client.InvokeAsync(nameof(MethodHub.AuthMethod)).DefaultTimeout(); Assert.Null(message.Error); client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -2301,15 +2302,15 @@ public async Task HubMethodWithAuthorizationProvidesResourceToAuthHandlers() var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); - var message = await client.InvokeAsync(nameof(MethodHub.MultiParamAuthMethod), "Hello", "World!").OrTimeout(); + var message = await client.InvokeAsync(nameof(MethodHub.MultiParamAuthMethod), "Hello", "World!").DefaultTimeout(); Assert.Null(message.Error); client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -2338,11 +2339,11 @@ public async Task HubOptionsCanUseCustomJsonSerializerSettings() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); - await client.SendInvocationAsync(nameof(MethodHub.BroadcastItem)).OrTimeout(); + await client.SendInvocationAsync(nameof(MethodHub.BroadcastItem)).DefaultTimeout(); - var message = (InvocationMessage)await client.ReadAsync().OrTimeout(); + var message = (InvocationMessage)await client.ReadAsync().DefaultTimeout(); var customItem = message.Arguments[0].ToString(); // by default properties serialized by JsonHubProtocol are using camelCasing @@ -2351,7 +2352,7 @@ public async Task HubOptionsCanUseCustomJsonSerializerSettings() client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -2368,11 +2369,11 @@ public async Task JsonHubProtocolUsesCamelCasingByDefault() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); - await client.SendInvocationAsync(nameof(MethodHub.BroadcastItem)).OrTimeout(); + await client.SendInvocationAsync(nameof(MethodHub.BroadcastItem)).DefaultTimeout(); - var message = (InvocationMessage)await client.ReadAsync().OrTimeout(); + var message = (InvocationMessage)await client.ReadAsync().DefaultTimeout(); var customItem = message.Arguments[0].ToString(); // originally Message, paramName @@ -2381,7 +2382,7 @@ public async Task JsonHubProtocolUsesCamelCasingByDefault() client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -2408,11 +2409,11 @@ public async Task HubOptionsCanUseCustomMessagePackSettings() client.SupportedFormats = TransferFormat.Binary; var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); - await client.SendInvocationAsync(nameof(MethodHub.BroadcastItem)).OrTimeout(); + await client.SendInvocationAsync(nameof(MethodHub.BroadcastItem)).DefaultTimeout(); - var message = Assert.IsType(await client.ReadAsync().OrTimeout()); + var message = Assert.IsType(await client.ReadAsync().DefaultTimeout()); var result = message.Arguments[0] as Dictionary; Assert.Equal("formattedString", result["Message"]); @@ -2420,7 +2421,7 @@ public async Task HubOptionsCanUseCustomMessagePackSettings() client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -2444,7 +2445,7 @@ public async Task HubOptionsCanNotHaveNullSupportedProtocols() using (var client = new TestClient(protocol: new MessagePackHubProtocol(msgPackOptions))) { client.SupportedFormats = TransferFormat.Binary; - await Assert.ThrowsAsync(async () => await await client.ConnectAsync(connectionHandler, expectedHandshakeResponseMessage: false)).OrTimeout(); + await Assert.ThrowsAsync(async () => await await client.ConnectAsync(connectionHandler, expectedHandshakeResponseMessage: false)).DefaultTimeout(); } } } @@ -2468,7 +2469,7 @@ public async Task HubOptionsCanNotHaveEmptySupportedProtocols() using (var client = new TestClient(protocol: new MessagePackHubProtocol(msgPackOptions))) { client.SupportedFormats = TransferFormat.Binary; - await Assert.ThrowsAsync(async () => await await client.ConnectAsync(connectionHandler, expectedHandshakeResponseMessage: false)).OrTimeout(); + await Assert.ThrowsAsync(async () => await await client.ConnectAsync(connectionHandler, expectedHandshakeResponseMessage: false)).DefaultTimeout(); } } } @@ -2503,12 +2504,12 @@ public async Task ConnectionUserIdIsAssignedByUserIdProvider() var connectionHandlerTask1 = await client1.ConnectAsync(connectionHandler); var connectionHandlerTask2 = await client2.ConnectAsync(connectionHandler); - await client1.Connected.OrTimeout(); - await client2.Connected.OrTimeout(); + await client1.Connected.DefaultTimeout(); + await client2.Connected.DefaultTimeout(); - await client2.SendInvocationAsync(nameof(MethodHub.SendToMultipleUsers), new[] { "client1" }, "Hi!").OrTimeout(); + await client2.SendInvocationAsync(nameof(MethodHub.SendToMultipleUsers), new[] { "client1" }, "Hi!").DefaultTimeout(); - var message = (InvocationMessage)await client1.ReadAsync().OrTimeout(); + var message = (InvocationMessage)await client1.ReadAsync().DefaultTimeout(); Assert.Equal("Send", message.Target); Assert.Collection(message.Arguments, arg => Assert.Equal("Hi!", arg)); @@ -2516,8 +2517,8 @@ public async Task ConnectionUserIdIsAssignedByUserIdProvider() client1.Dispose(); client2.Dispose(); - await connectionHandlerTask1.OrTimeout(); - await connectionHandlerTask2.OrTimeout(); + await connectionHandlerTask1.DefaultTimeout(); + await connectionHandlerTask2.DefaultTimeout(); // Read the completion, then we should have nothing left in client2's queue Assert.IsType(client2.TryRead()); @@ -2572,14 +2573,14 @@ public async Task CanGetHttpContextFromHubConnectionContext() client.Connection.Features.Set(feature); var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); - var result = (await client.InvokeAsync(nameof(MethodHub.HasHttpContext)).OrTimeout()).Result; + var result = (await client.InvokeAsync(nameof(MethodHub.HasHttpContext)).DefaultTimeout()).Result; Assert.True((bool)result); client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -2597,14 +2598,14 @@ public async Task GetHttpContextFromHubConnectionContextHandlesNull() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); - var result = (await client.InvokeAsync(nameof(MethodHub.HasHttpContext)).OrTimeout()).Result; + var result = (await client.InvokeAsync(nameof(MethodHub.HasHttpContext)).DefaultTimeout()).Result; Assert.False((bool)result); client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -2620,18 +2621,18 @@ public async Task AcceptsPingMessages() using (var client = new TestClient(new NewtonsoftJsonHubProtocol())) { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); // Send a ping - await client.SendHubMessageAsync(PingMessage.Instance).OrTimeout(); + await client.SendHubMessageAsync(PingMessage.Instance).DefaultTimeout(); // Now do an invocation to make sure we processed the ping message - var completion = await client.InvokeAsync(nameof(MethodHub.ValueMethod)).OrTimeout(); + var completion = await client.InvokeAsync(nameof(MethodHub.ValueMethod)).DefaultTimeout(); Assert.NotNull(completion); client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -2650,20 +2651,20 @@ public async Task DoesNotWritePingMessagesIfSufficientOtherMessagesAreSent() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); // Echo a bunch of stuff, waiting 10ms between each, until 500ms have elapsed var start = DateTime.UtcNow; while ((DateTime.UtcNow - start).TotalMilliseconds <= 500.0) { - await client.SendInvocationAsync("Echo", "foo").OrTimeout(); + await client.SendInvocationAsync("Echo", "foo").DefaultTimeout(); await Task.Delay(10); } // Shut down client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); client.Connection.Transport.Output.Complete(); @@ -2696,7 +2697,7 @@ public async Task WritesPingMessageIfNothingWrittenWhenKeepAliveIntervalElapses( using (var client = new TestClient(new NewtonsoftJsonHubProtocol())) { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); // Trigger multiple keep alives var heartbeatCount = 5; @@ -2709,7 +2710,7 @@ public async Task WritesPingMessageIfNothingWrittenWhenKeepAliveIntervalElapses( // Shut down client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); client.Connection.Transport.Output.Complete(); @@ -2717,7 +2718,7 @@ public async Task WritesPingMessageIfNothingWrittenWhenKeepAliveIntervalElapses( HubMessage message; var pingCounter = 0; var hasCloseMessage = false; - while ((message = await client.ReadAsync().OrTimeout()) != null) + while ((message = await client.ReadAsync().DefaultTimeout()) != null) { if (hasCloseMessage) { @@ -2758,7 +2759,7 @@ public async Task ConnectionNotTimedOutIfClientNeverPings() using (var client = new TestClient(new NewtonsoftJsonHubProtocol())) { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); // This is a fake client -- it doesn't auto-ping to signal // We go over the 100 ms timeout interval multiple times @@ -2769,8 +2770,8 @@ public async Task ConnectionNotTimedOutIfClientNeverPings() } // Invoke a Hub method and wait for the result to reliably test if the connection is still active - var id = await client.SendInvocationAsync(nameof(MethodHub.ValueMethod)).OrTimeout(); - var result = await client.ReadAsync().OrTimeout(); + var id = await client.SendInvocationAsync(nameof(MethodHub.ValueMethod)).DefaultTimeout(); + var result = await client.ReadAsync().DefaultTimeout(); // but client should still be open, since it never pinged to activate the timeout checking Assert.False(connectionHandlerTask.IsCompleted); @@ -2794,13 +2795,13 @@ public async Task ConnectionTimesOutIfInitialPingAndThenNoMessages() using (var client = new TestClient(new NewtonsoftJsonHubProtocol())) { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); await client.SendHubMessageAsync(PingMessage.Instance); clock.UtcNow = clock.UtcNow.AddMilliseconds(timeout + 1); client.TickHeartbeat(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -2821,7 +2822,7 @@ public async Task ReceivingMessagesPreventsConnectionTimeoutFromOccuring() using (var client = new TestClient(new NewtonsoftJsonHubProtocol())) { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); await client.SendHubMessageAsync(PingMessage.Instance); for (int i = 0; i < 10; i++) @@ -2832,8 +2833,8 @@ public async Task ReceivingMessagesPreventsConnectionTimeoutFromOccuring() } // Invoke a Hub method and wait for the result to reliably test if the connection is still active - var id = await client.SendInvocationAsync(nameof(MethodHub.ValueMethod)).OrTimeout(); - var result = await client.ReadAsync().OrTimeout(); + var id = await client.SendInvocationAsync(nameof(MethodHub.ValueMethod)).DefaultTimeout(); + var result = await client.ReadAsync().DefaultTimeout(); Assert.IsType(result); @@ -2942,7 +2943,7 @@ public async Task HubMethodInvokeDoesNotCountTowardsClientTimeout() // Call long running hub method var hubMethodTask = client.InvokeAsync(nameof(LongRunningHub.LongRunningMethod)); - await tcsService.StartedMethod.Task.OrTimeout(); + await tcsService.StartedMethod.Task.DefaultTimeout(); // Tick heartbeat while hub method is running to show that close isn't triggered client.TickHeartbeat(); @@ -2950,18 +2951,18 @@ public async Task HubMethodInvokeDoesNotCountTowardsClientTimeout() // Unblock long running hub method tcsService.EndMethod.SetResult(null); - await hubMethodTask.OrTimeout(); + await hubMethodTask.DefaultTimeout(); // There is a small window when the hub method finishes and the timer starts again // So we need to delay a little before ticking the heart beat. // We do this by waiting until we know the HubConnectionHandler code is in pipe.ReadAsync() - await customDuplex.WrappedPipeReader.WaitForReadStart().OrTimeout(); + await customDuplex.WrappedPipeReader.WaitForReadStart().DefaultTimeout(); // Tick heartbeat again now that we're outside of the hub method client.TickHeartbeat(); // Connection is closed - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -2991,13 +2992,13 @@ public async Task HubMethodInvokeCountsTowardsClientTimeoutIfParallelNotMaxed() // Call long running hub method var hubMethodTask = client.InvokeAsync(nameof(LongRunningHub.LongRunningMethod)); - await tcsService.StartedMethod.Task.OrTimeout(); + await tcsService.StartedMethod.Task.DefaultTimeout(); // Tick heartbeat while hub method is running client.TickHeartbeat(); // Connection is closed - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -3014,16 +3015,16 @@ public async Task EndingConnectionSendsCloseMessageWithNoError() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); // Shut down client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); client.Connection.Transport.Output.Complete(); - var message = await client.ReadAsync().OrTimeout(); + var message = await client.ReadAsync().DefaultTimeout(); var closeMessage = Assert.IsType(message); Assert.Null(closeMessage.Error); @@ -3057,7 +3058,7 @@ bool ExpectedErrors(WriteContext writeContext) { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - var message = await client.ReadAsync().OrTimeout(); + var message = await client.ReadAsync().DefaultTimeout(); var closeMessage = Assert.IsType(message); if (detailedErrors) @@ -3069,7 +3070,7 @@ bool ExpectedErrors(WriteContext writeContext) Assert.Equal("Connection closed with an error.", closeMessage.Error); } - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -3090,18 +3091,18 @@ public async Task StreamingInvocationsDoNotBlockOtherInvocations() using (var client = new TestClient(new NewtonsoftJsonHubProtocol())) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); // Blocking streaming invocation to test that other invocations can still run - await client.SendHubMessageAsync(new StreamInvocationMessage("1", nameof(StreamingHub.BlockingStream), Array.Empty())).OrTimeout(); + await client.SendHubMessageAsync(new StreamInvocationMessage("1", nameof(StreamingHub.BlockingStream), Array.Empty())).DefaultTimeout(); - var completion = await client.InvokeAsync(nameof(StreamingHub.NonStream)).OrTimeout(); + var completion = await client.InvokeAsync(nameof(StreamingHub.NonStream)).DefaultTimeout(); Assert.Equal(42L, completion.Result); // Shut down client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -3127,7 +3128,7 @@ bool ExpectedErrors(WriteContext writeContext) { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); var messages = await client.StreamAsync(nameof(StreamingHub.ThrowStream)); @@ -3142,7 +3143,7 @@ bool ExpectedErrors(WriteContext writeContext) client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -3162,7 +3163,7 @@ public async Task StreamMethodThatReturnsNullWillCleanup() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); var messages = await client.StreamAsync(nameof(StreamingHub.NullStream)); @@ -3177,7 +3178,7 @@ public async Task StreamMethodThatReturnsNullWillCleanup() client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -3197,13 +3198,13 @@ public async Task StreamMethodWithDuplicateIdFails() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); - await client.SendHubMessageAsync(new StreamInvocationMessage("123", nameof(StreamingHub.BlockingStream), Array.Empty())).OrTimeout(); + await client.SendHubMessageAsync(new StreamInvocationMessage("123", nameof(StreamingHub.BlockingStream), Array.Empty())).DefaultTimeout(); - await client.SendHubMessageAsync(new StreamInvocationMessage("123", nameof(StreamingHub.BlockingStream), Array.Empty())).OrTimeout(); + await client.SendHubMessageAsync(new StreamInvocationMessage("123", nameof(StreamingHub.BlockingStream), Array.Empty())).DefaultTimeout(); - var completion = Assert.IsType(await client.ReadAsync().OrTimeout()); + var completion = Assert.IsType(await client.ReadAsync().DefaultTimeout()); Assert.Equal("Invocation ID '123' is already in use.", completion.Error); var hubActivator = serviceProvider.GetService>() as CustomHubActivator; @@ -3213,7 +3214,7 @@ public async Task StreamMethodWithDuplicateIdFails() client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -3238,15 +3239,15 @@ public async Task InvocationsRunInOrderWithNoParallelism() // Because we use PipeScheduler.Inline the hub invocations will run inline until they wait, which happens inside the LongRunningMethod call using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); // Long running hub invocation to test that other invocations will not run until it is completed - await client.SendInvocationAsync(nameof(LongRunningHub.LongRunningMethod), nonBlocking: false).OrTimeout(); + await client.SendInvocationAsync(nameof(LongRunningHub.LongRunningMethod), nonBlocking: false).DefaultTimeout(); // Wait for the long running method to start - await tcsService.StartedMethod.Task.OrTimeout(); + await tcsService.StartedMethod.Task.DefaultTimeout(); // Invoke another hub method which will wait for the first method to finish - await client.SendInvocationAsync(nameof(LongRunningHub.SimpleMethod), nonBlocking: false).OrTimeout(); + await client.SendInvocationAsync(nameof(LongRunningHub.SimpleMethod), nonBlocking: false).DefaultTimeout(); // Both invocations should be waiting now Assert.Null(client.TryRead()); @@ -3254,13 +3255,13 @@ public async Task InvocationsRunInOrderWithNoParallelism() tcsService.EndMethod.TrySetResult(null); // Long running hub method result - var firstResult = await client.ReadAsync().OrTimeout(); + var firstResult = await client.ReadAsync().DefaultTimeout(); var longRunningCompletion = Assert.IsType(firstResult); Assert.Equal(12L, longRunningCompletion.Result); // simple hub method result - var secondResult = await client.ReadAsync().OrTimeout(); + var secondResult = await client.ReadAsync().DefaultTimeout(); var simpleCompletion = Assert.IsType(secondResult); Assert.Equal(21L, simpleCompletion.Result); @@ -3268,7 +3269,7 @@ public async Task InvocationsRunInOrderWithNoParallelism() // Shut down client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -3293,20 +3294,20 @@ public async Task InvocationsCanRunOutOfOrderWithParallelism() // Because we use PipeScheduler.Inline the hub invocations will run inline until they wait, which happens inside the LongRunningMethod call using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); // Long running hub invocation to test that other invocations will not run until it is completed - await client.SendInvocationAsync(nameof(LongRunningHub.LongRunningMethod), nonBlocking: false).OrTimeout(); + await client.SendInvocationAsync(nameof(LongRunningHub.LongRunningMethod), nonBlocking: false).DefaultTimeout(); // Wait for the long running method to start - await tcsService.StartedMethod.Task.OrTimeout(); + await tcsService.StartedMethod.Task.DefaultTimeout(); for (var i = 0; i < 5; i++) { // Invoke another hub method which will wait for the first method to finish - await client.SendInvocationAsync(nameof(LongRunningHub.SimpleMethod), nonBlocking: false).OrTimeout(); + await client.SendInvocationAsync(nameof(LongRunningHub.SimpleMethod), nonBlocking: false).DefaultTimeout(); // simple hub method result - var secondResult = await client.ReadAsync().OrTimeout(); + var secondResult = await client.ReadAsync().DefaultTimeout(); var simpleCompletion = Assert.IsType(secondResult); Assert.Equal(21L, simpleCompletion.Result); @@ -3316,7 +3317,7 @@ public async Task InvocationsCanRunOutOfOrderWithParallelism() tcsService.EndMethod.TrySetResult(null); // Long running hub method result - var firstResult = await client.ReadAsync().OrTimeout(); + var firstResult = await client.ReadAsync().DefaultTimeout(); var longRunningCompletion = Assert.IsType(firstResult); Assert.Equal(12L, longRunningCompletion.Result); @@ -3324,7 +3325,7 @@ public async Task InvocationsCanRunOutOfOrderWithParallelism() // Shut down client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -3349,23 +3350,23 @@ public async Task PendingInvocationUnblockedWhenBlockingMethodCompletesWithParal // Because we use PipeScheduler.Inline the hub invocations will run inline until they wait, which happens inside the LongRunningMethod call using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); // Long running hub invocation to test that other invocations will not run until it is completed - await client.SendInvocationAsync(nameof(LongRunningHub.LongRunningMethod), nonBlocking: false).OrTimeout(); + await client.SendInvocationAsync(nameof(LongRunningHub.LongRunningMethod), nonBlocking: false).DefaultTimeout(); // Wait for the long running method to start - await tcsService.StartedMethod.Task.OrTimeout(); + await tcsService.StartedMethod.Task.DefaultTimeout(); // Grab the tcs before resetting to use in the second long running method var endTcs = tcsService.EndMethod; tcsService.Reset(); // Long running hub invocation to test that other invocations will not run until it is completed - await client.SendInvocationAsync(nameof(LongRunningHub.LongRunningMethod), nonBlocking: false).OrTimeout(); + await client.SendInvocationAsync(nameof(LongRunningHub.LongRunningMethod), nonBlocking: false).DefaultTimeout(); // Wait for the long running method to start - await tcsService.StartedMethod.Task.OrTimeout(); + await tcsService.StartedMethod.Task.DefaultTimeout(); // Invoke another hub method which will wait for the first method to finish - await client.SendInvocationAsync(nameof(LongRunningHub.SimpleMethod), nonBlocking: false).OrTimeout(); + await client.SendInvocationAsync(nameof(LongRunningHub.SimpleMethod), nonBlocking: false).DefaultTimeout(); // Both invocations should be waiting now Assert.Null(client.TryRead()); @@ -3373,13 +3374,13 @@ public async Task PendingInvocationUnblockedWhenBlockingMethodCompletesWithParal tcsService.EndMethod.TrySetResult(null); // Long running hub method result - var firstResult = await client.ReadAsync().OrTimeout(); + var firstResult = await client.ReadAsync().DefaultTimeout(); var longRunningCompletion = Assert.IsType(firstResult); Assert.Equal(12L, longRunningCompletion.Result); // simple hub method result - var secondResult = await client.ReadAsync().OrTimeout(); + var secondResult = await client.ReadAsync().DefaultTimeout(); var simpleCompletion = Assert.IsType(secondResult); Assert.Equal(21L, simpleCompletion.Result); @@ -3387,14 +3388,14 @@ public async Task PendingInvocationUnblockedWhenBlockingMethodCompletesWithParal // Release the first long running hub method endTcs.TrySetResult(null); - firstResult = await client.ReadAsync().OrTimeout(); + firstResult = await client.ReadAsync().DefaultTimeout(); longRunningCompletion = Assert.IsType(firstResult); Assert.Equal(12L, longRunningCompletion.Result); // Shut down client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -3420,15 +3421,15 @@ public async Task StreamInvocationsDoNotBlockOtherInvocations() // Because we use PipeScheduler.Inline the hub invocations will run inline until they go async using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); // Long running stream invocation to test that other invocations can still run before it is completed - var streamInvocationId = await client.SendStreamInvocationAsync(nameof(LongRunningHub.LongRunningStream), null).OrTimeout(); + var streamInvocationId = await client.SendStreamInvocationAsync(nameof(LongRunningHub.LongRunningStream), null).DefaultTimeout(); // Wait for the long running method to start - await tcsService.StartedMethod.Task.OrTimeout(); + await tcsService.StartedMethod.Task.DefaultTimeout(); // Invoke another hub method which will be able to run even though a streaming method is still running - var completion = await client.InvokeAsync(nameof(LongRunningHub.SimpleMethod)).OrTimeout(); + var completion = await client.InvokeAsync(nameof(LongRunningHub.SimpleMethod)).DefaultTimeout(); Assert.Null(completion.Error); Assert.Equal(21L, completion.Result); @@ -3437,16 +3438,16 @@ public async Task StreamInvocationsDoNotBlockOtherInvocations() var hubActivator = serviceProvider.GetService>() as CustomHubActivator; - await client.SendHubMessageAsync(new CancelInvocationMessage(streamInvocationId)).OrTimeout(); + await client.SendHubMessageAsync(new CancelInvocationMessage(streamInvocationId)).DefaultTimeout(); // Completion message for canceled Stream - completion = Assert.IsType(await client.ReadAsync().OrTimeout()); + completion = Assert.IsType(await client.ReadAsync().DefaultTimeout()); Assert.Equal(streamInvocationId, completion.InvocationId); // Shut down client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); // OnConnectedAsync, SimpleMethod, LongRunningStream, OnDisconnectedAsync Assert.Equal(4, hubActivator.ReleaseCount); @@ -3467,24 +3468,24 @@ public async Task ServerSendsCloseWithErrorWhenConnectionClosedWithPartialMessag using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); - await client.Connection.Application.Output.WriteAsync(Encoding.UTF8.GetBytes(new[] { '{' })).OrTimeout(); + await client.Connection.Application.Output.WriteAsync(Encoding.UTF8.GetBytes(new[] { '{' })).DefaultTimeout(); // Close connection client.Connection.Application.Output.Complete(); // Ignore message from OnConnectedAsync - await client.ReadAsync().OrTimeout(); + await client.ReadAsync().DefaultTimeout(); - var closeMessage = Assert.IsType(await client.ReadAsync().OrTimeout()); + var closeMessage = Assert.IsType(await client.ReadAsync().DefaultTimeout()); Assert.Equal("Connection closed with an error. InvalidDataException: Connection terminated while reading a message.", closeMessage.Error); // Shut down client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -3504,18 +3505,18 @@ public async Task StreamUploadBufferCapacityBlocksOtherInvocations() using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); - await client.BeginUploadStreamAsync("invocationId", nameof(MethodHub.StreamDontRead), new[] { "id" }, Array.Empty()).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); + await client.BeginUploadStreamAsync("invocationId", nameof(MethodHub.StreamDontRead), new[] { "id" }, Array.Empty()).DefaultTimeout(); foreach (var letter in new[] { "A", "B", "C", "D", "E" }) { - await client.SendHubMessageAsync(new StreamItemMessage("id", letter)).OrTimeout(); + await client.SendHubMessageAsync(new StreamItemMessage("id", letter)).DefaultTimeout(); } var ex = await Assert.ThrowsAsync(async () => { await client.SendInvocationAsync("Echo", "test"); - var result = (CompletionMessage)await client.ReadAsync().OrTimeout(5000); + var result = (CompletionMessage)await client.ReadAsync().DefaultTimeout(5000); }); } } @@ -3528,16 +3529,16 @@ public async Task UploadStringsToConcat() using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); await client.BeginUploadStreamAsync("invocation", nameof(MethodHub.StreamingConcat), new[] { "id" }, Array.Empty()); foreach (var letter in new[] { "B", "E", "A", "N", "E", "D" }) { - await client.SendHubMessageAsync(new StreamItemMessage("id", letter)).OrTimeout(); + await client.SendHubMessageAsync(new StreamItemMessage("id", letter)).DefaultTimeout(); } - await client.SendHubMessageAsync(CompletionMessage.Empty("id")).OrTimeout(); - var result = (CompletionMessage)await client.ReadAsync().OrTimeout(); + await client.SendHubMessageAsync(CompletionMessage.Empty("id")).DefaultTimeout(); + var result = (CompletionMessage)await client.ReadAsync().DefaultTimeout(); Assert.Equal("BEANED", result.Result); } @@ -3551,17 +3552,17 @@ public async Task UploadStreamedObjects() using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); await client.BeginUploadStreamAsync("invocation", nameof(MethodHub.UploadArray), new[] { "id" }, Array.Empty()); var objects = new[] { new SampleObject("solo", 322), new SampleObject("ggez", 3145) }; foreach (var thing in objects) { - await client.SendHubMessageAsync(new StreamItemMessage("id", thing)).OrTimeout(); + await client.SendHubMessageAsync(new StreamItemMessage("id", thing)).DefaultTimeout(); } - await client.SendHubMessageAsync(CompletionMessage.Empty("id")).OrTimeout(); - var response = (CompletionMessage)await client.ReadAsync().OrTimeout(); + await client.SendHubMessageAsync(CompletionMessage.Empty("id")).DefaultTimeout(); + var response = (CompletionMessage)await client.ReadAsync().DefaultTimeout(); var result = ((JArray)response.Result).ToArray(); Assert.Equal(objects[0].Foo, ((JContainer)result[0])["foo"]); @@ -3579,7 +3580,7 @@ public async Task UploadManyStreams() using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); var ids = new[] { "0", "1", "2" }; foreach (string id in ids) @@ -3593,14 +3594,14 @@ public async Task UploadManyStreams() foreach (var spot in order) { - await client.SendHubMessageAsync(new StreamItemMessage(spot.ToString(CultureInfo.InvariantCulture), words[spot][pos[spot]])).OrTimeout(); + await client.SendHubMessageAsync(new StreamItemMessage(spot.ToString(CultureInfo.InvariantCulture), words[spot][pos[spot]])).DefaultTimeout(); pos[spot] += 1; } foreach (string id in new[] { "0", "2", "1" }) { - await client.SendHubMessageAsync(CompletionMessage.Empty(id)).OrTimeout(); - var response = await client.ReadAsync().OrTimeout(); + await client.SendHubMessageAsync(CompletionMessage.Empty(id)).DefaultTimeout(); + var response = await client.ReadAsync().DefaultTimeout(); Debug.Write(response); Assert.Equal(words[int.Parse(id, CultureInfo.InvariantCulture)], ((CompletionMessage)response).Result); } @@ -3643,20 +3644,20 @@ public async Task UploadStreamStreamItemsSentAsSoonAsPossible() using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); await client.BeginUploadStreamAsync("invocation", nameof(MethodHub.UploadArrayAuth), new[] { "id" }, Array.Empty()); - await tcsService.StartedMethod.Task.OrTimeout(); + await tcsService.StartedMethod.Task.DefaultTimeout(); var objects = new[] { new SampleObject("solo", 322), new SampleObject("ggez", 3145) }; foreach (var thing in objects) { - await client.SendHubMessageAsync(new StreamItemMessage("id", thing)).OrTimeout(); + await client.SendHubMessageAsync(new StreamItemMessage("id", thing)).DefaultTimeout(); } tcsService.EndMethod.SetResult(null); - await client.SendHubMessageAsync(CompletionMessage.Empty("id")).OrTimeout(); - var response = (CompletionMessage)await client.ReadAsync().OrTimeout(); + await client.SendHubMessageAsync(CompletionMessage.Empty("id")).DefaultTimeout(); + var response = (CompletionMessage)await client.ReadAsync().DefaultTimeout(); var result = ((JArray)response.Result).ToArray(); Assert.Equal(objects[0].Foo, ((JContainer)result[0])["foo"]); @@ -3679,18 +3680,18 @@ public async Task UploadStreamDoesNotCountTowardsMaxInvocationLimit() using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); await client.BeginUploadStreamAsync("invocation", nameof(LongRunningHub.Upload), new[] { "id" }, Array.Empty()); - await tcsService.StartedMethod.Task.OrTimeout(); + await tcsService.StartedMethod.Task.DefaultTimeout(); - var completion = await client.InvokeAsync(nameof(LongRunningHub.SimpleMethod)).OrTimeout(); + var completion = await client.InvokeAsync(nameof(LongRunningHub.SimpleMethod)).DefaultTimeout(); Assert.Null(completion.Error); Assert.Equal(21L, completion.Result); - await client.SendHubMessageAsync(CompletionMessage.Empty("id")).OrTimeout(); + await client.SendHubMessageAsync(CompletionMessage.Empty("id")).DefaultTimeout(); - await tcsService.EndMethod.Task.OrTimeout(); - var response = (CompletionMessage)await client.ReadAsync().OrTimeout(); + await tcsService.EndMethod.Task.DefaultTimeout(); + var response = (CompletionMessage)await client.ReadAsync().DefaultTimeout(); Assert.Null(response.Result); Assert.Null(response.Error); } @@ -3709,10 +3710,10 @@ public async Task ConnectionAbortedIfSendFailsWithProtocolError() using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); - await client.SendInvocationAsync(nameof(MethodHub.ProtocolError)).OrTimeout(); - await connectionHandlerTask.OrTimeout(); + await client.SendInvocationAsync(nameof(MethodHub.ProtocolError)).DefaultTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -3731,9 +3732,9 @@ public async Task SerializationExceptionsSendSelfArePassedToOnDisconnectedAsync( var connectionHandlerTask = await client.ConnectAsync(connectionHandler); // Test HubConnectionContext.WriteCore(HubMessage) codepath - await client.SendInvocationAsync(nameof(ConnectionLifetimeHub.ProtocolErrorSelf)).OrTimeout(); + await client.SendInvocationAsync(nameof(ConnectionLifetimeHub.ProtocolErrorSelf)).DefaultTimeout(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); Assert.IsType(state.DisconnectedException); } @@ -3754,9 +3755,9 @@ public async Task SerializationExceptionsSendAllArePassedToOnDisconnectedAsync() var connectionHandlerTask = await client.ConnectAsync(connectionHandler); // Test HubConnectionContext.WriteCore(SerializedHubMessage) codepath - await client.SendInvocationAsync(nameof(ConnectionLifetimeHub.ProtocolErrorAll)).OrTimeout(); + await client.SendInvocationAsync(nameof(ConnectionLifetimeHub.ProtocolErrorAll)).DefaultTimeout(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); Assert.IsType(state.DisconnectedException); } @@ -3775,15 +3776,15 @@ public async Task UploadStreamItemInvalidTypeAutoCasts() using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); - await client.BeginUploadStreamAsync("invocation", nameof(MethodHub.StreamingConcat), streamIds: new[] { "id" }, Array.Empty()).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); + await client.BeginUploadStreamAsync("invocation", nameof(MethodHub.StreamingConcat), streamIds: new[] { "id" }, Array.Empty()).DefaultTimeout(); // send integers that are then cast to strings - await client.SendHubMessageAsync(new StreamItemMessage("id", 5)).OrTimeout(); - await client.SendHubMessageAsync(new StreamItemMessage("id", 10)).OrTimeout(); + await client.SendHubMessageAsync(new StreamItemMessage("id", 5)).DefaultTimeout(); + await client.SendHubMessageAsync(new StreamItemMessage("id", 10)).DefaultTimeout(); - await client.SendHubMessageAsync(CompletionMessage.Empty("id")).OrTimeout(); - var response = (CompletionMessage)await client.ReadAsync().OrTimeout(); + await client.SendHubMessageAsync(CompletionMessage.Empty("id")).DefaultTimeout(); + var response = (CompletionMessage)await client.ReadAsync().DefaultTimeout(); Assert.Null(response.Error); Assert.Equal("510", response.Result); @@ -3806,12 +3807,12 @@ public async Task ServerReportsProtocolMinorVersion() using (var client = new TestClient(protocol: testProtocol.Object)) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); Assert.NotNull(client.HandshakeResponseMessage); client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -3826,13 +3827,13 @@ public async Task UploadStreamItemInvalidType() using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); - await client.BeginUploadStreamAsync("invocationId", nameof(MethodHub.TestTypeCastingErrors), new[] { "channelId" }, Array.Empty()).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); + await client.BeginUploadStreamAsync("invocationId", nameof(MethodHub.TestTypeCastingErrors), new[] { "channelId" }, Array.Empty()).DefaultTimeout(); // client is running wild, sending strings not ints. // this error should be propogated to the user's HubMethod code - await client.SendHubMessageAsync(new StreamItemMessage("channelId", "not a number")).OrTimeout(); - var response = await client.ReadAsync().OrTimeout(); + await client.SendHubMessageAsync(new StreamItemMessage("channelId", "not a number")).DefaultTimeout(); + var response = await client.ReadAsync().DefaultTimeout(); Assert.Equal(typeof(CompletionMessage), response.GetType()); Assert.Equal("error identified and caught", (string)((CompletionMessage)response).Result); @@ -3853,8 +3854,8 @@ public async Task UploadStreamItemInvalidId() using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); - await client.SendHubMessageAsync(new StreamItemMessage("fake_id", "not a number")).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); + await client.SendHubMessageAsync(new StreamItemMessage("fake_id", "not a number")).DefaultTimeout(); var message = client.TryRead(); Assert.Null(message); @@ -3878,8 +3879,8 @@ public async Task UploadStreamCompleteInvalidId() using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); - await client.SendHubMessageAsync(CompletionMessage.Empty("fake_id")).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); + await client.SendHubMessageAsync(CompletionMessage.Empty("fake_id")).DefaultTimeout(); var message = client.TryRead(); Assert.Null(message); @@ -3902,11 +3903,11 @@ public async Task UploadStreamCompleteWithError() using (var client = new TestClient()) { - await client.ConnectAsync(connectionHandler).OrTimeout(); - await client.BeginUploadStreamAsync("invocation", nameof(MethodHub.TestCustomErrorPassing), streamIds: new[] { "id" }, args: Array.Empty()).OrTimeout(); - await client.SendHubMessageAsync(CompletionMessage.WithError("id", CustomErrorMessage)).OrTimeout(); + await client.ConnectAsync(connectionHandler).DefaultTimeout(); + await client.BeginUploadStreamAsync("invocation", nameof(MethodHub.TestCustomErrorPassing), streamIds: new[] { "id" }, args: Array.Empty()).DefaultTimeout(); + await client.SendHubMessageAsync(CompletionMessage.WithError("id", CustomErrorMessage)).DefaultTimeout(); - var response = (CompletionMessage)await client.ReadAsync().OrTimeout(); + var response = (CompletionMessage)await client.ReadAsync().DefaultTimeout(); Assert.True((bool)response.Result); } } @@ -3922,10 +3923,10 @@ public async Task UploadStreamWithTooManyStreamsFails() using (var client = new TestClient()) { - await client.ConnectAsync(connectionHandler).OrTimeout(); - await client.BeginUploadStreamAsync("invocation", nameof(MethodHub.StreamingConcat), streamIds: new[] { "id", "id2" }, args: Array.Empty()).OrTimeout(); + await client.ConnectAsync(connectionHandler).DefaultTimeout(); + await client.BeginUploadStreamAsync("invocation", nameof(MethodHub.StreamingConcat), streamIds: new[] { "id", "id2" }, args: Array.Empty()).DefaultTimeout(); - var response = (CompletionMessage)await client.ReadAsync().OrTimeout(); + var response = (CompletionMessage)await client.ReadAsync().DefaultTimeout(); Assert.Equal("An unexpected error occurred invoking 'StreamingConcat' on the server. HubException: Client sent 2 stream(s), Hub method expects 1.", response.Error); } } @@ -3941,10 +3942,10 @@ public async Task UploadStreamWithTooFewStreamsFails() using (var client = new TestClient()) { - await client.ConnectAsync(connectionHandler).OrTimeout(); - await client.BeginUploadStreamAsync("invocation", nameof(MethodHub.StreamingConcat), streamIds: Array.Empty(), args: Array.Empty()).OrTimeout(); + await client.ConnectAsync(connectionHandler).DefaultTimeout(); + await client.BeginUploadStreamAsync("invocation", nameof(MethodHub.StreamingConcat), streamIds: Array.Empty(), args: Array.Empty()).DefaultTimeout(); - var response = (CompletionMessage)await client.ReadAsync().OrTimeout(); + var response = (CompletionMessage)await client.ReadAsync().DefaultTimeout(); Assert.Equal("An unexpected error occurred invoking 'StreamingConcat' on the server. HubException: Client sent 0 stream(s), Hub method expects 1.", response.Error); } } @@ -3963,14 +3964,14 @@ public async Task UploadStreamReleasesHubActivatorOnceComplete() using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); - await client.BeginUploadStreamAsync("invocation", nameof(MethodHub.StreamingConcat), streamIds: new[] { "id" }, args: Array.Empty()).OrTimeout(); + await client.BeginUploadStreamAsync("invocation", nameof(MethodHub.StreamingConcat), streamIds: new[] { "id" }, args: Array.Empty()).DefaultTimeout(); - await client.SendHubMessageAsync(new StreamItemMessage("id", "hello")).OrTimeout(); - await client.SendHubMessageAsync(new StreamItemMessage("id", " world")).OrTimeout(); - await client.SendHubMessageAsync(CompletionMessage.Empty("id")).OrTimeout(); - var result = await client.ReadAsync().OrTimeout(); + await client.SendHubMessageAsync(new StreamItemMessage("id", "hello")).DefaultTimeout(); + await client.SendHubMessageAsync(new StreamItemMessage("id", " world")).DefaultTimeout(); + await client.SendHubMessageAsync(CompletionMessage.Empty("id")).DefaultTimeout(); + var result = await client.ReadAsync().DefaultTimeout(); var simpleCompletion = Assert.IsType(result); Assert.Equal("hello world", simpleCompletion.Result); @@ -3983,7 +3984,7 @@ public async Task UploadStreamReleasesHubActivatorOnceComplete() // Shut down client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -4001,21 +4002,21 @@ public async Task UploadStreamFromSendReleasesHubActivatorOnceComplete() using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); var hubActivator = serviceProvider.GetService>() as CustomHubActivator; var createTask = hubActivator.CreateTask.Task; // null ID means we're doing a Send and not an Invoke - await client.BeginUploadStreamAsync(invocationId: null, nameof(MethodHub.StreamingConcat), streamIds: new[] { "id" }, args: Array.Empty()).OrTimeout(); - await client.SendHubMessageAsync(new StreamItemMessage("id", "hello")).OrTimeout(); - await client.SendHubMessageAsync(new StreamItemMessage("id", " world")).OrTimeout(); + await client.BeginUploadStreamAsync(invocationId: null, nameof(MethodHub.StreamingConcat), streamIds: new[] { "id" }, args: Array.Empty()).DefaultTimeout(); + await client.SendHubMessageAsync(new StreamItemMessage("id", "hello")).DefaultTimeout(); + await client.SendHubMessageAsync(new StreamItemMessage("id", " world")).DefaultTimeout(); - await createTask.OrTimeout(); + await createTask.DefaultTimeout(); var tcs = hubActivator.ReleaseTask; - await client.SendHubMessageAsync(CompletionMessage.Empty("id")).OrTimeout(); + await client.SendHubMessageAsync(CompletionMessage.Empty("id")).DefaultTimeout(); - await tcs.Task.OrTimeout(); + await tcs.Task.DefaultTimeout(); // OnConnectedAsync and StreamingConcat hubs have been disposed Assert.Equal(2, hubActivator.ReleaseCount); @@ -4023,7 +4024,7 @@ public async Task UploadStreamFromSendReleasesHubActivatorOnceComplete() // Shut down client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -4038,26 +4039,26 @@ public async Task UploadStreamClosesStreamsOnServerWhenMethodCompletes() using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); - await client.BeginUploadStreamAsync("invocation", nameof(MethodHub.UploadIgnoreItems), streamIds: new[] { "id" }, args: Array.Empty()).OrTimeout(); + await client.BeginUploadStreamAsync("invocation", nameof(MethodHub.UploadIgnoreItems), streamIds: new[] { "id" }, args: Array.Empty()).DefaultTimeout(); - await client.SendHubMessageAsync(new StreamItemMessage("id", "ignored")).OrTimeout(); - var result = await client.ReadAsync().OrTimeout(); + await client.SendHubMessageAsync(new StreamItemMessage("id", "ignored")).DefaultTimeout(); + var result = await client.ReadAsync().DefaultTimeout(); var simpleCompletion = Assert.IsType(result); Assert.Null(simpleCompletion.Result); // This will log a warning on the server as the hub method has completed and will complete all associated streams - await client.SendHubMessageAsync(new StreamItemMessage("id", "error!")).OrTimeout(); + await client.SendHubMessageAsync(new StreamItemMessage("id", "error!")).DefaultTimeout(); // Check that the connection hasn't been closed - await client.SendInvocationAsync("VoidMethod").OrTimeout(); + await client.SendInvocationAsync("VoidMethod").DefaultTimeout(); // Shut down client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } @@ -4075,26 +4076,26 @@ public async Task UploadStreamAndStreamingMethodClosesStreamsOnServerWhenMethodC using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); - await client.SendStreamInvocationAsync(nameof(MethodHub.StreamAndUploadIgnoreItems), streamIds: new[] { "id" }, args: Array.Empty()).OrTimeout(); + await client.SendStreamInvocationAsync(nameof(MethodHub.StreamAndUploadIgnoreItems), streamIds: new[] { "id" }, args: Array.Empty()).DefaultTimeout(); - await client.SendHubMessageAsync(new StreamItemMessage("id", "ignored")).OrTimeout(); - var result = await client.ReadAsync().OrTimeout(); + await client.SendHubMessageAsync(new StreamItemMessage("id", "ignored")).DefaultTimeout(); + var result = await client.ReadAsync().DefaultTimeout(); var simpleCompletion = Assert.IsType(result); Assert.Null(simpleCompletion.Result); // This will log a warning on the server as the hub method has completed and will complete all associated streams - await client.SendHubMessageAsync(new StreamItemMessage("id", "error!")).OrTimeout(); + await client.SendHubMessageAsync(new StreamItemMessage("id", "error!")).DefaultTimeout(); // Check that the connection hasn't been closed - await client.SendInvocationAsync("VoidMethod").OrTimeout(); + await client.SendInvocationAsync("VoidMethod").DefaultTimeout(); // Shut down client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } @@ -4121,27 +4122,27 @@ public async Task StreamHubMethodCanBeTriggeredOnCancellation(string methodName, using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); - var streamInvocationId = await client.SendStreamInvocationAsync(methodName, args).OrTimeout(); + var streamInvocationId = await client.SendStreamInvocationAsync(methodName, args).DefaultTimeout(); // Wait for the stream method to start - await tcsService.StartedMethod.Task.OrTimeout(); + await tcsService.StartedMethod.Task.DefaultTimeout(); // Cancel the stream which should trigger the CancellationToken in the hub method - await client.SendHubMessageAsync(new CancelInvocationMessage(streamInvocationId)).OrTimeout(); + await client.SendHubMessageAsync(new CancelInvocationMessage(streamInvocationId)).DefaultTimeout(); - var result = await client.ReadAsync().OrTimeout(); + var result = await client.ReadAsync().DefaultTimeout(); var simpleCompletion = Assert.IsType(result); Assert.Null(simpleCompletion.Result); // CancellationToken passed to hub method will allow EndMethod to be triggered if it is canceled. - await tcsService.EndMethod.Task.OrTimeout(); + await tcsService.EndMethod.Task.DefaultTimeout(); // Shut down client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -4160,19 +4161,19 @@ public async Task StreamHubMethodCanAcceptCancellationTokenAsArgumentAndBeTrigge using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); - var streamInvocationId = await client.SendStreamInvocationAsync(nameof(LongRunningHub.CancelableStreamSingleParameter)).OrTimeout(); + var streamInvocationId = await client.SendStreamInvocationAsync(nameof(LongRunningHub.CancelableStreamSingleParameter)).DefaultTimeout(); // Wait for the stream method to start - await tcsService.StartedMethod.Task.OrTimeout(); + await tcsService.StartedMethod.Task.DefaultTimeout(); // Shut down the client which should trigger the CancellationToken in the hub method client.Dispose(); // CancellationToken passed to hub method will allow EndMethod to be triggered if it is canceled. - await tcsService.EndMethod.Task.OrTimeout(); + await tcsService.EndMethod.Task.DefaultTimeout(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -4191,14 +4192,14 @@ public async Task StreamHubMethodCanAcceptNullableParameter() using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); - var streamInvocationId = await client.SendStreamInvocationAsync(nameof(LongRunningHub.StreamNullableParameter), 5, null).OrTimeout(); + var streamInvocationId = await client.SendStreamInvocationAsync(nameof(LongRunningHub.StreamNullableParameter), 5, null).DefaultTimeout(); // Wait for the stream method to start - var firstArgument = await tcsService.StartedMethod.Task.OrTimeout(); + var firstArgument = await tcsService.StartedMethod.Task.DefaultTimeout(); Assert.Equal(5, firstArgument); - var secondArgument = await tcsService.EndMethod.Task.OrTimeout(); + var secondArgument = await tcsService.EndMethod.Task.DefaultTimeout(); Assert.Null(secondArgument); } } @@ -4219,17 +4220,17 @@ public async Task StreamHubMethodCanAcceptNullableParameterWithCancellationToken using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); - var streamInvocationId = await client.SendStreamInvocationAsync(nameof(LongRunningHub.CancelableStreamNullableParameter), 5, null).OrTimeout(); + var streamInvocationId = await client.SendStreamInvocationAsync(nameof(LongRunningHub.CancelableStreamNullableParameter), 5, null).DefaultTimeout(); // Wait for the stream method to start - var firstArgument = await tcsService.StartedMethod.Task.OrTimeout(); + var firstArgument = await tcsService.StartedMethod.Task.DefaultTimeout(); Assert.Equal(5, firstArgument); // Cancel the stream which should trigger the CancellationToken in the hub method - await client.SendHubMessageAsync(new CancelInvocationMessage(streamInvocationId)).OrTimeout(); + await client.SendHubMessageAsync(new CancelInvocationMessage(streamInvocationId)).DefaultTimeout(); - var secondArgument = await tcsService.EndMethod.Task.OrTimeout(); + var secondArgument = await tcsService.EndMethod.Task.DefaultTimeout(); Assert.Null(secondArgument); } } @@ -4245,17 +4246,17 @@ public async Task InvokeHubMethodCannotAcceptCancellationTokenAsArgument() using (var client = new TestClient()) { - var connectionHandlerTask = await client.ConnectAsync(connectionHandler).OrTimeout(); + var connectionHandlerTask = await client.ConnectAsync(connectionHandler).DefaultTimeout(); - var invocationId = await client.SendInvocationAsync(nameof(MethodHub.InvalidArgument)).OrTimeout(); + var invocationId = await client.SendInvocationAsync(nameof(MethodHub.InvalidArgument)).DefaultTimeout(); - var completion = Assert.IsType(await client.ReadAsync().OrTimeout()); + var completion = Assert.IsType(await client.ReadAsync().DefaultTimeout()); Assert.Equal("Failed to invoke 'InvalidArgument' due to an error on the server.", completion.Error); client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -4275,10 +4276,10 @@ public async Task CanPassStreamingParameterToStreamHubMethod() Task connectionHandlerTask = await client.ConnectAsync(connectionHandler); // Wait for a connection, or for the endpoint to fail. - await client.Connected.OrThrowIfOtherFails(connectionHandlerTask).OrTimeout(); + await client.Connected.OrThrowIfOtherFails(connectionHandlerTask).DefaultTimeout(); var streamId = "sample_id"; - var messagePromise = client.StreamAsync(nameof(StreamingHub.StreamEcho), new[] { streamId }, Array.Empty()).OrTimeout(); + var messagePromise = client.StreamAsync(nameof(StreamingHub.StreamEcho), new[] { streamId }, Array.Empty()).DefaultTimeout(); var phrases = new[] { "asdf", "qwer", "zxcv" }; foreach (var phrase in phrases) @@ -4298,7 +4299,7 @@ public async Task CanPassStreamingParameterToStreamHubMethod() client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -4345,9 +4346,9 @@ public async Task CanPassDerivedParameterToStreamHubMethod(string method) var connectionHandlerTask = await client.ConnectAsync(connectionHandler); // Wait for a connection, or for the endpoint to fail. - await client.Connected.OrThrowIfOtherFails(connectionHandlerTask).OrTimeout(); + await client.Connected.OrThrowIfOtherFails(connectionHandlerTask).DefaultTimeout(); - var messages = await client.StreamAsync(method, argument).OrTimeout(); + var messages = await client.StreamAsync(method, argument).DefaultTimeout(); Assert.Equal(2, messages.Count); HubConnectionHandlerTestUtils.AssertHubMessage(new StreamItemMessage(string.Empty, argument.Value), messages[0]); @@ -4355,7 +4356,7 @@ public async Task CanPassDerivedParameterToStreamHubMethod(string method) client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -4377,11 +4378,11 @@ public async Task ClientsCallerPropertyCanBeUsedOutsideOfHub() var connectionHandlerTask = await client.ConnectAsync(connectionHandler); // Wait for a connection, or for the endpoint to fail. - await client.Connected.OrThrowIfOtherFails(connectionHandlerTask).OrTimeout(); + await client.Connected.OrThrowIfOtherFails(connectionHandlerTask).DefaultTimeout(); - await callerService.Caller.SendAsync("Echo", "message").OrTimeout(); + await callerService.Caller.SendAsync("Echo", "message").DefaultTimeout(); - var message = Assert.IsType(await client.ReadAsync().OrTimeout()); + var message = Assert.IsType(await client.ReadAsync().DefaultTimeout()); Assert.Equal("Echo", message.Target); Assert.Equal("message", message.Arguments[0]); @@ -4402,20 +4403,20 @@ public async Task ConnectionCloseCleansUploadStreams() var connectionHandlerTask = await client.ConnectAsync(connectionHandler); // Wait for a connection, or for the endpoint to fail. - await client.Connected.OrThrowIfOtherFails(connectionHandlerTask).OrTimeout(); + await client.Connected.OrThrowIfOtherFails(connectionHandlerTask).DefaultTimeout(); - await client.BeginUploadStreamAsync("invocation", nameof(MethodHub.UploadDoesWorkOnComplete), streamIds: new[] { "id" }, args: Array.Empty()).OrTimeout(); + await client.BeginUploadStreamAsync("invocation", nameof(MethodHub.UploadDoesWorkOnComplete), streamIds: new[] { "id" }, args: Array.Empty()).DefaultTimeout(); - await client.SendHubMessageAsync(new StreamItemMessage("id", "hello")).OrTimeout(); + await client.SendHubMessageAsync(new StreamItemMessage("id", "hello")).DefaultTimeout(); - await client.DisposeAsync().OrTimeout(); + await client.DisposeAsync().DefaultTimeout(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); // This task completes if the upload stream is completed, via closing the connection var task = (Task)client.Connection.Items[nameof(MethodHub.UploadDoesWorkOnComplete)]; - var exception = await Assert.ThrowsAsync(() => task).OrTimeout(); + var exception = await Assert.ThrowsAsync(() => task).DefaultTimeout(); Assert.Equal("The underlying connection was closed.", exception.Message); } } @@ -4444,11 +4445,11 @@ public async Task SpecificHubOptionForMaximumReceiveMessageSizeIsUsedOverGlobalH var connectionHandlerTask = await client.ConnectAsync(connectionHandler); // Wait for a connection, or for the endpoint to fail. - await client.Connected.OrThrowIfOtherFails(connectionHandlerTask).OrTimeout(); + await client.Connected.OrThrowIfOtherFails(connectionHandlerTask).DefaultTimeout(); - await client.DisposeAsync().OrTimeout(); + await client.DisposeAsync().DefaultTimeout(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } diff --git a/src/SignalR/server/SignalR/test/HubFilterTests.cs b/src/SignalR/server/SignalR/test/HubFilterTests.cs index 5675029eee33..d5c03fba4781 100644 --- a/src/SignalR/server/SignalR/test/HubFilterTests.cs +++ b/src/SignalR/server/SignalR/test/HubFilterTests.cs @@ -4,6 +4,7 @@ using System; using System.Threading.Tasks; using Microsoft.AspNetCore.Internal; +using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging.Testing; using Xunit; @@ -116,22 +117,22 @@ private async Task AssertMethodsCalled(IServiceProvider serviceProvider, TcsServ { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await tcsService.StartedMethod.Task.OrTimeout(); - await client.Connected.OrTimeout(); - await tcsService.EndMethod.Task.OrTimeout(); + await tcsService.StartedMethod.Task.DefaultTimeout(); + await client.Connected.DefaultTimeout(); + await tcsService.EndMethod.Task.DefaultTimeout(); tcsService.Reset(); - var message = await client.InvokeAsync(nameof(MethodHub.Echo), "Hello world!").OrTimeout(); - await tcsService.EndMethod.Task.OrTimeout(); + var message = await client.InvokeAsync(nameof(MethodHub.Echo), "Hello world!").DefaultTimeout(); + await tcsService.EndMethod.Task.DefaultTimeout(); tcsService.Reset(); Assert.Null(message.Error); client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); - await tcsService.EndMethod.Task.OrTimeout(); + await tcsService.EndMethod.Task.DefaultTimeout(); } } @@ -156,7 +157,7 @@ public async Task HubFilterDoesNotNeedToImplementMethods() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); var completion = await client.InvokeAsync(nameof(DynamicTestHub.Echo), "hello"); Assert.Null(completion.Error); @@ -164,7 +165,7 @@ public async Task HubFilterDoesNotNeedToImplementMethods() client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -191,17 +192,17 @@ public async Task MutlipleFilters_MethodsAreCalled() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await tcsService1.StartedMethod.Task.OrTimeout(); - await tcsService2.StartedMethod.Task.OrTimeout(); - await client.Connected.OrTimeout(); - await tcsService1.EndMethod.Task.OrTimeout(); - await tcsService2.EndMethod.Task.OrTimeout(); + await tcsService1.StartedMethod.Task.DefaultTimeout(); + await tcsService2.StartedMethod.Task.DefaultTimeout(); + await client.Connected.DefaultTimeout(); + await tcsService1.EndMethod.Task.DefaultTimeout(); + await tcsService2.EndMethod.Task.DefaultTimeout(); tcsService1.Reset(); tcsService2.Reset(); - var message = await client.InvokeAsync(nameof(MethodHub.Echo), "Hello world!").OrTimeout(); - await tcsService1.EndMethod.Task.OrTimeout(); - await tcsService2.EndMethod.Task.OrTimeout(); + var message = await client.InvokeAsync(nameof(MethodHub.Echo), "Hello world!").DefaultTimeout(); + await tcsService1.EndMethod.Task.DefaultTimeout(); + await tcsService2.EndMethod.Task.DefaultTimeout(); tcsService1.Reset(); tcsService2.Reset(); @@ -209,10 +210,10 @@ public async Task MutlipleFilters_MethodsAreCalled() client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); - await tcsService1.EndMethod.Task.OrTimeout(); - await tcsService2.EndMethod.Task.OrTimeout(); + await tcsService1.EndMethod.Task.DefaultTimeout(); + await tcsService2.EndMethod.Task.DefaultTimeout(); } } } @@ -241,17 +242,17 @@ public async Task MixingTypeAndInstanceGlobalFilters_MethodsAreCalled() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await tcsService1.StartedMethod.Task.OrTimeout(); - await tcsService2.StartedMethod.Task.OrTimeout(); - await client.Connected.OrTimeout(); - await tcsService1.EndMethod.Task.OrTimeout(); - await tcsService2.EndMethod.Task.OrTimeout(); + await tcsService1.StartedMethod.Task.DefaultTimeout(); + await tcsService2.StartedMethod.Task.DefaultTimeout(); + await client.Connected.DefaultTimeout(); + await tcsService1.EndMethod.Task.DefaultTimeout(); + await tcsService2.EndMethod.Task.DefaultTimeout(); tcsService1.Reset(); tcsService2.Reset(); - var message = await client.InvokeAsync(nameof(MethodHub.Echo), "Hello world!").OrTimeout(); - await tcsService1.EndMethod.Task.OrTimeout(); - await tcsService2.EndMethod.Task.OrTimeout(); + var message = await client.InvokeAsync(nameof(MethodHub.Echo), "Hello world!").DefaultTimeout(); + await tcsService1.EndMethod.Task.DefaultTimeout(); + await tcsService2.EndMethod.Task.DefaultTimeout(); tcsService1.Reset(); tcsService2.Reset(); @@ -259,10 +260,10 @@ public async Task MixingTypeAndInstanceGlobalFilters_MethodsAreCalled() client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); - await tcsService1.EndMethod.Task.OrTimeout(); - await tcsService2.EndMethod.Task.OrTimeout(); + await tcsService1.EndMethod.Task.DefaultTimeout(); + await tcsService2.EndMethod.Task.DefaultTimeout(); } } } @@ -292,17 +293,17 @@ public async Task MixingTypeAndInstanceHubSpecificFilters_MethodsAreCalled() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await tcsService1.StartedMethod.Task.OrTimeout(); - await tcsService2.StartedMethod.Task.OrTimeout(); - await client.Connected.OrTimeout(); - await tcsService1.EndMethod.Task.OrTimeout(); - await tcsService2.EndMethod.Task.OrTimeout(); + await tcsService1.StartedMethod.Task.DefaultTimeout(); + await tcsService2.StartedMethod.Task.DefaultTimeout(); + await client.Connected.DefaultTimeout(); + await tcsService1.EndMethod.Task.DefaultTimeout(); + await tcsService2.EndMethod.Task.DefaultTimeout(); tcsService1.Reset(); tcsService2.Reset(); - var message = await client.InvokeAsync(nameof(MethodHub.Echo), "Hello world!").OrTimeout(); - await tcsService1.EndMethod.Task.OrTimeout(); - await tcsService2.EndMethod.Task.OrTimeout(); + var message = await client.InvokeAsync(nameof(MethodHub.Echo), "Hello world!").DefaultTimeout(); + await tcsService1.EndMethod.Task.DefaultTimeout(); + await tcsService2.EndMethod.Task.DefaultTimeout(); tcsService1.Reset(); tcsService2.Reset(); @@ -310,10 +311,10 @@ public async Task MixingTypeAndInstanceHubSpecificFilters_MethodsAreCalled() client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); - await tcsService1.EndMethod.Task.OrTimeout(); - await tcsService2.EndMethod.Task.OrTimeout(); + await tcsService1.EndMethod.Task.DefaultTimeout(); + await tcsService2.EndMethod.Task.DefaultTimeout(); } } } @@ -340,39 +341,39 @@ public async Task GlobalFiltersRunInOrder() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await syncPoints1[0].WaitForSyncPoint().OrTimeout(); + await syncPoints1[0].WaitForSyncPoint().DefaultTimeout(); // Second filter wont run yet because first filter is waiting on SyncPoint Assert.False(syncPoints2[0].WaitForSyncPoint().IsCompleted); syncPoints1[0].Continue(); - await syncPoints2[0].WaitForSyncPoint().OrTimeout(); + await syncPoints2[0].WaitForSyncPoint().DefaultTimeout(); syncPoints2[0].Continue(); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); var invokeTask = client.InvokeAsync(nameof(MethodHub.Echo), "Hello world!"); - await syncPoints1[1].WaitForSyncPoint().OrTimeout(); + await syncPoints1[1].WaitForSyncPoint().DefaultTimeout(); // Second filter wont run yet because first filter is waiting on SyncPoint Assert.False(syncPoints2[1].WaitForSyncPoint().IsCompleted); syncPoints1[1].Continue(); - await syncPoints2[1].WaitForSyncPoint().OrTimeout(); + await syncPoints2[1].WaitForSyncPoint().DefaultTimeout(); syncPoints2[1].Continue(); - var message = await invokeTask.OrTimeout(); + var message = await invokeTask.DefaultTimeout(); Assert.Null(message.Error); client.Dispose(); - await syncPoints1[2].WaitForSyncPoint().OrTimeout(); + await syncPoints1[2].WaitForSyncPoint().DefaultTimeout(); // Second filter wont run yet because first filter is waiting on SyncPoint Assert.False(syncPoints2[2].WaitForSyncPoint().IsCompleted); syncPoints1[2].Continue(); - await syncPoints2[2].WaitForSyncPoint().OrTimeout(); + await syncPoints2[2].WaitForSyncPoint().DefaultTimeout(); syncPoints2[2].Continue(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -400,39 +401,39 @@ public async Task HubSpecificFiltersRunInOrder() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await syncPoints1[0].WaitForSyncPoint().OrTimeout(); + await syncPoints1[0].WaitForSyncPoint().DefaultTimeout(); // Second filter wont run yet because first filter is waiting on SyncPoint Assert.False(syncPoints2[0].WaitForSyncPoint().IsCompleted); syncPoints1[0].Continue(); - await syncPoints2[0].WaitForSyncPoint().OrTimeout(); + await syncPoints2[0].WaitForSyncPoint().DefaultTimeout(); syncPoints2[0].Continue(); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); var invokeTask = client.InvokeAsync(nameof(MethodHub.Echo), "Hello world!"); - await syncPoints1[1].WaitForSyncPoint().OrTimeout(); + await syncPoints1[1].WaitForSyncPoint().DefaultTimeout(); // Second filter wont run yet because first filter is waiting on SyncPoint Assert.False(syncPoints2[1].WaitForSyncPoint().IsCompleted); syncPoints1[1].Continue(); - await syncPoints2[1].WaitForSyncPoint().OrTimeout(); + await syncPoints2[1].WaitForSyncPoint().DefaultTimeout(); syncPoints2[1].Continue(); - var message = await invokeTask.OrTimeout(); + var message = await invokeTask.DefaultTimeout(); Assert.Null(message.Error); client.Dispose(); - await syncPoints1[2].WaitForSyncPoint().OrTimeout(); + await syncPoints1[2].WaitForSyncPoint().DefaultTimeout(); // Second filter wont run yet because first filter is waiting on SyncPoint Assert.False(syncPoints2[2].WaitForSyncPoint().IsCompleted); syncPoints1[2].Continue(); - await syncPoints2[2].WaitForSyncPoint().OrTimeout(); + await syncPoints2[2].WaitForSyncPoint().DefaultTimeout(); syncPoints2[2].Continue(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -462,39 +463,39 @@ public async Task GlobalFiltersRunBeforeHubSpecificFilters() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await syncPoints1[0].WaitForSyncPoint().OrTimeout(); + await syncPoints1[0].WaitForSyncPoint().DefaultTimeout(); // Second filter wont run yet because first filter is waiting on SyncPoint Assert.False(syncPoints2[0].WaitForSyncPoint().IsCompleted); syncPoints1[0].Continue(); - await syncPoints2[0].WaitForSyncPoint().OrTimeout(); + await syncPoints2[0].WaitForSyncPoint().DefaultTimeout(); syncPoints2[0].Continue(); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); var invokeTask = client.InvokeAsync(nameof(MethodHub.Echo), "Hello world!"); - await syncPoints1[1].WaitForSyncPoint().OrTimeout(); + await syncPoints1[1].WaitForSyncPoint().DefaultTimeout(); // Second filter wont run yet because first filter is waiting on SyncPoint Assert.False(syncPoints2[1].WaitForSyncPoint().IsCompleted); syncPoints1[1].Continue(); - await syncPoints2[1].WaitForSyncPoint().OrTimeout(); + await syncPoints2[1].WaitForSyncPoint().DefaultTimeout(); syncPoints2[1].Continue(); - var message = await invokeTask.OrTimeout(); + var message = await invokeTask.DefaultTimeout(); Assert.Null(message.Error); client.Dispose(); - await syncPoints1[2].WaitForSyncPoint().OrTimeout(); + await syncPoints1[2].WaitForSyncPoint().DefaultTimeout(); // Second filter wont run yet because first filter is waiting on SyncPoint Assert.False(syncPoints2[2].WaitForSyncPoint().IsCompleted); syncPoints1[2].Continue(); - await syncPoints2[2].WaitForSyncPoint().OrTimeout(); + await syncPoints2[2].WaitForSyncPoint().DefaultTimeout(); syncPoints2[2].Continue(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -542,13 +543,13 @@ public async Task FiltersHaveTransientScopeByDefault() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); // Filter is transient, so these counts are reset every time the filter is created Assert.Equal(1, counter.OnConnectedAsyncCount); Assert.Equal(0, counter.InvokeMethodAsyncCount); Assert.Equal(0, counter.OnDisconnectedAsyncCount); - var message = await client.InvokeAsync(nameof(MethodHub.Echo), "Hello world!").OrTimeout(); + var message = await client.InvokeAsync(nameof(MethodHub.Echo), "Hello world!").DefaultTimeout(); // Filter is transient, so these counts are reset every time the filter is created Assert.Equal(0, counter.OnConnectedAsyncCount); Assert.Equal(1, counter.InvokeMethodAsyncCount); @@ -558,7 +559,7 @@ public async Task FiltersHaveTransientScopeByDefault() client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); // Filter is transient, so these counts are reset every time the filter is created Assert.Equal(0, counter.OnConnectedAsyncCount); @@ -591,12 +592,12 @@ public async Task FiltersCanBeSingletonIfAddedToDI() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); Assert.Equal(1, counter.OnConnectedAsyncCount); Assert.Equal(0, counter.InvokeMethodAsyncCount); Assert.Equal(0, counter.OnDisconnectedAsyncCount); - var message = await client.InvokeAsync(nameof(MethodHub.Echo), "Hello world!").OrTimeout(); + var message = await client.InvokeAsync(nameof(MethodHub.Echo), "Hello world!").DefaultTimeout(); Assert.Equal(1, counter.OnConnectedAsyncCount); Assert.Equal(1, counter.InvokeMethodAsyncCount); Assert.Equal(0, counter.OnDisconnectedAsyncCount); @@ -605,7 +606,7 @@ public async Task FiltersCanBeSingletonIfAddedToDI() client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); Assert.Equal(1, counter.OnConnectedAsyncCount); Assert.Equal(1, counter.InvokeMethodAsyncCount); @@ -640,7 +641,7 @@ public async Task ConnectionContinuesIfOnConnectedAsyncThrowsAndFilterDoesNot() client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -671,7 +672,7 @@ public async Task ConnectionContinuesIfOnConnectedAsyncNotCalledByFilter() client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -695,16 +696,16 @@ public async Task FilterCanSkipCallingHubMethod() { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); - await client.Connected.OrTimeout(); + await client.Connected.DefaultTimeout(); - var message = await client.InvokeAsync(nameof(MethodHub.Echo), "Hello world!").OrTimeout(); + var message = await client.InvokeAsync(nameof(MethodHub.Echo), "Hello world!").DefaultTimeout(); Assert.Null(message.Error); Assert.Null(message.Result); client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -733,19 +734,19 @@ public async Task FiltersWithIDisposableAreDisposed() var connectionHandlerTask = await client.ConnectAsync(connectionHandler); // OnConnectedAsync creates and destroys the filter - await tcsService.StartedMethod.Task.OrTimeout(); + await tcsService.StartedMethod.Task.DefaultTimeout(); tcsService.Reset(); var message = await client.InvokeAsync("Echo", "Hello"); Assert.Equal("Hello", message.Result); - await tcsService.StartedMethod.Task.OrTimeout(); + await tcsService.StartedMethod.Task.DefaultTimeout(); tcsService.Reset(); client.Dispose(); // OnDisconnectedAsync creates and destroys the filter - await tcsService.StartedMethod.Task.OrTimeout(); - await connectionHandlerTask.OrTimeout(); + await tcsService.StartedMethod.Task.DefaultTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -778,7 +779,7 @@ public async Task InstanceFiltersWithIDisposableAreNotDisposed() client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); Assert.False(tcsService.StartedMethod.Task.IsCompleted); } @@ -809,19 +810,19 @@ public async Task FiltersWithIAsyncDisposableAreDisposed() var connectionHandlerTask = await client.ConnectAsync(connectionHandler); // OnConnectedAsync creates and destroys the filter - await tcsService.StartedMethod.Task.OrTimeout(); + await tcsService.StartedMethod.Task.DefaultTimeout(); tcsService.Reset(); var message = await client.InvokeAsync("Echo", "Hello"); Assert.Equal("Hello", message.Result); - await tcsService.StartedMethod.Task.OrTimeout(); + await tcsService.StartedMethod.Task.DefaultTimeout(); tcsService.Reset(); client.Dispose(); // OnDisconnectedAsync creates and destroys the filter - await tcsService.StartedMethod.Task.OrTimeout(); - await connectionHandlerTask.OrTimeout(); + await tcsService.StartedMethod.Task.DefaultTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } @@ -854,7 +855,7 @@ public async Task InstanceFiltersWithIAsyncDisposableAreNotDisposed() client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); Assert.False(tcsService.StartedMethod.Task.IsCompleted); } @@ -892,7 +893,7 @@ bool ExpectedErrors(WriteContext writeContext) client.Dispose(); - await connectionHandlerTask.OrTimeout(); + await connectionHandlerTask.DefaultTimeout(); } } } diff --git a/src/SignalR/server/SignalR/test/Internal/TypedClientBuilderTests.cs b/src/SignalR/server/SignalR/test/Internal/TypedClientBuilderTests.cs index ad9ee99d0a02..2ee9bb7aaaf0 100644 --- a/src/SignalR/server/SignalR/test/Internal/TypedClientBuilderTests.cs +++ b/src/SignalR/server/SignalR/test/Internal/TypedClientBuilderTests.cs @@ -2,12 +2,11 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.Collections; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.SignalR.Internal; -using Moq; +using Microsoft.AspNetCore.Testing; using Xunit; namespace Microsoft.AspNetCore.SignalR.Tests.Internal @@ -35,7 +34,7 @@ public async Task ProducesImplementationThatProxiesMethodsToIClientProxyAsync() send.Complete(); }); - await task.OrTimeout(); + await task.DefaultTimeout(); } [Fact] @@ -59,7 +58,7 @@ public async Task ProducesImplementationThatProxiesMethodsToIRenamedClientProxyA send.Complete(); }); - await task.OrTimeout(); + await task.DefaultTimeout(); } [Fact] @@ -95,8 +94,8 @@ public async Task SupportsSubInterfaces() send2.Complete(); }); - await task1.OrTimeout(); - await task2.OrTimeout(); + await task1.DefaultTimeout(); + await task2.DefaultTimeout(); } [Fact] @@ -130,8 +129,8 @@ public async Task SupportsCancellationToken() send2.Complete(); }); - await task1.OrTimeout(); - await task2.OrTimeout(); + await task1.DefaultTimeout(); + await task2.DefaultTimeout(); } [Fact] diff --git a/src/SignalR/server/SignalR/test/SerializedHubMessageTests.cs b/src/SignalR/server/SignalR/test/SerializedHubMessageTests.cs index da55a5e67517..ffeea9234b5f 100644 --- a/src/SignalR/server/SignalR/test/SerializedHubMessageTests.cs +++ b/src/SignalR/server/SignalR/test/SerializedHubMessageTests.cs @@ -2,6 +2,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Internal; using Microsoft.AspNetCore.SignalR.Protocol; +using Microsoft.AspNetCore.Testing; using Xunit; namespace Microsoft.AspNetCore.SignalR.Tests @@ -75,8 +76,8 @@ public async Task SerializingTwoMessagesFromTheSameProtocolSimultaneouslyResults syncPoints[1].Continue(); // Everything should finish and only one serialization should be written - await firstSerialization.OrTimeout(); - await secondSerialization.OrTimeout(); + await firstSerialization.DefaultTimeout(); + await secondSerialization.DefaultTimeout(); Assert.Collection(message.GetAllSerializations().Skip(numberOfSerializationsToPreCache).ToArray(), serializedMessage => diff --git a/src/SignalR/server/SignalR/test/WebSocketsTransportTests.cs b/src/SignalR/server/SignalR/test/WebSocketsTransportTests.cs index 6736265a7299..0ab281ca3bed 100644 --- a/src/SignalR/server/SignalR/test/WebSocketsTransportTests.cs +++ b/src/SignalR/server/SignalR/test/WebSocketsTransportTests.cs @@ -57,9 +57,9 @@ public async Task WebSocketsTransportStopsSendAndReceiveLoopsWhenTransportIsStop { var webSocketsTransport = new WebSocketsTransport(httpConnectionOptions: null, loggerFactory: LoggerFactory, accessTokenProvider: null); await webSocketsTransport.StartAsync(new Uri(server.WebSocketsUrl + "/echo"), - TransferFormat.Binary).OrTimeout(); - await webSocketsTransport.StopAsync().OrTimeout(); - await webSocketsTransport.Running.OrTimeout(); + TransferFormat.Binary).DefaultTimeout(); + await webSocketsTransport.StopAsync().DefaultTimeout(); + await webSocketsTransport.Running.DefaultTimeout(); } } @@ -71,12 +71,12 @@ public async Task WebSocketsTransportSendsUserAgent() { var webSocketsTransport = new WebSocketsTransport(httpConnectionOptions: null, loggerFactory: LoggerFactory, accessTokenProvider: null); await webSocketsTransport.StartAsync(new Uri(server.WebSocketsUrl + "/httpheader"), - TransferFormat.Binary).OrTimeout(); + TransferFormat.Binary).DefaultTimeout(); await webSocketsTransport.Output.WriteAsync(Encoding.UTF8.GetBytes("User-Agent")); // The HTTP header endpoint closes the connection immediately after sending response which should stop the transport - await webSocketsTransport.Running.OrTimeout(); + await webSocketsTransport.Running.DefaultTimeout(); Assert.True(webSocketsTransport.Input.TryRead(out var result)); @@ -102,12 +102,12 @@ public async Task WebSocketsTransportSendsXRequestedWithHeader() { var webSocketsTransport = new WebSocketsTransport(httpConnectionOptions: null, loggerFactory: LoggerFactory, accessTokenProvider: null); await webSocketsTransport.StartAsync(new Uri(server.WebSocketsUrl + "/httpheader"), - TransferFormat.Binary).OrTimeout(); + TransferFormat.Binary).DefaultTimeout(); await webSocketsTransport.Output.WriteAsync(Encoding.UTF8.GetBytes(HeaderNames.XRequestedWith)); // The HTTP header endpoint closes the connection immediately after sending response which should stop the transport - await webSocketsTransport.Running.OrTimeout(); + await webSocketsTransport.Running.DefaultTimeout(); Assert.True(webSocketsTransport.Input.TryRead(out var result)); @@ -127,7 +127,7 @@ public async Task WebSocketsTransportStopsWhenConnectionChannelClosed() await webSocketsTransport.StartAsync(new Uri(server.WebSocketsUrl + "/echo"), TransferFormat.Binary); webSocketsTransport.Output.Complete(); - await webSocketsTransport.Running.OrTimeout(TimeSpan.FromSeconds(10)); + await webSocketsTransport.Running.DefaultTimeout(TimeSpan.FromSeconds(10)); } } @@ -145,7 +145,7 @@ public async Task WebSocketsTransportStopsWhenConnectionClosedByTheServer(Transf await webSocketsTransport.Output.WriteAsync(new byte[] { 0x42 }); // The echoAndClose endpoint closes the connection immediately after sending response which should stop the transport - await webSocketsTransport.Running.OrTimeout(); + await webSocketsTransport.Running.DefaultTimeout(); Assert.True(webSocketsTransport.Input.TryRead(out var result)); Assert.Equal(new byte[] { 0x42 }, result.Buffer.ToArray()); @@ -164,10 +164,10 @@ public async Task WebSocketsTransportSetsTransferFormat(TransferFormat transferF var webSocketsTransport = new WebSocketsTransport(httpConnectionOptions: null, loggerFactory: LoggerFactory, accessTokenProvider: null); await webSocketsTransport.StartAsync(new Uri(server.WebSocketsUrl + "/echo"), - transferFormat).OrTimeout(); + transferFormat).DefaultTimeout(); - await webSocketsTransport.StopAsync().OrTimeout(); - await webSocketsTransport.Running.OrTimeout(); + await webSocketsTransport.StopAsync().DefaultTimeout(); + await webSocketsTransport.Running.DefaultTimeout(); } } diff --git a/src/SignalR/server/Specification.Tests/src/HubLifetimeManagerTestBase.cs b/src/SignalR/server/Specification.Tests/src/HubLifetimeManagerTestBase.cs index f1dcaa3f09ff..942608bf0a64 100644 --- a/src/SignalR/server/Specification.Tests/src/HubLifetimeManagerTestBase.cs +++ b/src/SignalR/server/Specification.Tests/src/HubLifetimeManagerTestBase.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.SignalR.Protocol; using Microsoft.AspNetCore.SignalR.Tests; +using Microsoft.AspNetCore.Testing; using Xunit; namespace Microsoft.AspNetCore.SignalR.Specification.Tests @@ -41,10 +42,10 @@ public async Task SendAllAsyncWritesToAllConnectionsOutput() var connection1 = HubConnectionContextUtils.Create(client1.Connection); var connection2 = HubConnectionContextUtils.Create(client2.Connection); - await manager.OnConnectedAsync(connection1).OrTimeout(); - await manager.OnConnectedAsync(connection2).OrTimeout(); + await manager.OnConnectedAsync(connection1).DefaultTimeout(); + await manager.OnConnectedAsync(connection2).DefaultTimeout(); - await manager.SendAllAsync("Hello", new object[] { "World" }).OrTimeout(); + await manager.SendAllAsync("Hello", new object[] { "World" }).DefaultTimeout(); var message = Assert.IsType(client1.TryRead()); Assert.Equal("Hello", message.Target); @@ -72,12 +73,12 @@ public async Task SendAllAsyncDoesNotWriteToDisconnectedConnectionsOutput() var connection1 = HubConnectionContextUtils.Create(client1.Connection); var connection2 = HubConnectionContextUtils.Create(client2.Connection); - await manager.OnConnectedAsync(connection1).OrTimeout(); - await manager.OnConnectedAsync(connection2).OrTimeout(); + await manager.OnConnectedAsync(connection1).DefaultTimeout(); + await manager.OnConnectedAsync(connection2).DefaultTimeout(); - await manager.OnDisconnectedAsync(connection2).OrTimeout(); + await manager.OnDisconnectedAsync(connection2).DefaultTimeout(); - await manager.SendAllAsync("Hello", new object[] { "World" }).OrTimeout(); + await manager.SendAllAsync("Hello", new object[] { "World" }).DefaultTimeout(); var message = Assert.IsType(client1.TryRead()); Assert.Equal("Hello", message.Target); @@ -102,12 +103,12 @@ public async Task SendGroupAsyncWritesToAllConnectionsInGroupOutput() var connection1 = HubConnectionContextUtils.Create(client1.Connection); var connection2 = HubConnectionContextUtils.Create(client2.Connection); - await manager.OnConnectedAsync(connection1).OrTimeout(); - await manager.OnConnectedAsync(connection2).OrTimeout(); + await manager.OnConnectedAsync(connection1).DefaultTimeout(); + await manager.OnConnectedAsync(connection2).DefaultTimeout(); - await manager.AddToGroupAsync(connection1.ConnectionId, "group").OrTimeout(); + await manager.AddToGroupAsync(connection1.ConnectionId, "group").DefaultTimeout(); - await manager.SendGroupAsync("group", "Hello", new object[] { "World" }).OrTimeout(); + await manager.SendGroupAsync("group", "Hello", new object[] { "World" }).DefaultTimeout(); var message = Assert.IsType(client1.TryRead()); Assert.Equal("Hello", message.Target); @@ -132,13 +133,13 @@ public async Task SendGroupExceptAsyncDoesNotWriteToExcludedConnections() var connection1 = HubConnectionContextUtils.Create(client1.Connection); var connection2 = HubConnectionContextUtils.Create(client2.Connection); - await manager.OnConnectedAsync(connection1).OrTimeout(); - await manager.OnConnectedAsync(connection2).OrTimeout(); + await manager.OnConnectedAsync(connection1).DefaultTimeout(); + await manager.OnConnectedAsync(connection2).DefaultTimeout(); - await manager.AddToGroupAsync(connection1.ConnectionId, "group1").OrTimeout(); - await manager.AddToGroupAsync(connection2.ConnectionId, "group1").OrTimeout(); + await manager.AddToGroupAsync(connection1.ConnectionId, "group1").DefaultTimeout(); + await manager.AddToGroupAsync(connection2.ConnectionId, "group1").DefaultTimeout(); - await manager.SendGroupExceptAsync("group1", "Hello", new object[] { "World" }, new[] { connection2.ConnectionId }).OrTimeout(); + await manager.SendGroupExceptAsync("group1", "Hello", new object[] { "World" }, new[] { connection2.ConnectionId }).DefaultTimeout(); var message = Assert.IsType(client1.TryRead()); Assert.Equal("Hello", message.Target); @@ -161,9 +162,9 @@ public async Task SendConnectionAsyncWritesToConnectionOutput() var manager = CreateNewHubLifetimeManager(); var connection = HubConnectionContextUtils.Create(client.Connection); - await manager.OnConnectedAsync(connection).OrTimeout(); + await manager.OnConnectedAsync(connection).DefaultTimeout(); - await manager.SendConnectionAsync(connection.ConnectionId, "Hello", new object[] { "World" }).OrTimeout(); + await manager.SendConnectionAsync(connection.ConnectionId, "Hello", new object[] { "World" }).DefaultTimeout(); var message = Assert.IsType(client.TryRead()); Assert.Equal("Hello", message.Target); diff --git a/src/SignalR/server/Specification.Tests/src/Microsoft.AspNetCore.SignalR.Specification.Tests.csproj b/src/SignalR/server/Specification.Tests/src/Microsoft.AspNetCore.SignalR.Specification.Tests.csproj index 54357528832b..e8d99995c902 100644 --- a/src/SignalR/server/Specification.Tests/src/Microsoft.AspNetCore.SignalR.Specification.Tests.csproj +++ b/src/SignalR/server/Specification.Tests/src/Microsoft.AspNetCore.SignalR.Specification.Tests.csproj @@ -20,6 +20,7 @@ + diff --git a/src/SignalR/server/Specification.Tests/src/ScaleoutHubLifetimeManagerTests.cs b/src/SignalR/server/Specification.Tests/src/ScaleoutHubLifetimeManagerTests.cs index c4a12de78a22..fecb05c903c8 100644 --- a/src/SignalR/server/Specification.Tests/src/ScaleoutHubLifetimeManagerTests.cs +++ b/src/SignalR/server/Specification.Tests/src/ScaleoutHubLifetimeManagerTests.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.SignalR.Protocol; using Microsoft.AspNetCore.SignalR.Tests; +using Microsoft.AspNetCore.Testing; using Xunit; namespace Microsoft.AspNetCore.SignalR.Specification.Tests @@ -29,7 +30,7 @@ public abstract class ScaleoutHubLifetimeManagerTests : HubLifetimeM private async Task AssertMessageAsync(TestClient client) { - var message = Assert.IsType(await client.ReadAsync().OrTimeout()); + var message = Assert.IsType(await client.ReadAsync().DefaultTimeout()); Assert.Equal("Hello", message.Target); Assert.Single(message.Arguments); Assert.Equal("World", (string)message.Arguments[0]); @@ -52,10 +53,10 @@ public async Task InvokeAllAsyncWithMultipleServersWritesToAllConnectionsOutput( var connection1 = HubConnectionContextUtils.Create(client1.Connection); var connection2 = HubConnectionContextUtils.Create(client2.Connection); - await manager1.OnConnectedAsync(connection1).OrTimeout(); - await manager2.OnConnectedAsync(connection2).OrTimeout(); + await manager1.OnConnectedAsync(connection1).DefaultTimeout(); + await manager2.OnConnectedAsync(connection2).DefaultTimeout(); - await manager1.SendAllAsync("Hello", new object[] { "World" }).OrTimeout(); + await manager1.SendAllAsync("Hello", new object[] { "World" }).DefaultTimeout(); await AssertMessageAsync(client1); await AssertMessageAsync(client2); @@ -79,12 +80,12 @@ public async Task InvokeAllAsyncWithMultipleServersDoesNotWriteToDisconnectedCon var connection1 = HubConnectionContextUtils.Create(client1.Connection); var connection2 = HubConnectionContextUtils.Create(client2.Connection); - await manager1.OnConnectedAsync(connection1).OrTimeout(); - await manager2.OnConnectedAsync(connection2).OrTimeout(); + await manager1.OnConnectedAsync(connection1).DefaultTimeout(); + await manager2.OnConnectedAsync(connection2).DefaultTimeout(); - await manager2.OnDisconnectedAsync(connection2).OrTimeout(); + await manager2.OnDisconnectedAsync(connection2).DefaultTimeout(); - await manager2.SendAllAsync("Hello", new object[] { "World" }).OrTimeout(); + await manager2.SendAllAsync("Hello", new object[] { "World" }).DefaultTimeout(); await AssertMessageAsync(client1); @@ -108,9 +109,9 @@ public async Task InvokeConnectionAsyncOnServerWithoutConnectionWritesOutputToCo { var connection = HubConnectionContextUtils.Create(client.Connection); - await manager1.OnConnectedAsync(connection).OrTimeout(); + await manager1.OnConnectedAsync(connection).DefaultTimeout(); - await manager2.SendConnectionAsync(connection.ConnectionId, "Hello", new object[] { "World" }).OrTimeout(); + await manager2.SendConnectionAsync(connection.ConnectionId, "Hello", new object[] { "World" }).DefaultTimeout(); await AssertMessageAsync(client); } @@ -132,11 +133,11 @@ public async Task InvokeGroupAsyncOnServerWithoutConnectionWritesOutputToGroupCo { var connection = HubConnectionContextUtils.Create(client.Connection); - await manager1.OnConnectedAsync(connection).OrTimeout(); + await manager1.OnConnectedAsync(connection).DefaultTimeout(); - await manager1.AddToGroupAsync(connection.ConnectionId, "name").OrTimeout(); + await manager1.AddToGroupAsync(connection.ConnectionId, "name").DefaultTimeout(); - await manager2.SendGroupAsync("name", "Hello", new object[] { "World" }).OrTimeout(); + await manager2.SendGroupAsync("name", "Hello", new object[] { "World" }).DefaultTimeout(); await AssertMessageAsync(client); } @@ -156,13 +157,13 @@ public async Task DisconnectConnectionRemovesConnectionFromGroup() { var connection = HubConnectionContextUtils.Create(client.Connection); - await manager.OnConnectedAsync(connection).OrTimeout(); + await manager.OnConnectedAsync(connection).DefaultTimeout(); - await manager.AddToGroupAsync(connection.ConnectionId, "name").OrTimeout(); + await manager.AddToGroupAsync(connection.ConnectionId, "name").DefaultTimeout(); - await manager.OnDisconnectedAsync(connection).OrTimeout(); + await manager.OnDisconnectedAsync(connection).DefaultTimeout(); - await manager.SendGroupAsync("name", "Hello", new object[] { "World" }).OrTimeout(); + await manager.SendGroupAsync("name", "Hello", new object[] { "World" }).DefaultTimeout(); Assert.Null(client.TryRead()); } @@ -182,9 +183,9 @@ public async Task RemoveGroupFromLocalConnectionNotInGroupDoesNothing() { var connection = HubConnectionContextUtils.Create(client.Connection); - await manager.OnConnectedAsync(connection).OrTimeout(); + await manager.OnConnectedAsync(connection).DefaultTimeout(); - await manager.RemoveFromGroupAsync(connection.ConnectionId, "name").OrTimeout(); + await manager.RemoveFromGroupAsync(connection.ConnectionId, "name").DefaultTimeout(); } } @@ -203,9 +204,9 @@ public async Task RemoveGroupFromConnectionOnDifferentServerNotInGroupDoesNothin { var connection = HubConnectionContextUtils.Create(client.Connection); - await manager1.OnConnectedAsync(connection).OrTimeout(); + await manager1.OnConnectedAsync(connection).DefaultTimeout(); - await manager2.RemoveFromGroupAsync(connection.ConnectionId, "name").OrTimeout(); + await manager2.RemoveFromGroupAsync(connection.ConnectionId, "name").DefaultTimeout(); } } @@ -224,11 +225,11 @@ public async Task AddGroupAsyncForConnectionOnDifferentServerWorks() { var connection = HubConnectionContextUtils.Create(client.Connection); - await manager1.OnConnectedAsync(connection).OrTimeout(); + await manager1.OnConnectedAsync(connection).DefaultTimeout(); - await manager2.AddToGroupAsync(connection.ConnectionId, "name").OrTimeout(); + await manager2.AddToGroupAsync(connection.ConnectionId, "name").DefaultTimeout(); - await manager2.SendGroupAsync("name", "Hello", new object[] { "World" }).OrTimeout(); + await manager2.SendGroupAsync("name", "Hello", new object[] { "World" }).DefaultTimeout(); await AssertMessageAsync(client); } @@ -248,12 +249,12 @@ public async Task AddGroupAsyncForLocalConnectionAlreadyInGroupDoesNothing() { var connection = HubConnectionContextUtils.Create(client.Connection); - await manager.OnConnectedAsync(connection).OrTimeout(); + await manager.OnConnectedAsync(connection).DefaultTimeout(); - await manager.AddToGroupAsync(connection.ConnectionId, "name").OrTimeout(); - await manager.AddToGroupAsync(connection.ConnectionId, "name").OrTimeout(); + await manager.AddToGroupAsync(connection.ConnectionId, "name").DefaultTimeout(); + await manager.AddToGroupAsync(connection.ConnectionId, "name").DefaultTimeout(); - await manager.SendGroupAsync("name", "Hello", new object[] { "World" }).OrTimeout(); + await manager.SendGroupAsync("name", "Hello", new object[] { "World" }).DefaultTimeout(); await AssertMessageAsync(client); Assert.Null(client.TryRead()); @@ -275,12 +276,12 @@ public async Task AddGroupAsyncForConnectionOnDifferentServerAlreadyInGroupDoesN { var connection = HubConnectionContextUtils.Create(client.Connection); - await manager1.OnConnectedAsync(connection).OrTimeout(); + await manager1.OnConnectedAsync(connection).DefaultTimeout(); - await manager1.AddToGroupAsync(connection.ConnectionId, "name").OrTimeout(); - await manager2.AddToGroupAsync(connection.ConnectionId, "name").OrTimeout(); + await manager1.AddToGroupAsync(connection.ConnectionId, "name").DefaultTimeout(); + await manager2.AddToGroupAsync(connection.ConnectionId, "name").DefaultTimeout(); - await manager2.SendGroupAsync("name", "Hello", new object[] { "World" }).OrTimeout(); + await manager2.SendGroupAsync("name", "Hello", new object[] { "World" }).DefaultTimeout(); await AssertMessageAsync(client); Assert.Null(client.TryRead()); @@ -302,17 +303,17 @@ public async Task RemoveGroupAsyncForConnectionOnDifferentServerWorks() { var connection = HubConnectionContextUtils.Create(client.Connection); - await manager1.OnConnectedAsync(connection).OrTimeout(); + await manager1.OnConnectedAsync(connection).DefaultTimeout(); - await manager1.AddToGroupAsync(connection.ConnectionId, "name").OrTimeout(); + await manager1.AddToGroupAsync(connection.ConnectionId, "name").DefaultTimeout(); - await manager2.SendGroupAsync("name", "Hello", new object[] { "World" }).OrTimeout(); + await manager2.SendGroupAsync("name", "Hello", new object[] { "World" }).DefaultTimeout(); await AssertMessageAsync(client); - await manager2.RemoveFromGroupAsync(connection.ConnectionId, "name").OrTimeout(); + await manager2.RemoveFromGroupAsync(connection.ConnectionId, "name").DefaultTimeout(); - await manager2.SendGroupAsync("name", "Hello", new object[] { "World" }).OrTimeout(); + await manager2.SendGroupAsync("name", "Hello", new object[] { "World" }).DefaultTimeout(); Assert.Null(client.TryRead()); } @@ -334,10 +335,10 @@ public async Task InvokeConnectionAsyncForLocalConnectionDoesNotPublishToBackpla var connection = HubConnectionContextUtils.Create(client.Connection); // Add connection to both "servers" to see if connection receives message twice - await manager1.OnConnectedAsync(connection).OrTimeout(); - await manager2.OnConnectedAsync(connection).OrTimeout(); + await manager1.OnConnectedAsync(connection).DefaultTimeout(); + await manager2.OnConnectedAsync(connection).DefaultTimeout(); - await manager1.SendConnectionAsync(connection.ConnectionId, "Hello", new object[] { "World" }).OrTimeout(); + await manager1.SendConnectionAsync(connection.ConnectionId, "Hello", new object[] { "World" }).DefaultTimeout(); await AssertMessageAsync(client); Assert.Null(client.TryRead()); @@ -360,11 +361,11 @@ public async Task WritingToRemoteConnectionThatFailsDoesNotThrow() // Force an exception when writing to connection var connectionMock = HubConnectionContextUtils.CreateMock(client.Connection); - await manager2.OnConnectedAsync(connectionMock).OrTimeout(); + await manager2.OnConnectedAsync(connectionMock).DefaultTimeout(); // This doesn't throw because there is no connection.ConnectionId on this server so it has to publish to the backplane. // And once that happens there is no way to know if the invocation was successful or not. - await manager1.SendConnectionAsync(connectionMock.ConnectionId, "Hello", new object[] { "World" }).OrTimeout(); + await manager1.SendConnectionAsync(connectionMock.ConnectionId, "Hello", new object[] { "World" }).DefaultTimeout(); } } @@ -387,18 +388,18 @@ public async Task WritingToGroupWithOneConnectionFailingSecondConnectionStillRec var connection1 = connectionMock; var connection2 = HubConnectionContextUtils.Create(client2.Connection); - await manager.OnConnectedAsync(connection1).OrTimeout(); + await manager.OnConnectedAsync(connection1).DefaultTimeout(); await manager.AddToGroupAsync(connection1.ConnectionId, "group"); - await manager.OnConnectedAsync(connection2).OrTimeout(); + await manager.OnConnectedAsync(connection2).DefaultTimeout(); await manager.AddToGroupAsync(connection2.ConnectionId, "group"); - await manager.SendGroupAsync("group", "Hello", new object[] { "World" }).OrTimeout(); + await manager.SendGroupAsync("group", "Hello", new object[] { "World" }).DefaultTimeout(); // connection1 will throw when receiving a group message, we are making sure other connections // are not affected by another connection throwing await AssertMessageAsync(client2); // Repeat to check that group can still be sent to - await manager.SendGroupAsync("group", "Hello", new object[] { "World" }).OrTimeout(); + await manager.SendGroupAsync("group", "Hello", new object[] { "World" }).DefaultTimeout(); await AssertMessageAsync(client2); } } @@ -421,11 +422,11 @@ public async Task InvokeUserSendsToAllConnectionsForUser() var connection2 = HubConnectionContextUtils.Create(client2.Connection, userIdentifier: "userA"); var connection3 = HubConnectionContextUtils.Create(client3.Connection, userIdentifier: "userB"); - await manager.OnConnectedAsync(connection1).OrTimeout(); - await manager.OnConnectedAsync(connection2).OrTimeout(); - await manager.OnConnectedAsync(connection3).OrTimeout(); + await manager.OnConnectedAsync(connection1).DefaultTimeout(); + await manager.OnConnectedAsync(connection2).DefaultTimeout(); + await manager.OnConnectedAsync(connection3).DefaultTimeout(); - await manager.SendUserAsync("userA", "Hello", new object[] { "World" }).OrTimeout(); + await manager.SendUserAsync("userA", "Hello", new object[] { "World" }).DefaultTimeout(); await AssertMessageAsync(client1); await AssertMessageAsync(client2); } @@ -449,17 +450,17 @@ public async Task StillSubscribedToUserAfterOneOfMultipleConnectionsAssociatedWi var connection2 = HubConnectionContextUtils.Create(client2.Connection, userIdentifier: "userA"); var connection3 = HubConnectionContextUtils.Create(client3.Connection, userIdentifier: "userB"); - await manager.OnConnectedAsync(connection1).OrTimeout(); - await manager.OnConnectedAsync(connection2).OrTimeout(); - await manager.OnConnectedAsync(connection3).OrTimeout(); + await manager.OnConnectedAsync(connection1).DefaultTimeout(); + await manager.OnConnectedAsync(connection2).DefaultTimeout(); + await manager.OnConnectedAsync(connection3).DefaultTimeout(); - await manager.SendUserAsync("userA", "Hello", new object[] { "World" }).OrTimeout(); + await manager.SendUserAsync("userA", "Hello", new object[] { "World" }).DefaultTimeout(); await AssertMessageAsync(client1); await AssertMessageAsync(client2); // Disconnect one connection for the user - await manager.OnDisconnectedAsync(connection1).OrTimeout(); - await manager.SendUserAsync("userA", "Hello", new object[] { "World" }).OrTimeout(); + await manager.OnDisconnectedAsync(connection1).DefaultTimeout(); + await manager.SendUserAsync("userA", "Hello", new object[] { "World" }).DefaultTimeout(); await AssertMessageAsync(client2); } } diff --git a/src/SignalR/server/StackExchangeRedis/test/RedisEndToEnd.cs b/src/SignalR/server/StackExchangeRedis/test/RedisEndToEnd.cs index 2893ed4addc9..24ae992907bf 100644 --- a/src/SignalR/server/StackExchangeRedis/test/RedisEndToEnd.cs +++ b/src/SignalR/server/StackExchangeRedis/test/RedisEndToEnd.cs @@ -48,12 +48,12 @@ public async Task HubConnectionCanSendAndReceiveMessages(HttpTransportType trans var connection = CreateConnection(_serverFixture.FirstServer.Url + "/echo", transportType, protocol, LoggerFactory); - await connection.StartAsync().OrTimeout(); - var str = await connection.InvokeAsync("Echo", "Hello, World!").OrTimeout(); + await connection.StartAsync().DefaultTimeout(); + var str = await connection.InvokeAsync("Echo", "Hello, World!").DefaultTimeout(); Assert.Equal("Hello, World!", str); - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -76,16 +76,16 @@ public async Task HubConnectionCanSendAndReceiveGroupMessages(HttpTransportType var groupName = $"TestGroup_{transportType}_{protocolName}_{Guid.NewGuid()}"; - await secondConnection.StartAsync().OrTimeout(); - await connection.StartAsync().OrTimeout(); - await connection.InvokeAsync("AddSelfToGroup", groupName).OrTimeout(); - await secondConnection.InvokeAsync("AddSelfToGroup", groupName).OrTimeout(); - await connection.InvokeAsync("EchoGroup", groupName, "Hello, World!").OrTimeout(); + await secondConnection.StartAsync().DefaultTimeout(); + await connection.StartAsync().DefaultTimeout(); + await connection.InvokeAsync("AddSelfToGroup", groupName).DefaultTimeout(); + await secondConnection.InvokeAsync("AddSelfToGroup", groupName).DefaultTimeout(); + await connection.InvokeAsync("EchoGroup", groupName, "Hello, World!").DefaultTimeout(); - Assert.Equal("Hello, World!", await tcs.Task.OrTimeout()); - Assert.Equal("Hello, World!", await tcs2.Task.OrTimeout()); + Assert.Equal("Hello, World!", await tcs.Task.DefaultTimeout()); + Assert.Equal("Hello, World!", await tcs2.Task.DefaultTimeout()); - await connection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); } } @@ -106,15 +106,15 @@ public async Task CanSendAndReceiveUserMessagesFromMultipleConnectionsWithSameUs var tcs2 = new TaskCompletionSource(); secondConnection.On("Echo", message => tcs2.TrySetResult(message)); - await secondConnection.StartAsync().OrTimeout(); - await connection.StartAsync().OrTimeout(); - await connection.InvokeAsync("EchoUser", "userA", "Hello, World!").OrTimeout(); + await secondConnection.StartAsync().DefaultTimeout(); + await connection.StartAsync().DefaultTimeout(); + await connection.InvokeAsync("EchoUser", "userA", "Hello, World!").DefaultTimeout(); - Assert.Equal("Hello, World!", await tcs.Task.OrTimeout()); - Assert.Equal("Hello, World!", await tcs2.Task.OrTimeout()); + Assert.Equal("Hello, World!", await tcs.Task.DefaultTimeout()); + Assert.Equal("Hello, World!", await tcs2.Task.DefaultTimeout()); - await connection.DisposeAsync().OrTimeout(); - await secondConnection.DisposeAsync().OrTimeout(); + await connection.DisposeAsync().DefaultTimeout(); + await secondConnection.DisposeAsync().DefaultTimeout(); } } @@ -136,14 +136,14 @@ public async Task CanSendAndReceiveUserMessagesWhenOneConnectionWithUserDisconne var tcs = new TaskCompletionSource(); firstConnection.On("Echo", message => tcs.TrySetResult(message)); - await secondConnection.StartAsync().OrTimeout(); - await firstConnection.StartAsync().OrTimeout(); - await secondConnection.DisposeAsync().OrTimeout(); - await firstConnection.InvokeAsync("EchoUser", "userA", "Hello, World!").OrTimeout(); + await secondConnection.StartAsync().DefaultTimeout(); + await firstConnection.StartAsync().DefaultTimeout(); + await secondConnection.DisposeAsync().DefaultTimeout(); + await firstConnection.InvokeAsync("EchoUser", "userA", "Hello, World!").DefaultTimeout(); - Assert.Equal("Hello, World!", await tcs.Task.OrTimeout()); + Assert.Equal("Hello, World!", await tcs.Task.DefaultTimeout()); - await firstConnection.DisposeAsync().OrTimeout(); + await firstConnection.DisposeAsync().DefaultTimeout(); } } diff --git a/src/SignalR/server/StackExchangeRedis/test/RedisHubLifetimeManagerTests.cs b/src/SignalR/server/StackExchangeRedis/test/RedisHubLifetimeManagerTests.cs index 096a02a86826..02ce85234ecf 100644 --- a/src/SignalR/server/StackExchangeRedis/test/RedisHubLifetimeManagerTests.cs +++ b/src/SignalR/server/StackExchangeRedis/test/RedisHubLifetimeManagerTests.cs @@ -5,9 +5,9 @@ using Microsoft.AspNetCore.SignalR.Internal; using Microsoft.AspNetCore.SignalR.Protocol; using Microsoft.AspNetCore.SignalR.Tests; +using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; -using Microsoft.AspNetCore.SignalR.Specification.Tests; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; using Xunit; @@ -59,12 +59,12 @@ public async Task CamelCasedJsonIsPreservedAcrossRedisBoundary() var connection1 = HubConnectionContextUtils.Create(client1.Connection); var connection2 = HubConnectionContextUtils.Create(client2.Connection); - await manager1.OnConnectedAsync(connection1).OrTimeout(); - await manager2.OnConnectedAsync(connection2).OrTimeout(); + await manager1.OnConnectedAsync(connection1).DefaultTimeout(); + await manager2.OnConnectedAsync(connection2).DefaultTimeout(); await manager1.SendAllAsync("Hello", new object[] { new TestObject { TestProperty = "Foo" } }); - var message = Assert.IsType(await client2.ReadAsync().OrTimeout()); + var message = Assert.IsType(await client2.ReadAsync().DefaultTimeout()); Assert.Equal("Hello", message.Target); Assert.Collection( message.Arguments, From 46bbe721ec4cbb306a2866f49d3f06aa1cce3b57 Mon Sep 17 00:00:00 2001 From: Laszlo Deak Date: Sat, 10 Apr 2021 20:15:15 +0200 Subject: [PATCH 5/7] Covering TaskExtension with tests. Enabling target .net6.0 for AspNetCore Testing project --- .../src/Microsoft.AspNetCore.Testing.csproj | 2 +- .../xunit/FrameworkSkipConditionAttribute.cs | 2 +- src/Testing/test/TaskExtensionsTest.cs | 43 +++++++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/Testing/src/Microsoft.AspNetCore.Testing.csproj b/src/Testing/src/Microsoft.AspNetCore.Testing.csproj index 33021d14ad2f..b925c7649b30 100644 --- a/src/Testing/src/Microsoft.AspNetCore.Testing.csproj +++ b/src/Testing/src/Microsoft.AspNetCore.Testing.csproj @@ -2,7 +2,7 @@ Various helpers for writing tests that use ASP.NET Core. - $(DefaultNetFxTargetFramework);netstandard2.0 + $(DefaultNetCoreTargetFramework);$(DefaultNetFxTargetFramework);netstandard2.0 $(NoWarn);CS1591 true diff --git a/src/Testing/src/xunit/FrameworkSkipConditionAttribute.cs b/src/Testing/src/xunit/FrameworkSkipConditionAttribute.cs index b7719848a690..df97823d7bdd 100644 --- a/src/Testing/src/xunit/FrameworkSkipConditionAttribute.cs +++ b/src/Testing/src/xunit/FrameworkSkipConditionAttribute.cs @@ -43,7 +43,7 @@ private static bool CanRunOnThisFramework(RuntimeFrameworks excludedFrameworks) { return false; } -#elif NETSTANDARD2_0 +#elif NETSTANDARD2_0 || NET6_0 if (excludedFrameworks.HasFlag(RuntimeFrameworks.CoreCLR)) { return false; diff --git a/src/Testing/test/TaskExtensionsTest.cs b/src/Testing/test/TaskExtensionsTest.cs index c6508fa6994e..dcfaae5a2d49 100644 --- a/src/Testing/test/TaskExtensionsTest.cs +++ b/src/Testing/test/TaskExtensionsTest.cs @@ -17,5 +17,48 @@ public async Task TimeoutAfterTest() await Assert.ThrowsAsync(async () => await Task.Delay(30000, cts.Token).TimeoutAfter(TimeSpan.FromMilliseconds(50))); cts.Cancel(); } + + [Fact] + public async Task TimeoutAfter_DoesNotThrowWhenCompleted() + { + await Task.FromResult(true).TimeoutAfter(TimeSpan.FromMilliseconds(50)); + } + + [Fact] + public async Task TimeoutAfter_DoesNotThrow_WithinTimeoutPeriod() + { + await Task.Delay(10).TimeoutAfter(TimeSpan.FromMilliseconds(50)); + } + + [Fact] + public async Task DefaultTimeout_WithTimespan() + { + var cts = new CancellationTokenSource(); + await Assert.ThrowsAsync(async () => await Task.Delay(30000, cts.Token).DefaultTimeout(TimeSpan.FromMilliseconds(50))); + cts.Cancel(); + } + + [Fact] + public async Task DefaultTimeout_WithMilliseconds() + { + var cts = new CancellationTokenSource(); + await Assert.ThrowsAsync(async () => await Task.Delay(30000, cts.Token).DefaultTimeout(50)); + cts.Cancel(); + } + + [Fact] + public async Task DefaultTimeout_Message_ContainsLineNumber() + { + var cts = new CancellationTokenSource(); + await Assert.ThrowsAsync(async () => await Task.Delay(30000, cts.Token).DefaultTimeout(50)); + cts.Cancel(); + } + + [Fact] + public async Task DefaultTimeout_DoesNotThrowWhenCompleted() + { + await Task.FromResult(true).DefaultTimeout(); + } + } } From 04f0210086d7313eea60e560896a716d3807c627 Mon Sep 17 00:00:00 2001 From: Laszlo Deak Date: Sun, 11 Apr 2021 10:51:48 +0200 Subject: [PATCH 6/7] Filtering exception catching to catch exceptions thrown by WaitAsync only. --- src/Testing/src/TaskExtensions.cs | 6 +++--- src/Testing/test/TaskExtensionsTest.cs | 30 ++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/Testing/src/TaskExtensions.cs b/src/Testing/src/TaskExtensions.cs index 1b2a650b41f6..e07d1fbaa865 100644 --- a/src/Testing/src/TaskExtensions.cs +++ b/src/Testing/src/TaskExtensions.cs @@ -46,7 +46,7 @@ public static Task DefaultTimeout(this Task task, TimeSpan timeout, [Ca return task.TimeoutAfter(timeout, filePath, lineNumber); } - public static Task DefaultTimeout(this ValueTask task, int milliseconds = DefaultTimeoutDuration, [CallerFilePath] string filePath = null, [CallerLineNumber] int lineNumber = default) + public static Task DefaultTimeout(this ValueTask task, int milliseconds = DefaultTimeoutDuration, [CallerFilePath] string filePath = null, [CallerLineNumber] int lineNumber = default) { return task.AsTask().TimeoutAfter(TimeSpan.FromMilliseconds(milliseconds), filePath, lineNumber); } @@ -73,7 +73,7 @@ public static async Task TimeoutAfter(this Task task, TimeSpan timeout, { return await task.WaitAsync(timeout); } - catch (TimeoutException) + catch (TimeoutException ex) when (ex.Source == nameof(Microsoft.AspNetCore.Testing)) { throw new TimeoutException(CreateMessage(timeout, filePath, lineNumber)); } @@ -108,7 +108,7 @@ public static async Task TimeoutAfter(this Task task, TimeSpan timeout, { await task.WaitAsync(timeout); } - catch (TimeoutException) + catch (TimeoutException ex) when (ex.Source == nameof(Microsoft.AspNetCore.Testing)) { throw new TimeoutException(CreateMessage(timeout, filePath, lineNumber)); } diff --git a/src/Testing/test/TaskExtensionsTest.cs b/src/Testing/test/TaskExtensionsTest.cs index dcfaae5a2d49..232a3a4a1a79 100644 --- a/src/Testing/test/TaskExtensionsTest.cs +++ b/src/Testing/test/TaskExtensionsTest.cs @@ -21,13 +21,13 @@ public async Task TimeoutAfterTest() [Fact] public async Task TimeoutAfter_DoesNotThrowWhenCompleted() { - await Task.FromResult(true).TimeoutAfter(TimeSpan.FromMilliseconds(50)); + await Task.FromResult(true).TimeoutAfter(TimeSpan.FromMilliseconds(30000)); } [Fact] public async Task TimeoutAfter_DoesNotThrow_WithinTimeoutPeriod() { - await Task.Delay(10).TimeoutAfter(TimeSpan.FromMilliseconds(50)); + await Task.Delay(10).TimeoutAfter(TimeSpan.FromMilliseconds(30000)); } [Fact] @@ -60,5 +60,31 @@ public async Task DefaultTimeout_DoesNotThrowWhenCompleted() await Task.FromResult(true).DefaultTimeout(); } + [Theory] + [InlineData("This is my custom timeout exception message.")] + public async Task Task_TimeoutAfter_DoesNotRethrow_NonWaitAsyncTimeouts(string message) + { + async Task ExpectedTimeout() + { + await Task.Delay(10); + throw new TimeoutException(message); + } + var exception = await Assert.ThrowsAsync(() => ExpectedTimeout().TimeoutAfter(TimeSpan.FromMilliseconds(30000))); + Assert.Equal(message, exception.Message); + } + + [Theory] + [InlineData("This is my custom timeout exception message.")] + public async Task TaskT_TimeoutAfter_DoesNotRethrow_NonWaitAsyncTimeouts(string message) + { + async Task ExpectedTimeout() + { + await Task.Delay(10); + throw new TimeoutException(message); + } + var exception = await Assert.ThrowsAsync(() => ExpectedTimeout().TimeoutAfter(TimeSpan.FromMilliseconds(30000))); + Assert.Equal(message, exception.Message); + } + } } From f5b74e70be40dbf0f3f61f56bed000b578c1fa53 Mon Sep 17 00:00:00 2001 From: Laszlo Deak Date: Fri, 16 Apr 2021 19:00:34 +0200 Subject: [PATCH 7/7] Moving TaskExtensions to to Shared folder --- src/{Testing/src => Shared}/TaskExtensions.cs | 20 ++++++++++++++----- .../testassets/Tests.Utils/TestClient.cs | 4 ++++ .../src/HubLifetimeManagerTestBase.cs | 2 +- ...NetCore.SignalR.Specification.Tests.csproj | 2 +- .../src/ScaleoutHubLifetimeManagerTests.cs | 2 +- .../src/Microsoft.AspNetCore.Testing.csproj | 2 ++ .../xunit/FrameworkSkipConditionAttribute.cs | 4 ++-- 7 files changed, 26 insertions(+), 10 deletions(-) rename src/{Testing/src => Shared}/TaskExtensions.cs (93%) diff --git a/src/Testing/src/TaskExtensions.cs b/src/Shared/TaskExtensions.cs similarity index 93% rename from src/Testing/src/TaskExtensions.cs rename to src/Shared/TaskExtensions.cs index e07d1fbaa865..4194f51b8935 100644 --- a/src/Testing/src/TaskExtensions.cs +++ b/src/Shared/TaskExtensions.cs @@ -8,9 +8,19 @@ using System.Threading; using System.Threading.Tasks; +#if AspNetCoreTesting namespace Microsoft.AspNetCore.Testing +#else +namespace System.Threading.Tasks.Extensions +#endif { - public static class TaskExtensions + +#if AspNetCoreTesting + public +#else + internal +#endif + static class TaskExtensions { private const int DefaultTimeoutDuration = 30 * 1000; @@ -68,12 +78,12 @@ public static async Task TimeoutAfter(this Task task, TimeSpan timeout, { return await task; } -#if NET6_0 +#if NET6_0_OR_GREATER try { return await task.WaitAsync(timeout); } - catch (TimeoutException ex) when (ex.Source == nameof(Microsoft.AspNetCore.Testing)) + catch (TimeoutException ex) when (ex.Source == typeof(TaskExtensions).Namespace) { throw new TimeoutException(CreateMessage(timeout, filePath, lineNumber)); } @@ -103,12 +113,12 @@ public static async Task TimeoutAfter(this Task task, TimeSpan timeout, await task; return; } -#if NET6_0 +#if NET6_0_OR_GREATER try { await task.WaitAsync(timeout); } - catch (TimeoutException ex) when (ex.Source == nameof(Microsoft.AspNetCore.Testing)) + catch (TimeoutException ex) when (ex.Source == typeof(TaskExtensions).Namespace) { throw new TimeoutException(CreateMessage(timeout, filePath, lineNumber)); } diff --git a/src/SignalR/common/testassets/Tests.Utils/TestClient.cs b/src/SignalR/common/testassets/Tests.Utils/TestClient.cs index f899b8f5383a..d6ec7f756b32 100644 --- a/src/SignalR/common/testassets/Tests.Utils/TestClient.cs +++ b/src/SignalR/common/testassets/Tests.Utils/TestClient.cs @@ -12,7 +12,11 @@ using Microsoft.AspNetCore.Connections.Features; using Microsoft.AspNetCore.Internal; using Microsoft.AspNetCore.SignalR.Protocol; +#if TESTUTILS using Microsoft.AspNetCore.Testing; +#else +using System.Threading.Tasks.Extensions; +#endif namespace Microsoft.AspNetCore.SignalR.Tests { diff --git a/src/SignalR/server/Specification.Tests/src/HubLifetimeManagerTestBase.cs b/src/SignalR/server/Specification.Tests/src/HubLifetimeManagerTestBase.cs index 942608bf0a64..10699dd8f7ec 100644 --- a/src/SignalR/server/Specification.Tests/src/HubLifetimeManagerTestBase.cs +++ b/src/SignalR/server/Specification.Tests/src/HubLifetimeManagerTestBase.cs @@ -3,9 +3,9 @@ using System; using System.Threading.Tasks; +using System.Threading.Tasks.Extensions; using Microsoft.AspNetCore.SignalR.Protocol; using Microsoft.AspNetCore.SignalR.Tests; -using Microsoft.AspNetCore.Testing; using Xunit; namespace Microsoft.AspNetCore.SignalR.Specification.Tests diff --git a/src/SignalR/server/Specification.Tests/src/Microsoft.AspNetCore.SignalR.Specification.Tests.csproj b/src/SignalR/server/Specification.Tests/src/Microsoft.AspNetCore.SignalR.Specification.Tests.csproj index e8d99995c902..0d6f0652fddb 100644 --- a/src/SignalR/server/Specification.Tests/src/Microsoft.AspNetCore.SignalR.Specification.Tests.csproj +++ b/src/SignalR/server/Specification.Tests/src/Microsoft.AspNetCore.SignalR.Specification.Tests.csproj @@ -12,6 +12,7 @@ + @@ -20,7 +21,6 @@ - diff --git a/src/SignalR/server/Specification.Tests/src/ScaleoutHubLifetimeManagerTests.cs b/src/SignalR/server/Specification.Tests/src/ScaleoutHubLifetimeManagerTests.cs index fecb05c903c8..d4e7f224892b 100644 --- a/src/SignalR/server/Specification.Tests/src/ScaleoutHubLifetimeManagerTests.cs +++ b/src/SignalR/server/Specification.Tests/src/ScaleoutHubLifetimeManagerTests.cs @@ -2,9 +2,9 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Threading.Tasks; +using System.Threading.Tasks.Extensions; using Microsoft.AspNetCore.SignalR.Protocol; using Microsoft.AspNetCore.SignalR.Tests; -using Microsoft.AspNetCore.Testing; using Xunit; namespace Microsoft.AspNetCore.SignalR.Specification.Tests diff --git a/src/Testing/src/Microsoft.AspNetCore.Testing.csproj b/src/Testing/src/Microsoft.AspNetCore.Testing.csproj index b925c7649b30..868fef8129e8 100644 --- a/src/Testing/src/Microsoft.AspNetCore.Testing.csproj +++ b/src/Testing/src/Microsoft.AspNetCore.Testing.csproj @@ -3,6 +3,7 @@ Various helpers for writing tests that use ASP.NET Core. $(DefaultNetCoreTargetFramework);$(DefaultNetFxTargetFramework);netstandard2.0 + $(DefineConstants);AspNetCoreTesting $(NoWarn);CS1591 true @@ -55,6 +56,7 @@ True contentFiles\cs\netstandard2.0\ + diff --git a/src/Testing/src/xunit/FrameworkSkipConditionAttribute.cs b/src/Testing/src/xunit/FrameworkSkipConditionAttribute.cs index df97823d7bdd..ccf5607daf67 100644 --- a/src/Testing/src/xunit/FrameworkSkipConditionAttribute.cs +++ b/src/Testing/src/xunit/FrameworkSkipConditionAttribute.cs @@ -43,7 +43,7 @@ private static bool CanRunOnThisFramework(RuntimeFrameworks excludedFrameworks) { return false; } -#elif NETSTANDARD2_0 || NET6_0 +#elif NETSTANDARD2_0 || NET6_0_OR_GREATER if (excludedFrameworks.HasFlag(RuntimeFrameworks.CoreCLR)) { return false; @@ -54,4 +54,4 @@ private static bool CanRunOnThisFramework(RuntimeFrameworks excludedFrameworks) return true; } } -} \ No newline at end of file +}