public void TestSendToAllClients() { /// create server int port = 5558; var bundle = TestUtil.CreateTestServer <ServerEventHandler>(port, true); var server = bundle.Item1; var eventHandler = bundle.Item2; var dataProcessor = TestUtil.CreateSimpleDataProcessor(); // connect clients int count = 2; var clients = Enumerable.Range(0, count).Select(i => TestUtil.CreateTestNativeClient(port)).ToList(); TestUtil.Wait(); Assert.AreEqual(count, server.Clients.Count()); // send message from server to all clients string message = "TEST MESSAGE"; var sent = server.SendToAll(TestUtil.ToByte(message)); Assert.AreEqual(count, sent); // read message from clients var recieved = clients.Select(c => { var buffer = new byte[200]; var cnt = c.GetStream().Read(buffer, 0, 200); Assert.AreNotEqual(0, cnt); var rcnt = dataProcessor.ProcessReceivedRawData(buffer, cnt); Assert.AreEqual(1, rcnt.Count()); return(TestUtil.ToString(rcnt.First())); }); // messages must be the same recieved.ToList().ForEach(msg => Assert.AreEqual(message, msg)); }
public void TestServerIsAgnosticToEventHandlerErrors() { // start server var watch = Stopwatch.StartNew(); int port = 5559; var bundle = TestUtil.CreateTestServer <BadServerEventHandler>(port, true); var server = bundle.Item1; var eventHandler = bundle.Item2; var dataProcessor = TestUtil.CreateSimpleDataProcessor(); TestUtil.Wait(); Assert.IsTrue(watch.ElapsedMilliseconds < 2000); Assert.AreEqual(1, eventHandler.Counter); // client connect watch = Stopwatch.StartNew(); var client = TestUtil.CreateTestNativeClient(port); TestUtil.Wait(); Assert.IsTrue(watch.ElapsedMilliseconds < 2000); Assert.AreEqual(2, eventHandler.Counter); // recieve data from client watch = Stopwatch.StartNew(); var clientDataProcessor = TestUtil.CreateSimpleDataProcessor(); client.GetStream().Write(clientDataProcessor.FilterSendData(TestUtil.ToByte("TEST MESSAGE"))); TestUtil.Wait(); client.GetStream().Write(clientDataProcessor.FilterSendData(TestUtil.ToByte("TEST MESSAGE"))); TestUtil.Wait(); Assert.IsTrue(watch.ElapsedMilliseconds < 3000); Assert.AreEqual(4, eventHandler.Counter); // send data to client watch = Stopwatch.StartNew(); server.SendToClient(eventHandler.ConnectedClients.First().Id, TestUtil.ToByte("TEST MESSAGE")); TestUtil.Wait(); Assert.IsTrue(watch.ElapsedMilliseconds < 2000); Assert.AreEqual(5, eventHandler.Counter); // client disconnect watch = Stopwatch.StartNew(); client.GetStream().Close(); client.Close(); TestUtil.Wait(); Assert.IsTrue(watch.ElapsedMilliseconds < 2000); Assert.AreEqual(6, eventHandler.Counter); // stop server watch = Stopwatch.StartNew(); server.Stop(); TestUtil.Wait(); Assert.IsTrue(watch.ElapsedMilliseconds < 2000); // Assert.AreEqual(7, eventHandler.Counter); // no clients remain Assert.AreEqual(0, server.Clients.Count()); }
public void TestClientDisconnect() { // create and start server int port = 5555; var bundle = TestUtil.CreateTestServer <ServerEventHandler>(port, true); var server = bundle.Item1; var eventHandler = bundle.Item2; // client multiple clients int count = 10; var clients = Enumerable.Range(1, count).Select(i => { var client = TestUtil.CreateTestNativeClient(port); TestUtil.Wait(); Assert.AreEqual(i, eventHandler.ConnectedClients.Count); var id = eventHandler.ConnectedClients.Last().Id; return(new Tuple <string, TcpClient>(id, client)); }).ToList(); Assert.AreEqual(count, clients.Count(c => c.Item2.Connected)); Assert.AreEqual(count, server.Clients.Count); // disconnect n clients (server action) int discCount = 3; clients.Take(discCount).ToList().ForEach(c => Assert.IsTrue(server.DisconnectClient(c.Item1))); TestUtil.Wait(); // disconnected client will not read data clients.Take(discCount).ToList().ForEach((c) => { var buffer = new byte[2]; Assert.AreEqual(0, c.Item2.GetStream().Read(buffer, 0, 2)); }); // Assert.AreEqual(count - discCount, clients.Count(c => c.Connected)); Assert.AreEqual(count - discCount, server.Clients.Count()); // stop server server.Stop(); }