Beispiel #1
0
        public void ConnectedClient_ReceivesNoServerFrames_ShouldTimeoutAndDisonnect()
        {
            var timedOutEventRaised = new AutoResetEvent(false);

            var connectionRequestResponse = new ServerDataFrame()
            {
                SequenceId = 7,
                Payload    = BitConverter.GetBytes(12345)
            };

            var networkLayer = new ClientTestNetworkLinkLayer();

            var client = new TestPollingClient(networkLayer);

            client.ReceiveTimeout = TimeSpan.FromMilliseconds(500);

            client.ConnectionStateChanged += (sender, args) =>
            {
                if (args.State == ConnectionState.Timeout)
                {
                    timedOutEventRaised.Set();
                }
            };

            client.ConnectAsync();

            byte[] data = this.serverDataFrameSerializer.Serialize(connectionRequestResponse);
            networkLayer.Receive(data);

            Assert.AreEqual(ConnectionState.Connected, client.ConnectionState);

            var isEventRaised = timedOutEventRaised.WaitOne(5000);

            Assert.IsTrue(isEventRaised);
        }
Beispiel #2
0
        public void ConnectedClient_WhenConnected_ShouldSendAControlFrameAtLeast()
        {
            var connectionRequestResponse = new ServerDataFrame()
            {
                SequenceId = 7,
                Payload    = BitConverter.GetBytes(12345)
            };

            var networkLayer = new ClientTestNetworkLinkLayer();

            var client = new TestPollingClient(networkLayer);

            client.ConnectAsync();

            byte[] data = this.serverDataFrameSerializer.Serialize(connectionRequestResponse);
            networkLayer.Receive(data);

            Assert.AreEqual(ConnectionState.Connected, client.ConnectionState);

            client.DisconnectAsync().Wait(5000);

            var allSentControlFrames = networkLayer.SentBytes.Select(b => this.clientAnyFrameSerializer.Deserialze(b)).ToList();

            Assert.IsTrue(allSentControlFrames.Any());
            Assert.IsTrue(allSentControlFrames.OfType <ClientControlFrame>().Any());
        }
        public void NewRequestPool_WhenStarted_ShouldTearDownWhenStopped()
        {
            var clientNetworkLayer = new ClientTestNetworkLinkLayer();
            var transportLayer     = new ClientTestTransportLayer(clientNetworkLayer);

            var requestPool = new RequestPool <ClientControlFrame>(transportLayer);

            requestPool.Start();
            Assert.AreEqual(requestPool.InitialClientSize, requestPool.ActiveClients);

            requestPool.StopAsync().Wait();
            Assert.AreEqual(0, requestPool.ActiveClients);
        }
        public void NewRequestPool_WhenStarted_ShouldStartUpDefinedNumberOfClients()
        {
            var clientNetworkLayer = new ClientTestNetworkLinkLayer();
            var transportLayer     = new ClientTestTransportLayer(clientNetworkLayer);

            var requestPool = new RequestPool <ClientControlFrame>(transportLayer, 4);

            requestPool.Start();

            Assert.AreEqual(requestPool.InitialClientSize, requestPool.ActiveClients);

            requestPool.Stop();
        }
