public void client_should_be_notified_when_disconnected_from_server() { // Given int port = new PortSetup(logger).GetNextPort(); Server server = Bootstrapper.CreateServer(); server.ListenForConnectionsInANewThread(port); logger.Write <IntegrationTest>("Connecting client 1"); var client1 = Bootstrapper.CreateClient(logger); bool disconnected = false; client1.OnDisconnected += () => { disconnected = true; }; AutoResetEvent client1Connected = new AutoResetEvent(false); server.OnClientConnected += () => client1Connected.Set(); client1.Connect(Localhost, port); client1Connected.WaitAndThrowErrorIfNoSignalIsSet(DefaultWaitTIme, "Client 1 never connected"); // When server.Shutdown(); Thread.Sleep(300); // Then Assert.True(disconnected); }
public void Can_stop_listening_for_connections_after_listening_has_started() { // Given int port = new PortSetup(_logger).GetNextPort(); var connectionListener = new ConnectionListener(_logger); connectionListener.ListenForConnectionsInANewThread(port); // When _logger.Write <ConnectionListenerTest>("Stopping listening."); connectionListener.StopListening(); // Then no error should occur }
public void Starting_and_stopping_and_starting_to_listen_for_connections_should_not_throw_any_errors() { // Given int port = new PortSetup(_logger).GetNextPort(); var connectionListener = new ConnectionListener(_logger); // When connectionListener.ListenForConnectionsInANewThread(port); connectionListener.StopListening(); connectionListener.ListenForConnectionsInANewThread(port); connectionListener.StopListening(); // Then no error should occur }
public void Should_distribute_message_to_other_connected_client() { // Given int port = new PortSetup(logger).GetNextPort(); Server server = Bootstrapper.CreateServer(); server.ListenForConnectionsInANewThread(port); logger.Write <IntegrationTest>("Connecting client 1"); var client1 = Bootstrapper.CreateClient(logger); AutoResetEvent client1Connected = new AutoResetEvent(false); server.OnClientConnected += () => client1Connected.Set(); client1.Connect(Localhost, port); client1Connected.WaitAndThrowErrorIfNoSignalIsSet(DefaultWaitTIme, "Client 1 never connected"); logger.Write <IntegrationTest>("Connecting client 2"); var client2 = Bootstrapper.CreateClient(logger); AutoResetEvent client2Connected = new AutoResetEvent(false); server.OnClientConnected += () => client2Connected.Set(); client2.Connect(Localhost, port); client2Connected.WaitAndThrowErrorIfNoSignalIsSet(DefaultWaitTIme, "Client 2 never connected"); var client2MessageReceived = new AutoResetEvent(false); var msgFromNetwork = ""; client2.OnMessageReceived += (msg) => { client2MessageReceived.Set(); msgFromNetwork = msg; }; // When logger.Write <IntegrationTest>("Sending message."); client1.SendMessage("Hey there"); client2MessageReceived.WaitAndThrowErrorIfNoSignalIsSet(DefaultWaitTIme, "Never received message from client"); // Then Assert.Equal("Hey there", msgFromNetwork); // Finally client2.Disconnect(); client1.Disconnect(); server.Shutdown(); logger.Write <IntegrationTest>("Integration test done."); }
public void Listening_for_connections_twice_should_throw_an_error() { // Given int port = new PortSetup(_logger).GetNextPort(); var connectionListener = new ConnectionListener(_logger); connectionListener.ListenForConnectionsInANewThread(port); // Then Assert.Throws <InvalidOperationException>(() => { // When connectionListener.ListenForConnectionsInANewThread(port); }); // Finally connectionListener.StopListening(); }
public void Should_distribute_message_only_to_clients_that_have_subscribed_to_same_channel() { // Given int port = new PortSetup(logger).GetNextPort(); Logger serverLogger = LogSetup.CreateLogger("Server_"); serverLogger.MinimumInfoLevelBeforeWrite = InfoLevel.Trace; logger.MinimumInfoLevelBeforeWrite = InfoLevel.Trace; Server server = Bootstrapper.CreateServer(serverLogger); server.ListenForConnectionsInANewThread(port); logger.Write <IntegrationTest>("Connecting client 1"); var client1 = Bootstrapper.CreateClient(logger); client1.Connect(Localhost, port); var client1SubscribedEvent = new AutoResetEvent(false); client1.OnSubscribed += (theEvent) => { logger.Write <IntegrationTest>("Client 1 received subscribeevent: " + theEvent); client1SubscribedEvent.Set(); }; client1.SubscribeTo("SkeletonEvent"); logger.Write <IntegrationTest>("Connecting client 2"); var client2 = Bootstrapper.CreateClient(logger); client2.Connect(Localhost, port); var client2SubscribedEvent = new AutoResetEvent(false); client2.OnSubscribed += (theEvent) => { logger.Write <IntegrationTest>("Client 2 received subscribeevent: " + theEvent); client2SubscribedEvent.Set(); }; client2.SubscribeTo("SkeletonEvent"); logger.Write <IntegrationTest>("Connecting client 3"); var client3 = Bootstrapper.CreateClient(logger); client3.Connect(Localhost, port); var client3SubscribedEvent = new AutoResetEvent(false); client3.OnSubscribed += (theEvent) => { logger.Write <IntegrationTest>("Client 3 received subscribeevent: " + theEvent); client3SubscribedEvent.Set(); }; client3.SubscribeTo("SkeletonEvent"); logger.Write <IntegrationTest>("Connecting client 4"); var client4 = Bootstrapper.CreateClient(logger); client4.Connect(Localhost, port); var client4SubscribedEvent = new AutoResetEvent(false); client4.OnSubscribed += (theEvent) => { logger.Write <IntegrationTest>("Client 4 received subscribeevent: " + theEvent); client4SubscribedEvent.Set(); }; client4.SubscribeTo("CowEvent"); logger.Write <IntegrationTest>("Connecting client 5"); var client5 = Bootstrapper.CreateClient(logger); client5.Connect(Localhost, port); var client5SubscribedEvent = new AutoResetEvent(false); client5.OnSubscribed += (theEvent) => { logger.Write <IntegrationTest>("Client 5 received subscribeevent: " + theEvent); client5SubscribedEvent.Set(); }; client5.SubscribeTo("CowEvent"); var client2MessageReceived = new AutoResetEvent(false); client2.OnMessageReceived += (msg) => { logger.Write <IntegrationTest>("Client 2 received message: " + msg); client2MessageReceived.Set(); Assert.Equal("Boo!", msg); }; var client3MessageReceived = new AutoResetEvent(false); client3.OnMessageReceived += (msg) => { logger.Write <IntegrationTest>("Client 3 received message: " + msg); client3MessageReceived.Set(); Assert.Equal("Boo!", msg); }; var client5MessageReceived = new AutoResetEvent(false); client5.OnMessageReceived += (msg) => { logger.Write <IntegrationTest>("Client 5 received message: " + msg); client5MessageReceived.Set(); Assert.Equal("Moo!", msg); }; try { client1SubscribedEvent.WaitAndThrowErrorIfNoSignalIsSet(DefaultWaitTIme, "Client 1 never received SubscribedEvent"); client2SubscribedEvent.WaitAndThrowErrorIfNoSignalIsSet(DefaultWaitTIme, "Client 2 never received SubscribedEvent"); client3SubscribedEvent.WaitAndThrowErrorIfNoSignalIsSet(DefaultWaitTIme, "Client 3 never received SubscribedEvent"); client4SubscribedEvent.WaitAndThrowErrorIfNoSignalIsSet(DefaultWaitTIme, "Client 4 never received SubscribedEvent"); client5SubscribedEvent.WaitAndThrowErrorIfNoSignalIsSet(DefaultWaitTIme, "Client 5 never received SubscribedEvent"); } catch (ApplicationException e) { logger.Dispose(); serverLogger.Dispose(); throw e; } // When logger.Write <IntegrationTest>("Sending message from client 1."); client1.SendMessage("[SkeletonEvent] Boo!"); logger.Write <IntegrationTest>("Sending message from client 4."); client4.SendMessage("[CowEvent] Moo!"); // Then try { client2MessageReceived.WaitAndThrowErrorIfNoSignalIsSet(DefaultWaitTIme, "Never received message from client 1"); client3MessageReceived.WaitAndThrowErrorIfNoSignalIsSet(DefaultWaitTIme, "Never received message from client 1"); client5MessageReceived.WaitAndThrowErrorIfNoSignalIsSet(DefaultWaitTIme, "Never received message from client 4"); } catch (ApplicationException e) { logger.Dispose(); serverLogger.Dispose(); throw e; } // Finally server.Shutdown(); logger.Write <IntegrationTest>("Integration test done."); serverLogger.Dispose(); }