public void TestSimpleMessage() { Configuration.SocketConfig config = new Configuration.SocketConfig() { MinimumMTU = 1050 }; MemoryManager memoryManager = new MemoryManager(config); Connection clientsConnectionToServer = Connection.Stub(config, memoryManager); Connection serversConnectionToClient = Connection.Stub(config, memoryManager); ReliableSequencedChannel clientChannel = new ReliableSequencedChannel(0, clientsConnectionToServer, config, memoryManager); ReliableSequencedChannel serverChannel = new ReliableSequencedChannel(0, serversConnectionToClient, config, memoryManager); byte[] message = BufferHelper.GetRandomBuffer(1024, 0); HeapMemory messageMemory = ((HeapMemory)clientChannel.CreateOutgoingMessage(new ArraySegment <byte>(message, 0, 1024), out _, out bool dealloc).Pointers[0]); ArraySegment <byte>?payload = serverChannel.HandleIncomingMessagePoll(new ArraySegment <byte>(messageMemory.Buffer, (int)messageMemory.VirtualOffset + 2, (int)messageMemory.VirtualCount - 2), out _, out bool hasMore); Assert.NotNull(payload); Assert.False(hasMore); Assert.That(BufferHelper.ValidateBufferSizeAndIdentity(payload.Value, 0, 1024)); }
public void TestOutOfOrder() { Configuration.SocketConfig config = new Configuration.SocketConfig() { MinimumMTU = 1050 }; MemoryManager memoryManager = new MemoryManager(config); Connection clientsConnectionToServer = Connection.Stub(config, memoryManager); Connection serversConnectionToClient = Connection.Stub(config, memoryManager); ReliableSequencedChannel clientChannel = new ReliableSequencedChannel(0, clientsConnectionToServer, config, memoryManager); ReliableSequencedChannel serverChannel = new ReliableSequencedChannel(0, serversConnectionToClient, config, memoryManager); // Create 3 payloads byte[] message1 = BufferHelper.GetRandomBuffer(1024, 0); byte[] message2 = BufferHelper.GetRandomBuffer(1024, 1); byte[] message3 = BufferHelper.GetRandomBuffer(1024, 2); // Sequence all payloads as outgoing HeapMemory message1Memory = ((HeapMemory)clientChannel.CreateOutgoingMessage(new ArraySegment <byte>(message1, 0, 1024), out _, out bool dealloc).Pointers[0]); HeapMemory message2Memory = ((HeapMemory)clientChannel.CreateOutgoingMessage(new ArraySegment <byte>(message2, 0, 1024), out _, out dealloc).Pointers[0]); HeapMemory message3Memory = ((HeapMemory)clientChannel.CreateOutgoingMessage(new ArraySegment <byte>(message3, 0, 1024), out _, out dealloc).Pointers[0]); // Consume 1st payload ArraySegment <byte>?payload1 = serverChannel.HandleIncomingMessagePoll(new ArraySegment <byte>(message1Memory.Buffer, (int)message1Memory.VirtualOffset + 2, (int)message1Memory.VirtualCount - 2), out _, out bool hasMore1); // Consume 3rd payload ArraySegment <byte>?payload3 = serverChannel.HandleIncomingMessagePoll(new ArraySegment <byte>(message3Memory.Buffer, (int)message3Memory.VirtualOffset + 2, (int)message3Memory.VirtualCount - 2), out _, out bool hasMore3); // Consume 2nd payload ArraySegment <byte>?payload2 = serverChannel.HandleIncomingMessagePoll(new ArraySegment <byte>(message2Memory.Buffer, (int)message2Memory.VirtualOffset + 2, (int)message2Memory.VirtualCount - 2), out _, out bool hasMore2); HeapMemory pollMemory = serverChannel.HandlePoll(); { Assert.NotNull(payload1); Assert.False(hasMore1); Assert.That(BufferHelper.ValidateBufferSizeAndIdentity(payload1.Value, 0, 1024)); } { Assert.Null(payload3); Assert.False(hasMore3); } { Assert.NotNull(payload2); Assert.True(hasMore2); Assert.That(BufferHelper.ValidateBufferSizeAndIdentity(payload2.Value, 1, 1024)); } { // Check for the third packet Assert.NotNull(pollMemory); Assert.That(BufferHelper.ValidateBufferSizeAndIdentity(pollMemory, 2, 1024)); } }
public void TestReliableSequencedChannelReceiveOutOfSequence() { ReliableSequencedChannel sender = new ReliableSequencedChannel(0); ReliableSequencedChannel receiver = new ReliableSequencedChannel(0); RemotePeer firstPeer; ChanneledPacket firstPacket; { // Create first packet with sequence 1 firstPeer = new RemotePeer();// (new IPEndPoint(IPAddress.Any, 5670)); ulong sessionId = (ulong)0; firstPeer.ChallengeResult = sessionId; byte[] payload = new byte[0]; firstPacket = sender.CreateOutgoingMessage(payload, 0, payload.Length); } { Random random = new Random(0); foreach (int i in Enumerable.Range(1, 100).OrderBy(x => random.Next())) { RemotePeer fakePeer = new RemotePeer(); // (new IPEndPoint(IPAddress.Any, 5670)); ulong sessionId = (ulong)i; fakePeer.ChallengeResult = sessionId; byte[] payload = new byte[random.Next(0, 1024)]; random.NextBytes(payload); ChanneledPacket sent = sender.CreateOutgoingMessage(payload, 0, payload.Length); byte[] buffer = new byte[5000]; int oSize = sent.Write(buffer, fakePeer); ReliableSequencedPacket incPacket = (ReliableSequencedPacket)receiver.HandleIncomingMessagePoll(buffer, oSize, out bool hasMore); Assert.IsNull(incPacket); } } { byte[] buffer = new byte[5000]; int oSize = firstPacket.Write(buffer, firstPeer); ReliableSequencedPacket incPacket = (ReliableSequencedPacket)receiver.HandleIncomingMessagePoll(buffer, oSize, out bool hasMore); Assert.NotNull(incPacket); Assert.IsTrue(incPacket.Payload.Length == 0); Assert.IsTrue(hasMore); } { Random random = new Random(0); foreach (int i in Enumerable.Range(1, 100).OrderBy(x => random.Next())) { ulong sessionId = (ulong)i; byte[] payload = new byte[random.Next(0, 1024)]; random.NextBytes(payload); ReliableSequencedPacket incPacket = (ReliableSequencedPacket)receiver.HandlePoll(); Assert.NotNull(incPacket); CollectionAssert.AreEqual(incPacket.Payload, payload); } } }
public void TestReliableSequencedChannelReceiveInSequence() { ReliableSequencedChannel sender = new ReliableSequencedChannel(0); ReliableSequencedChannel receiver = new ReliableSequencedChannel(0); Random random = new Random(0); for (int i = 0; i < 100000; i++) { RemotePeer fakePeer = new RemotePeer();// new IPEndPoint(IPAddress.Any, 5670)); ulong sessionId = RandomUtils.GetULong(false); fakePeer.ChallengeResult = sessionId; int payLength = random.Next(0, 1024); byte[] payload = new byte[payLength]; random.NextBytes(payload); ChanneledPacket sent = sender.CreateOutgoingMessage(payload, 0, payload.Length); byte[] buffer = new byte[5000]; int oSize = sent.Write(buffer, fakePeer); ReliableSequencedPacket incPacket = (ReliableSequencedPacket)receiver.HandleIncomingMessagePoll(buffer, oSize, out bool hasMore); Assert.IsNotNull(incPacket, "it:" + i); Assert.AreEqual(payLength, incPacket.Payload.Length); CollectionAssert.AreEqual(payload, incPacket.Payload); } }