Beispiel #5
0
        public void ConnectedClient_InIdleMode_ShouldSendKeepAlivePackets()
        {
            var connectionRequestResponse = new ServerDataFrame()
            {
                SequenceId = 7,
                Payload    = BitConverter.GetBytes(12345)
            };

            var networkLayer = new ClientTestNetworkLinkLayer();

            var client = new TestPollingClient(networkLayer);

            client.ReceiveTimeout         = Timeout.InfiniteTimeSpan;
            client.InitialPollingPoolSize = 0;

            client.ConnectAsync();

            byte[] data = this.serverDataFrameSerializer.Serialize(connectionRequestResponse);
            networkLayer.Receive(data);

            Assert.AreEqual(ConnectionState.Connected, client.ConnectionState);

            var captureDuration = new Stopwatch();

            var captureKeepAlivePackesTask = new Task <int>(() =>
            {
                captureDuration.Start();
                var allSentControlFrames = networkLayer.SentBytes.Select(b => this.clientAnyFrameSerializer.Deserialze(b)).OfType <ClientControlFrame>().ToList();

                var startNumberOfPackets = allSentControlFrames.Count;

                Thread.Sleep((int)(client.Protocol.KeepAliveClientInterval.TotalMilliseconds * 1.5));
                allSentControlFrames = networkLayer.SentBytes.Select(b => this.clientAnyFrameSerializer.Deserialze(b)).OfType <ClientControlFrame>().ToList();

                var totalNumberOfPackets = allSentControlFrames.Count - startNumberOfPackets;

                captureDuration.Stop();

                return(totalNumberOfPackets);
            });

            captureKeepAlivePackesTask.Start();
            captureKeepAlivePackesTask.Wait();

            var allSentWhileConnected = captureKeepAlivePackesTask.Result;

            var atLeastExpectedNumberOfKeepAlivePackes = (captureDuration.ElapsedMilliseconds / client.Protocol.KeepAliveClientInterval.TotalMilliseconds) - 1;

            Assert.IsTrue(allSentWhileConnected > atLeastExpectedNumberOfKeepAlivePackes);
        }
        public void NewRequestPool_WhenStarted_ShouldSendControlMessages()
        {
            var clientNetworkLayer = new ClientTestNetworkLinkLayer();
            var transportLayer     = new ClientTestTransportLayer(clientNetworkLayer);

            var requestPool = new RequestPool <ClientControlFrame>(transportLayer);

            requestPool.Start();
            requestPool.Stop();

            var frames = clientNetworkLayer.SentBytes.Select(this.clientFrameEncoder.Decode).ToList();

            Assert.IsTrue(frames.Any());
            Assert.IsTrue(frames.OfType <ClientControlFrame>().Any());
        }
Beispiel #7
0
        public void ReadyClient_WhenConnecting_SendAnEmptyClientId()
        {
            var networkLayer = new ClientTestNetworkLinkLayer();

            var client = new TestPollingClient(networkLayer);

            client.ConnectAsync();

            Assert.AreEqual(1, networkLayer.SentBytes.Count);

            var sentFrameBytes = networkLayer.SentBytes[0];
            var sentFrame      = new GenericSerializer <ClientDataFrame>().Deserialze(sentFrameBytes);

            Assert.IsNotNull(sentFrame);
            Assert.IsTrue(sentFrame.SequenceId != 0);
            Assert.AreEqual(0, sentFrame.ClientId);
            Assert.IsNull(sentFrame.Payload);
        }
Beispiel #8
0
        public void ConnectingClient_ReceivesResponseWhileConnecting_ShouldUseClientIdInData()
        {
            var connectionRequestResponse = new ServerDataFrame()
            {
                SequenceId = 7,
                Payload    = BitConverter.GetBytes(12345)
            };

            var networkLayer = new ClientTestNetworkLinkLayer();

            var client = new TestPollingClient(networkLayer);

            client.ConnectAsync();

            networkLayer.Receive(this.serverDataFrameSerializer.Serialize(connectionRequestResponse));
            client.Send(new ClientDataFrame());
            client.DisconnectAsync();
        }
Beispiel #9
0
        public void ConnectingClient_ReceivesResponseWhileConnecting_ShouldSwitchToConnectedState()
        {
            var connectionRequestResponse = new ServerDataFrame()
            {
                SequenceId = 7,
                Payload    = BitConverter.GetBytes(12345)
            };

            var networkLayer = new ClientTestNetworkLinkLayer();

            var client = new TestPollingClient(networkLayer);

            client.ConnectAsync();

            byte[] data = this.serverDataFrameSerializer.Serialize(connectionRequestResponse);

            networkLayer.Receive(data);
            Assert.AreEqual(ConnectionState.Connected, client.ConnectionState);

            client.DisconnectAsync();
        }
 public ClientTestTransportLayer(ClientTestNetworkLinkLayer clientNetworkLayer)
 {
     this.clientNetworkLayer = clientNetworkLayer;
     this.encoder            = new BinaryClientFrameEncoder();
 }