Ejemplo n.º 1
0
        public void TestClientReconnectsOnDisconnected()
        {
            // create test server
            int port   = 6555;
            var server = TestUtil.CreateTestServer <ServerEventHandler>(port, true).Item1;

            // create client
            var client = TestUtil.CreateClient <ClientEventHandler>(port, true, true).Item1;

            Assert.IsTrue(client.Connected);
            TestUtil.Wait();

            // disconnect client (from server)
            server.DisconnectClient(server.Clients.First().Id);
            TestUtil.Wait();
            Assert.IsFalse(client.Connected);

            // wait (to be reconnected);
            TestUtil.Wait(10000);
            Assert.IsTrue(client.Connected);

            // stop server
            server.Stop();
            TestUtil.Wait();
            Assert.IsFalse(client.Connected);
        }
Ejemplo n.º 2
0
        public void TestServerResponse()
        {
            // create server
            int port               = 5560;
            var serverBundle       = TestUtil.CreateTestServer <ServerEventHandler>(port, true);
            var server             = serverBundle.Item1;
            var serverEventHandler = serverBundle.Item2;

            Assert.IsTrue(server.Started);

            // create client
            var clinetBundle = TestUtil.CreateClient <ClientEventHandler>(port, true);
            var client       = clinetBundle.Item1;
            var eventHandler = clinetBundle.Item2;

            TestUtil.Wait();
            Assert.IsTrue(client.Connected);

            // client sends message
            string msg = "TEST MESSAGE";
            string rsp = "RESPONSE TEST MESSAGE";

            serverEventHandler.Response = rsp;
            bool sent = client.Send(TestUtil.ToByte(msg));

            Assert.IsTrue(sent);

            // server should return static responss
            TestUtil.Wait(1000);
            Assert.IsNotNull(eventHandler.Recieved);
            Assert.AreEqual(rsp, eventHandler.Recieved);

            // stop
            server.Stop();
        }
Ejemplo n.º 3
0
        public void TestRpc()
        {
            // create test server
            int port         = 6557;
            var serverBundle = TestUtil.CreateTestServer <ServerEventHandler>(port, true);
            var server       = serverBundle.Item1;
            var handler      = serverBundle.Item2;

            handler.Response = "TEST MESSAGE RECIEVED";

            // create client
            var client = TestUtil.CreateClient <ClientEventHandler>(port, true).Item1;

            Assert.IsTrue(client.Connected);

            // test rpc
            var msg    = "TEST MESSAGE";
            var rspRpc = client.Rpc(TestUtil.ToByte(msg), 2000);

            Assert.IsNotNull(rspRpc);
            var rspMsg = TestUtil.ToString(rspRpc);

            Assert.AreEqual(msg + " RECIEVED", rspMsg);

            // server stop
            server.Stop();
            TestUtil.Wait();
            Assert.IsFalse(client.Connected);
        }
Ejemplo n.º 4
0
        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));
        }
Ejemplo n.º 5
0
        public void TestServerStopDisconnectsClients()
        {
            /// create server
            int port          = 5557;
            var bundle        = TestUtil.CreateTestServer <ServerEventHandler>(port, true);
            var server        = bundle.Item1;
            var eventHandler  = bundle.Item2;
            var dataProcessor = bundle.Item3;

            // client connect
            TcpClient client = new TcpClient();

            client.Connect("127.0.0.1", port);
            TestUtil.Wait();
            Assert.IsTrue(eventHandler.ConnectedClients.Any(c => c.Time > DateTime.Now.AddMinutes(-1)));

            // stop server
            server.Stop();
            TestUtil.Wait(1000);
            Assert.IsTrue(eventHandler.ServerStopped);
            Assert.IsTrue(eventHandler.DisonnectedClients.Any(c => c.Time > DateTime.Now.AddMinutes(-1)));

            // should not read data
            var buffer = new byte[100];
            var read   = client.GetStream().Read(buffer, 0, 100);

            Assert.AreEqual(0, read);
        }
Ejemplo n.º 6
0
        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());
        }
Ejemplo n.º 7
0
        public void TestClientEventsAreFired()
        {
            // create test server
            int port   = 6556;
            var server = TestUtil.CreateTestServer <ServerEventHandler>(port, true).Item1;

            // create client
            var eventHandler = new ClientEventHandler();
            var bundle       = TestUtil.CreateClient <ClientEventHandler>(port, true, false);
            var client       = bundle.Item1;
            var handler      = bundle.Item2;

            TestUtil.Wait();
            Assert.IsTrue(client.Connected);
            Assert.AreEqual(1, handler.Count);

            // server stop (client will disconnect)
            server.Stop();
            TestUtil.Wait();
            Assert.AreEqual(2, handler.Count);

            // client connect again
            Assert.IsTrue(server.Start());
            client.Connect();
            TestUtil.Wait();
            Assert.AreEqual(3, handler.Count);

            // test recieve message
            string msg = "TEST MESSAGE";

            Assert.AreEqual(1, server.SendToAll(TestUtil.ToByte(msg)));
            TestUtil.Wait();
            Assert.AreEqual(4, handler.Count);
            Assert.AreEqual(msg, handler.Recieved);

            // test send message
            client.Send(TestUtil.ToByte(msg));
            TestUtil.Wait();
            Assert.AreEqual(5, handler.Count);
            Assert.AreEqual(msg, handler.Sent);

            // server stop
            server.Stop();
            TestUtil.Wait();
            Assert.IsFalse(client.Connected);
            Assert.AreEqual(6, handler.Count);

            // failed connect
            client.Connect();
            TestUtil.Wait();
            Assert.AreEqual(7, handler.Count);
        }
Ejemplo n.º 8
0
        public void TestServerEventsAreFired()
        {
            /// create server
            int port          = 5556;
            var bundle        = TestUtil.CreateTestServer <ServerEventHandler>(port, true);
            var server        = bundle.Item1;
            var eventHandler  = bundle.Item2;
            var dataProcessor = bundle.Item3;

            TestUtil.Wait();

            // chech start event
            Assert.IsTrue(eventHandler.ServerStarted);

            // client connect
            TcpClient client = new TcpClient();

            client.Connect("127.0.0.1", port);
            TestUtil.Wait();
            Assert.IsTrue(eventHandler.ConnectedClients.Any(c => c.Time > DateTime.Now.AddMinutes(-1)));

            // recieved message
            string testMessage = "THIS IS TEST MESSAGE";

            client.GetStream().Write(dataProcessor.FilterSendData(TestUtil.ToByte(testMessage)));
            TestUtil.Wait();
            Assert.AreEqual(testMessage, eventHandler.RecievedMessage);

            // check that client disconnected event was triggered
            client.Close();
            TestUtil.Wait();
            Assert.IsTrue(eventHandler.DisonnectedClients.Any(c => c.Time > DateTime.Now.AddMinutes(-1)));

            // server start failure (same port start)
            var bundle2 = TestUtil.CreateTestServer <ServerEventHandler>(port, true);

            TestUtil.Wait();
            Assert.IsTrue(bundle2.Item2.ServerStartFailed);

            // stop server
            server.Stop();
            TestUtil.Wait();
            Assert.IsTrue(eventHandler.ServerStopped);
        }
Ejemplo n.º 9
0
        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();
        }