public async Task SendGroupAsyncWritesToAllConnectionsInGroupOutput(bool fromManager) { var hubProxy = new HubProxy <MyHub>(_fixture.TestCluster.Client); using (var manager = CreateNewHubLifetimeManager <MyHub>()) using (var client1 = new TestClient()) using (var client2 = new TestClient()) { var connection1 = HubConnectionContextUtils.Create(client1.Connection); var connection2 = HubConnectionContextUtils.Create(client2.Connection); await manager.OnConnectedAsync(connection1).OrTimeout(); await manager.OnConnectedAsync(connection2).OrTimeout(); if (fromManager) { await manager.AddToGroupAsync(connection1.ConnectionId, "group").OrTimeout(); await manager.SendGroupAsync("group", "Hello", new object[] { "World" }).OrTimeout(); } else { await hubProxy.AddToGroupAsync(connection1.ConnectionId, "group").OrTimeout(); await hubProxy.SendGroupAsync("group", "Hello", "World").OrTimeout(); } await AssertMessageAsync(client1); Assert.Null(client2.TryRead()); } }
public async Task AddGroupAsyncForLocalConnectionAlreadyInGroupDoesNothing(bool fromManager) { var hubProxy = new HubProxy <MyHub>(_fixture.TestCluster.Client); using (var manager = CreateNewHubLifetimeManager <MyHub>()) using (var client = new TestClient()) { var connection = HubConnectionContextUtils.Create(client.Connection); await manager.OnConnectedAsync(connection).OrTimeout(); await manager.AddToGroupAsync(connection.ConnectionId, "group").OrTimeout(); await manager.AddToGroupAsync(connection.ConnectionId, "group").OrTimeout(); if (fromManager) { await manager.SendGroupAsync("group", "Hello", new object[] { "World" }).OrTimeout(); } else { await hubProxy.SendGroupAsync("group", "Hello", "World").OrTimeout(); } await AssertMessageAsync(client); Assert.Null(client.TryRead()); // ADDED: GetConnectionIdsAsync //var result = await hubProxy.GetConnectionIdsFromGroupAsync("group").OrTimeout(); //Assert.Equal(1, result.Count); } }
public async Task StillSubscribedToGroupAfterOneOfMultipleConnectionsAssociatedWithGroupDisconnects(bool fromManager) { var hubProxy = new HubProxy <MyHub>(_fixture.TestCluster.Client); using (var manager = CreateNewHubLifetimeManager <MyHub>()) using (var client1 = new TestClient()) using (var client2 = new TestClient()) { var connection1 = HubConnectionContextUtils.Create(client1.Connection); var connection2 = HubConnectionContextUtils.Create(client2.Connection); await manager.OnConnectedAsync(connection1).OrTimeout(); await manager.OnConnectedAsync(connection2).OrTimeout(); if (fromManager) { await manager.AddToGroupAsync(connection2.ConnectionId, "group"); await manager.AddToGroupAsync(connection1.ConnectionId, "group"); } else { await hubProxy.AddToGroupAsync(connection1.ConnectionId, "group"); await hubProxy.AddToGroupAsync(connection2.ConnectionId, "group"); } // Disconnect one connection for the group await manager.OnDisconnectedAsync(connection1).OrTimeout(); if (fromManager) { await manager.SendGroupAsync("group", "Hello", new object[] { "World" }).OrTimeout(); } else { await hubProxy.SendGroupAsync("group", "Hello", "World").OrTimeout(); } await AssertMessageAsync(client2); } }
public async Task WritingToGroupWithOneConnectionFailingSecondConnectionStillReceivesMessage(bool fromManager) { var hubProxy = new HubProxy <MyHub>(_fixture.TestCluster.Client); using (var manager = CreateNewHubLifetimeManager <MyHub>()) using (var client1 = new TestClient()) using (var client2 = new TestClient()) { // Force an exception when writing to connection var connectionMock = HubConnectionContextUtils.CreateMock(client1.Connection); var connection1 = connectionMock; var connection2 = HubConnectionContextUtils.Create(client2.Connection); await manager.OnConnectedAsync(connection1).OrTimeout(); await manager.AddToGroupAsync(connection1.ConnectionId, "group"); await manager.OnConnectedAsync(connection2).OrTimeout(); await manager.AddToGroupAsync(connection2.ConnectionId, "group"); if (fromManager) { await manager.SendGroupAsync("group", "Hello", new object[] { "World" }).OrTimeout(); } else { await hubProxy.SendGroupAsync("group", "Hello", "World").OrTimeout(); } // 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 AssertMessageAsync(client2); } }
public async Task DisconnectConnectionRemovesConnectionFromGroup(bool fromManager) { var hubProxy = new HubProxy <MyHub>(_fixture.TestCluster.Client); using (var manager = CreateNewHubLifetimeManager <MyHub>()) using (var client = new TestClient()) { var connection = HubConnectionContextUtils.Create(client.Connection); await manager.OnConnectedAsync(connection).OrTimeout(); if (fromManager) { await manager.AddToGroupAsync(connection.ConnectionId, "group").OrTimeout(); } else { await hubProxy.AddToGroupAsync(connection.ConnectionId, "group").OrTimeout(); } await manager.OnDisconnectedAsync(connection).OrTimeout(); if (fromManager) { await manager.SendGroupAsync("group", "Hello", new object[] { "World" }).OrTimeout(); } else { await hubProxy.SendGroupAsync("group", "Hello", new object[] { "World" }).OrTimeout(); } Assert.Null(client.TryRead()); // ADDED: GetConnectionIdsAsync //var result = await hubProxy.GetGroupNamesAsync("group").OrTimeout(); //Assert.Equal(0, result.Count); } }