From 5adeaddfe659b121a1f3bb920367d09b349b9752 Mon Sep 17 00:00:00 2001 From: Brennan Date: Thu, 8 Aug 2019 14:04:43 -0700 Subject: [PATCH] Test ValueTask hub methods (#12898) --- .../HubConnectionHandlerTestUtils/Hubs.cs | 10 ++++ .../SignalR/test/HubConnectionHandlerTests.cs | 51 +++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/src/SignalR/server/SignalR/test/HubConnectionHandlerTestUtils/Hubs.cs b/src/SignalR/server/SignalR/test/HubConnectionHandlerTestUtils/Hubs.cs index ad8399f41c..d8c1292d5a 100644 --- a/src/SignalR/server/SignalR/test/HubConnectionHandlerTestUtils/Hubs.cs +++ b/src/SignalR/server/SignalR/test/HubConnectionHandlerTestUtils/Hubs.cs @@ -91,6 +91,16 @@ namespace Microsoft.AspNetCore.SignalR.Tests return 43; } + public ValueTask ValueTaskMethod() + { + return new ValueTask(Task.CompletedTask); + } + + public ValueTask ValueTaskValueMethod() + { + return new ValueTask(43); + } + [HubMethodName("RenamedMethod")] public int ATestMethodThatIsRenamedByTheAttribute() { diff --git a/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs b/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs index 8d9d9607e6..389e760f6c 100644 --- a/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs +++ b/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs @@ -814,6 +814,57 @@ namespace Microsoft.AspNetCore.SignalR.Tests } } + [Fact] + public async Task HubMethodCanReturnValueFromValueTask() + { + using (StartVerifiableLog()) + { + var serviceProvider = HubConnectionHandlerTestUtils.CreateServiceProvider(null, LoggerFactory); + + var connectionHandler = serviceProvider.GetService>(); + + using (var client = new TestClient()) + { + var connectionHandlerTask = await client.ConnectAsync(connectionHandler); + + var result = (await client.InvokeAsync(nameof(MethodHub.ValueTaskValueMethod)).OrTimeout()).Result; + + // json serializer makes this a long + Assert.Equal(43L, result); + + // kill the connection + client.Dispose(); + + await connectionHandlerTask.OrTimeout(); + } + } + } + + [Fact] + public async Task HubMethodCanReturnValueTask() + { + using (StartVerifiableLog()) + { + var serviceProvider = HubConnectionHandlerTestUtils.CreateServiceProvider(null, LoggerFactory); + + var connectionHandler = serviceProvider.GetService>(); + + using (var client = new TestClient()) + { + var connectionHandlerTask = await client.ConnectAsync(connectionHandler); + + var result = (await client.InvokeAsync(nameof(MethodHub.ValueTaskMethod)).OrTimeout()).Result; + + Assert.Null(result); + + // kill the connection + client.Dispose(); + + await connectionHandlerTask.OrTimeout(); + } + } + } + [Theory] [MemberData(nameof(HubTypes))] public async Task HubMethodsAreCaseInsensitive(Type hubType)