Exemplo n.º 1
0
        public void ClientShouldNotRaiseMultipleEventsForDuplicatePacket()
        {
            NetworkTransportMock networkTransport = new NetworkTransportMock();
            JsonSerializer       serializer       = new JsonSerializer();
            ClientConcrete       clientConcrete   = new ClientConcrete(networkTransport, serializer, 10 * 1000);
            MyData myData = new MyData
            {
                Name = "John Doe"
            };

            int dataReceived = 0;

            clientConcrete.OnPacketReceived += (packet) =>
            {
                dataReceived++;
            };

            Packet data = ConstructPacket(myData, 1);

            networkTransport.InvokeDataReceived(serializer.Serilize(data));
            Thread.Sleep(2 * 1000);
            networkTransport.InvokeDataReceived(serializer.Serilize(data));

            Assert.AreEqual(1, dataReceived);
        }
Exemplo n.º 2
0
        public void ClientShouldNotRaiseRasieEventInOrderOfSequenceNumber()
        {
            NetworkTransportMock networkTransport = new NetworkTransportMock();
            JsonSerializer       serializer       = new JsonSerializer();
            ClientConcrete       clientConcrete   = new ClientConcrete(networkTransport, serializer, 10 * 1000);

            List <MyData> dataReceived = new List <MyData>();

            clientConcrete.OnPacketReceived += (packet) =>
            {
                dataReceived.Add((MyData)packet);
            };

            Packet data = ConstructPacket(new MyData
            {
                Name = "John Doe"
            }, 2);

            networkTransport.InvokeDataReceived(serializer.Serilize(data));
            data = ConstructPacket(new MyData
            {
                Name = "Jane Doe"
            }, 1);
            networkTransport.InvokeDataReceived(serializer.Serilize(data));

            Thread.Sleep(2 * 1000);

            Assert.AreEqual(2, dataReceived.Count);
            Assert.AreEqual("Jane Doe", dataReceived[0].Name);
            Assert.AreEqual("John Doe", dataReceived[1].Name);
        }
Exemplo n.º 3
0
        public async Task ClientShouldResendPackets()
        {
            NetworkTransportMock networkTransport = new NetworkTransportMock();
            JsonSerializer       serializer       = new JsonSerializer();
            ClientConcrete       clientConcrete   = new ClientConcrete(networkTransport, serializer, 10 * 1000);
            MyData myData = new MyData
            {
                Name = "John Doe"
            };

            bool dataReceived = false;

            clientConcrete.OnPacketReceived += (packet) =>
            {
                dataReceived = true;
            };

            await clientConcrete.SendData(myData);

            Packet sentPacket = (Packet)serializer.Deserilize(networkTransport.Data);

            Thread.Sleep(15 * 1000);
            Packet sentPacket1 = (Packet)serializer.Deserilize(networkTransport.Data);

            clientConcrete.StopPacketResend();

            Assert.AreEqual(sentPacket.PacketHeader.IdempotencyToken, sentPacket1.PacketHeader.IdempotencyToken);
            Assert.AreEqual(sentPacket.PacketHeader.SequenceNumber, sentPacket1.PacketHeader.SequenceNumber);
            Assert.AreEqual(sentPacket.PacketHeader.ClassType, sentPacket1.PacketHeader.ClassType);
            Assert.AreEqual(((MyData)sentPacket.PacketPayload).Name, ((MyData)sentPacket1.PacketPayload).Name);
        }
Exemplo n.º 4
0
        public async Task ClientShouldNotRaiseEventForAckPacket()
        {
            NetworkTransportMock networkTransport = new NetworkTransportMock();
            JsonSerializer       serializer       = new JsonSerializer();
            ClientConcrete       clientConcrete   = new ClientConcrete(networkTransport, serializer);
            MyData myData = new MyData
            {
                Name = "John Doe"
            };

            bool dataReceived = false;

            clientConcrete.OnPacketReceived += (packet) =>
            {
                dataReceived = true;
            };


            await clientConcrete.SendData(myData);

            Packet sentPacket = (Packet)serializer.Deserilize(networkTransport.Data);

            Packet ackPacket = ConstructAckPacket(sentPacket.PacketHeader.SequenceNumber, sentPacket.PacketHeader.IdempotencyToken);

            networkTransport.InvokeDataReceived(serializer.Serilize(ackPacket));

            Thread.Sleep(2 * 1000);

            Assert.IsFalse(dataReceived);
        }
