public async Task TestHandlingDuplicatePackets() { using (var server = new TestNode()) { server.ListenAsync(); using (var client = new TestNode()) { await client.ConnectAsync(); var payload = GenerateRandomBytes(200); var startingSequenceNumber = client.RemoteConnection.SequenceNumber; for (int i = 0; i < 10; i++) { var packet = client.BuildReliableDataPacket(payload, 0, payload.Length, (ushort)(startingSequenceNumber + i)); var sendSequenceNumber = (ushort)client.RemoteConnection.IncrementSequenceNumber(); // Send duplicates client.SendToSequenced(client.RemoteConnection, sendSequenceNumber, packet, true); client.SendToSequenced(client.RemoteConnection, sendSequenceNumber, packet, true); client.SendToSequenced(client.RemoteConnection, sendSequenceNumber, packet, true); } for (int i = 0; i < 10; i++) { using (var result = await server.ReadMessage()) { Assert.True(result.Payload.SequenceEqual(payload)); } } } } }
private async Task SendPayloads(TestNode server, TestNode client, byte[][] payloads) { for (int i = 0; i < payloads.Length; i++) { client.SendDataAsync(payloads[i]); using (var result = await server.ReadMessage()) { Assert.True(result.Payload.SequenceEqual(payloads[i])); } } }
private async Task VerifySentPayloads(TestNode server, byte[][] payloads) { for (int i = 0; i < payloads.Length; i++) { using (var result = await server.ReadMessage()) { Assert.True(result.Payload.SequenceEqual(payloads[i])); } } }
public async Task ManySimpleMessageTestWithoutWaiting(byte[][] payloads, int latency, int dropPercentage) { using (var server = new TestNode()) { using (var client = new TestNode(new TestSettings(latency, dropPercentage))) { server.ListenAsync(); await client.ConnectAsync(); for (int n = 0; n < 50; n++) { for (int i = 0; i < payloads.Length; i++) { client.SendDataAsync(payloads[i]); } } for (int n = 0; n < 50; n++) { for (int i = 0; i < payloads.Length; i++) { using (var result = await server.ReadMessage()) { Assert.True(result.Payload.SequenceEqual(payloads[i])); } } } await client.DisconnectAsync(); } } }