private void SendOfflineBroadcastResponseMessage(string channelId, object broadcastMessage, int numberOfClients, int numberOfMessages, int openConnectionTimeout, int allMessagesReceivedTimeout) { ThreadPool.SetMinThreads(50, 2); ClientMockFarm aClientFarm = new ClientMockFarm(MessagingSystem, channelId, numberOfClients); ServiceMock aService = new ServiceMock(MessagingSystem, channelId); try { aService.InputChannel.StartListening(); // Send broadcasts. for (int i = 0; i < numberOfMessages; ++i) { aService.InputChannel.SendResponseMessage("*", broadcastMessage); } Thread.Sleep(500); aClientFarm.OpenConnectionsAsync(); aClientFarm.WaitUntilAllConnectionsAreOpen(openConnectionTimeout); aService.WaitUntilResponseReceiversConnectNotified(numberOfClients, openConnectionTimeout); Assert.AreEqual(aClientFarm.Clients.Count(), aService.ConnectedResponseReceivers.Count()); foreach (ClientMock aClient in aClientFarm.Clients) { Assert.IsTrue(aService.ConnectedResponseReceivers.Any(x => x.ResponseReceiverId == aClient.OutputChannel.ResponseReceiverId)); } PerformanceTimer aStopWatch = new PerformanceTimer(); aStopWatch.Start(); aClientFarm.WaitUntilAllResponsesAreReceived(numberOfMessages, allMessagesReceivedTimeout); aStopWatch.Stop(); foreach (DuplexChannelMessageEventArgs aResponseMessage in aClientFarm.ReceivedResponses) { Assert.AreEqual(broadcastMessage, aResponseMessage.Message); } } finally { EneterTrace.Debug("CLEANING AFTER TEST"); aClientFarm.CloseAllConnections(); aService.InputChannel.StopListening(); //EneterTrace.StopProfiler(); Thread.Sleep(500); } }
public void A13_TimeoutedResponseReceiver() { ClientMock aClient = new ClientMock(MessagingSystem, ChannelId); ServiceMock aService = new ServiceMock(MessagingSystem, ChannelId); try { aService.InputChannel.StartListening(); // Open the connection. aClient.OutputChannel.OpenConnection(); Assert.IsTrue(aClient.OutputChannel.IsConnected); // handling open connection on the client side. EneterTrace.Info("1"); aClient.WaitUntilConnectionOpenIsNotified(2000); Assert.AreEqual(aClient.OutputChannel.ChannelId, aClient.NotifiedOpenConnection.ChannelId); Assert.AreEqual(aClient.OutputChannel.ResponseReceiverId, aClient.NotifiedOpenConnection.ResponseReceiverId); // handling open connection on the service side. EneterTrace.Info("2"); aService.WaitUntilResponseReceiversConnectNotified(1, 1000); Assert.AreEqual(1, aService.ConnectedResponseReceivers.Count()); Assert.AreEqual(aClient.OutputChannel.ResponseReceiverId, aService.ConnectedResponseReceivers[0].ResponseReceiverId); aClient.OutputChannel.CloseConnection(); Assert.IsFalse(aClient.OutputChannel.IsConnected); // Service will disconnect the response receiver when the offline timout is exceeded. EneterTrace.Info("3"); aService.WaitUntilAllResponseReceiversDisconnectNotified(2000); Assert.AreEqual(1, aService.DisconnectedResponseReceivers.Count()); Assert.AreEqual(aClient.OutputChannel.ResponseReceiverId, aService.DisconnectedResponseReceivers.First().ResponseReceiverId); } finally { EneterTrace.Debug("CLEANING AFTER TEST"); aClient.OutputChannel.CloseConnection(); aService.InputChannel.StopListening(); // Wait for traces. Thread.Sleep(100); } }
private void SendOfflineMessageReceiveResponse(string channelId, object message, object responseMessage, int numberOfClients, int numberOfMessages, int openConnectionTimeout, int allMessagesReceivedTimeout) { ThreadPool.SetMinThreads(100, 2); ClientMockFarm aClientFarm = new ClientMockFarm(MessagingSystem, channelId, numberOfClients); ServiceMock aService = new ServiceMock(MessagingSystem, channelId); aService.DoOnMessageReceived_SendResponse(responseMessage); try { //EneterTrace.StartProfiler(); aClientFarm.OpenConnectionsAsync(); Thread.Sleep(500); aService.InputChannel.StartListening(); aClientFarm.WaitUntilAllConnectionsAreOpen(openConnectionTimeout); aService.WaitUntilResponseReceiversConnectNotified(numberOfClients, openConnectionTimeout); Assert.AreEqual(aClientFarm.Clients.Count(), aService.ConnectedResponseReceivers.Count()); foreach (ClientMock aClient in aClientFarm.Clients) { Assert.IsTrue(aService.ConnectedResponseReceivers.Any(x => x.ResponseReceiverId == aClient.OutputChannel.ResponseReceiverId)); } PerformanceTimer aStopWatch = new PerformanceTimer(); aStopWatch.Start(); aClientFarm.SendMessageAsync(message, numberOfMessages); aClientFarm.WaitUntilAllResponsesAreReceived(numberOfMessages, allMessagesReceivedTimeout); aStopWatch.Stop(); // Wait little bit more for case there is an error that more messages are sent. Thread.Sleep(500); Assert.AreEqual(numberOfMessages * numberOfClients, aService.ReceivedMessages.Count()); Assert.AreEqual(numberOfMessages * numberOfClients, aClientFarm.ReceivedResponses.Count()); foreach (DuplexChannelMessageEventArgs aMessage in aService.ReceivedMessages) { Assert.AreEqual(message, aMessage.Message); } foreach (DuplexChannelMessageEventArgs aResponseMessage in aClientFarm.ReceivedResponses) { Assert.AreEqual(responseMessage, aResponseMessage.Message); } } finally { EneterTrace.Debug("CLEANING AFTER TEST"); aClientFarm.CloseAllConnections(); aService.InputChannel.StopListening(); //EneterTrace.StopProfiler(); Thread.Sleep(200); } }