Exemplo n.º 5
0
        public void ClientShouldSendAckForEveryPacketReceived()
        {
            NetworkTransportMock networkTransport = new NetworkTransportMock();
            JsonSerializer       serializer       = new JsonSerializer();
            ClientConcrete       clientConcrete   = new ClientConcrete(networkTransport, serializer);
            MyData myData = new MyData
            {
                Name = "John Doe"
            };

            clientConcrete.OnPacketReceived += (packet) =>
            {
                // do nothing
            };

            Packet data = ConstructPacket(myData, 1);

            networkTransport.InvokeDataReceived(serializer.Serilize(data));

            Thread.Sleep(2 * 1000);

            Packet ackRecieved = (Packet)serializer.Deserilize(networkTransport.Data);

            Assert.AreEqual(data.PacketHeader.IdempotencyToken, ackRecieved.PacketHeader.IdempotencyToken);
        }
Exemplo n.º 6
0
        public async Task SequenceNumberShouldIncreaseByOneWithEachSend()
        {
            NetworkTransportMock networkTransport = new NetworkTransportMock();
            JsonSerializer       serializer       = new JsonSerializer();
            ClientConcrete       clientConcrete   = new ClientConcrete(networkTransport, serializer);
            MyData myData = new MyData
            {
                Name = "John Doe"
            };

            await clientConcrete.SendData(myData);

            Packet packet = (Packet)serializer.Deserilize(networkTransport.Data);

            Assert.AreEqual(1, packet.PacketHeader.SequenceNumber);

            await clientConcrete.SendData(myData);

            packet = (Packet)serializer.Deserilize(networkTransport.Data);
            Assert.AreEqual(2, packet.PacketHeader.SequenceNumber);

            await clientConcrete.SendData(myData);

            packet = (Packet)serializer.Deserilize(networkTransport.Data);
            Assert.AreEqual(3, packet.PacketHeader.SequenceNumber);
        }
Exemplo n.º 7
0
        public async Task IdempotencyTokenShouldBeValidGuid()
        {
            NetworkTransportMock networkTransport = new NetworkTransportMock();
            JsonSerializer       serializer       = new JsonSerializer();
            ClientConcrete       clientConcrete   = new ClientConcrete(networkTransport, serializer);
            MyData myData = new MyData
            {
                Name = "John Doe"
            };

            await clientConcrete.SendData(myData);

            Packet packet = (Packet)serializer.Deserilize(networkTransport.Data);

            Assert.IsTrue(Guid.TryParse(packet.PacketHeader.IdempotencyToken, out _));
        }
Exemplo n.º 8
0
        public async Task ClassTypeInHeaderShouldMatchTypeOf()
        {
            NetworkTransportMock networkTransport = new NetworkTransportMock();
            JsonSerializer       serializer       = new JsonSerializer();
            ClientConcrete       clientConcrete   = new ClientConcrete(networkTransport, serializer);
            MyData myData = new MyData
            {
                Name = "John Doe"
            };

            await clientConcrete.SendData(myData);

            Packet packet = (Packet)serializer.Deserilize(networkTransport.Data);

            Assert.AreEqual(typeof(MyData).AssemblyQualifiedName.ToString(), packet.PacketHeader.ClassType);
        }
Exemplo n.º 9
0
        public void ReadShouldReturnCorrectData()
        {
            NetworkTransportMock networkTransport = new NetworkTransportMock();
            JsonSerializer       serializer       = new JsonSerializer();
            ClientConcrete       clientConcrete   = new ClientConcrete(networkTransport, serializer);
            MyData myData = new MyData
            {
                Name = "John Doe"
            };
            MyData myDataRecieved = null;

            clientConcrete.OnPacketReceived += (packet) =>
            {
                myDataRecieved = (MyData)packet;
            };

            networkTransport.InvokeDataReceived(serializer.Serilize(ConstructPacket(myData, 1)));

            Assert.AreEqual(myData.Name, myDataRecieved.Name);
        }