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()); }