public async Task ServiceConnectionDispatchTest() { using (StartVerifiableLog(out var loggerFactory, LogLevel.Debug)) { using (var proxy = new ServiceConnectionProxy(_clientConnectionManager, loggerFactory: loggerFactory)) { // start the server connection await proxy.StartServiceAsync().OrTimeout(); var clientConnection = Guid.NewGuid().ToString("N"); // Application layer sends OpenConnectionMessage var openConnectionMessage = new OpenConnectionMessage(clientConnection, new Claim[0], null, "?transport=webSockets"); await proxy.WriteMessageAsync(new OpenConnectionMessage(clientConnection, new Claim[0])); await proxy.WaitForClientConnectAsync(clientConnection).OrTimeout(); // TODO: Check response when integrated with ServiceMessageBus await proxy.WriteMessageAsync(new ConnectionDataMessage(clientConnection, GetPayload("Hello World"))); await proxy.WaitForApplicationMessageAsync(clientConnection).OrTimeout(); await proxy.WriteMessageAsync(new CloseConnectionMessage(clientConnection)); await proxy.WaitForClientDisconnectAsync(clientConnection).OrTimeout(); } } }
public async Task ServiceConnectionDispatchGroupMessagesTest() { using (StartVerifiableLog(out var loggerFactory, LogLevel.Debug)) { var hubConfig = new HubConfiguration(); hubConfig.Resolver = new DefaultDependencyResolver(); var scm = new TestServiceConnectionManager(); hubConfig.Resolver.Register(typeof(IServiceConnectionManager), () => scm); var ccm = new ClientConnectionManager(hubConfig); hubConfig.Resolver.Register(typeof(IClientConnectionManager), () => ccm); DispatcherHelper.PrepareAndGetDispatcher(new TestAppBuilder(), hubConfig, new ServiceOptions { ConnectionString = ConnectionString }, "app1", loggerFactory); using (var proxy = new ServiceConnectionProxy(ccm, loggerFactory: loggerFactory)) { // start the server connection await proxy.StartServiceAsync().OrTimeout(); var clientConnection = Guid.NewGuid().ToString("N"); // Application layer sends OpenConnectionMessage var openConnectionMessage = new OpenConnectionMessage(clientConnection, new Claim[0], null, "?transport=webSockets&connectionToken=conn1"); await proxy.WriteMessageAsync(openConnectionMessage); await proxy.WaitForClientConnectAsync(clientConnection).OrTimeout(); // group message goes into the manager // make sure the tcs is called before writing message var jgTask = scm.WaitForTransportOutputMessageAsync(typeof(JoinGroupMessage)).OrTimeout(); var gbTask = scm.WaitForTransportOutputMessageAsync(typeof(GroupBroadcastDataMessage)).OrTimeout(); await proxy.WriteMessageAsync(new ConnectionDataMessage(clientConnection, Encoding.UTF8.GetBytes("{\"H\":\"chat\",\"M\":\"JoinGroup\",\"A\":[\"user1\",\"message1\"],\"I\":1}"))); await jgTask; await gbTask; var lgTask = scm.WaitForTransportOutputMessageAsync(typeof(LeaveGroupMessage)).OrTimeout(); gbTask = scm.WaitForTransportOutputMessageAsync(typeof(GroupBroadcastDataMessage)).OrTimeout(); await proxy.WriteMessageAsync(new ConnectionDataMessage(clientConnection, Encoding.UTF8.GetBytes("{\"H\":\"chat\",\"M\":\"LeaveGroup\",\"A\":[\"user1\",\"message1\"],\"I\":1}"))); await lgTask; await gbTask; var dTask = proxy.WaitForClientDisconnectAsync(clientConnection).OrTimeout(); await proxy.WriteMessageAsync(new CloseConnectionMessage(clientConnection)); await dTask; } } }
public async Task ServiceConnectionDispatchTest() { int count = 0; using (StartVerifiableLog(out var loggerFactory, LogLevel.Debug)) { using (var proxy = new ServiceConnectionProxy(_clientConnectionManager, loggerFactory: loggerFactory)) { // start the server connection await proxy.StartServiceAsync().OrTimeout(); var clientConnection = Guid.NewGuid().ToString("N"); // Application layer sends OpenConnectionMessage var openConnectionMessage = new OpenConnectionMessage(clientConnection, new Claim[0], null, "?transport=webSockets"); var task = proxy.WaitForClientConnectAsync(clientConnection).OrTimeout(); await proxy.WriteMessageAsync(openConnectionMessage); await task; while (count < 1000) { task = proxy.WaitForApplicationMessageAsync(clientConnection).OrTimeout(); await proxy.WriteMessageAsync(new ConnectionDataMessage(clientConnection, GetPayload("Hello World"))); await task; count++; } task = proxy.WaitForClientDisconnectAsync(clientConnection).OrTimeout(); await proxy.WriteMessageAsync(new CloseConnectionMessage(clientConnection)); await task; // Validate in transport for 1000 data messages. _clientConnectionManager.CurrentTransports.TryGetValue(clientConnection, out var transport); Assert.NotNull(transport); await transport.WaitOnDisconnected().OrTimeout(); Assert.Equal(transport.MessageCount, count); } } }