From bd01c67e88f1c7453f97e1f4a47689c3cd9fd3c9 Mon Sep 17 00:00:00 2001 From: Brennan Date: Thu, 8 Aug 2019 14:04:16 -0700 Subject: [PATCH] Add test for supported scenario (#12931) --- .../HubConnectionHandlerTestUtils/Hubs.cs | 28 ++++++++++++++++++ .../SignalR/test/HubConnectionHandlerTests.cs | 29 +++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/src/SignalR/server/SignalR/test/HubConnectionHandlerTestUtils/Hubs.cs b/src/SignalR/server/SignalR/test/HubConnectionHandlerTestUtils/Hubs.cs index 89c7f77498..ad8399f41c 100644 --- a/src/SignalR/server/SignalR/test/HubConnectionHandlerTestUtils/Hubs.cs +++ b/src/SignalR/server/SignalR/test/HubConnectionHandlerTestUtils/Hubs.cs @@ -1050,4 +1050,32 @@ namespace Microsoft.AspNetCore.SignalR.Tests public bool TokenStateInDisconnected { get; set; } } + + public class CallerServiceHub : Hub + { + private readonly CallerService _service; + + public CallerServiceHub(CallerService service) + { + _service = service; + } + + public override Task OnConnectedAsync() + { + _service.SetCaller(Clients.Caller); + var tcs = (TaskCompletionSource)Context.Items["ConnectedTask"]; + tcs?.TrySetResult(true); + return base.OnConnectedAsync(); + } + } + + public class CallerService + { + public IClientProxy Caller { get; private set; } + + public void SetCaller(IClientProxy caller) + { + Caller = caller; + } + } } diff --git a/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs b/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs index f2eb574c9d..8d9d9607e6 100644 --- a/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs +++ b/src/SignalR/server/SignalR/test/HubConnectionHandlerTests.cs @@ -3625,6 +3625,35 @@ namespace Microsoft.AspNetCore.SignalR.Tests } } + [Fact] + public async Task ClientsCallerPropertyCanBeUsedOutsideOfHub() + { + CallerService callerService = new CallerService(); + var serviceProvider = HubConnectionHandlerTestUtils.CreateServiceProvider(services => + { + services.AddSingleton(callerService); + }); + var connectionHandler = serviceProvider.GetService>(); + + using (StartVerifiableLog()) + { + using (var client = new TestClient()) + { + var connectionHandlerTask = await client.ConnectAsync(connectionHandler); + + // Wait for a connection, or for the endpoint to fail. + await client.Connected.OrThrowIfOtherFails(connectionHandlerTask).OrTimeout(); + + await callerService.Caller.SendAsync("Echo", "message").OrTimeout(); + + var message = Assert.IsType(await client.ReadAsync().OrTimeout()); + + Assert.Equal("Echo", message.Target); + Assert.Equal("message", message.Arguments[0]); + } + } + } + private class CustomHubActivator : IHubActivator where THub : Hub { public int ReleaseCount;