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); }
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); }
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); }
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); }
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); }
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); }
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 _)); }
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); }
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); }