Пример #1
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);
        }
Пример #2
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);
        }
Пример #3
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);
        }
Пример #4
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 _));
        }
Пример #5
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);
        }