Beispiel #1
0
        public void ConnectionEstablished_SendDataFromClient_ShoudBeReceivedOnServer()
        {
            var helloWorld = "Hello World!";

            var receivedMessagesInSession = new List <string>();

            var networkLayer = new CombinedTestNetworkLayer();

            var client = new TestPollingClient(networkLayer);
            var server = new TestPollingServer(networkLayer);

            server.Start();

            var session = ConnectionHelper.WaitForSessionOnServer(server, client);

            session.FrameReceived += (sender, args) => receivedMessagesInSession.Add(Encoding.UTF8.GetString(args.Frame.Payload));

            client.Send(new ClientDataFrame()
            {
                Payload = Encoding.UTF8.GetBytes(helloWorld)
            });

            Assert.IsTrue(receivedMessagesInSession.Any());
            Assert.AreEqual(helloWorld, receivedMessagesInSession[0]);

            server.Stop();
            client.DisconnectAsync().Wait();
        }
        public void EstablishedSession_ReceivesNoData_ShouldCloseReceiveTimeoutReason()
        {
            var sessionCloseReason = CloseReason.Unknown;

            var waitEvent = new ManualResetEvent(false);

            var networkLayer = new CombinedTestNetworkLayer();

            var client = new TestPollingClient(networkLayer);
            var server = new TestPollingServer(networkLayer);

            var session = ConnectionHelper.WaitForSessionOnServer(server, client);

            session.SessionClosed += (sender, args) =>
            {
                sessionCloseReason = args.Reason;
                waitEvent.Set();
            };

            ConnectionHelper.WaitForConnectionEstablishmentOnServer(session);

            Assert.AreEqual(SessionState.Connected, session.SessionState);

            var disconnectTask = client.DisconnectAsync();

            disconnectTask.Wait(5000);

            Assert.AreEqual(TaskStatus.RanToCompletion, disconnectTask.Status, "The disconnectAsync should be done withing 5s");
            Assert.AreEqual(0, client.CurrentPollingPoolSize);

            var eventHasBeenRaised = waitEvent.WaitOne(5000);

            Assert.IsTrue(eventHasBeenRaised, "There should be an event within the desired timeout!");
            Assert.AreEqual(SessionState.Closed, session.SessionState);
            Assert.AreEqual(CloseReason.ReceiveTimeout, sessionCloseReason);

            server.Stop();
        }
Beispiel #3
0
        public void ConnectionEstablished_SendDataFromServer_ShoudBeReceivedOnClient()
        {
            var helloWorld = "Hello World!";

            var receivedMessagesOnClient        = new List <string>();
            var atLeastOneFrameReceivedOnClient = new AutoResetEvent(false);
            var networkLayer = new CombinedTestNetworkLayer();

            var client = new TestPollingClient(networkLayer);
            var server = new TestPollingServer(networkLayer);

            server.Start();

            var session = ConnectionHelper.WaitForSessionOnServer(server, client);

            session = ConnectionHelper.WaitForConnectionEstablishmentOnServer(session);

            client.FrameReceived += (sender, args) =>
            {
                receivedMessagesOnClient.Add(Encoding.UTF8.GetString(args.Frame.Payload));
                atLeastOneFrameReceivedOnClient.Set();
            };

            session.Send(new ServerDataFrame()
            {
                Payload = Encoding.UTF8.GetBytes(helloWorld)
            });

            atLeastOneFrameReceivedOnClient.WaitOne(5000);

            Assert.IsTrue(receivedMessagesOnClient.Any());
            Assert.AreEqual(helloWorld, receivedMessagesOnClient[0]);

            server.Stop();
            client.DisconnectAsync().Wait();
        }