public void MessageFrameStreamWriter_writes_MessageFrameStreamReader_reads()
        {
            var random = TestHelpers.CreateSemiRandomGenerator();
            var messageFrames = new Queue<MessageFrame>();
            using (var mem = new MemoryStream())
            using (var socket = new TestStreamSocket(mem))
            {
                var writer = new MessageFrameStreamWriter(socket);
                var reader = new MessageFrameStreamReader(socket);

                for (var i = 0; i < 1000; i++)
                {
                    var messageFrame = new MessageFrame
                    {
                        MessageTypeId = (ushort) random.Next(0, UInt16.MaxValue),
                        RawMessage = TestHelpers.GetRandomBytes(random, random.Next(100 * i))
                    };
                    messageFrames.Enqueue(messageFrame);
                    writer.WriteMessageFrame(messageFrame);
                }

                mem.Position = 0;
                while (messageFrames.Count > 0)
                {
                    var messageFrameWritten = messageFrames.Dequeue();
                    var messageFrameRead = reader.ReadMessageFrame();

                    Assert.AreEqual(messageFrameWritten, messageFrameRead);
                }
            }
        }
        public void MessageFrameStreamWriter_writes_MessageFrameStreamReader_reads()
        {
            var random        = TestHelpers.CreateSemiRandomGenerator();
            var messageFrames = new Queue <MessageFrame>();

            using (var mem = new MemoryStream())
                using (var socket = new TestStreamSocket(mem))
                {
                    var writer = new MessageFrameStreamWriter(socket);
                    var reader = new MessageFrameStreamReader(socket);

                    for (var i = 0; i < 1000; i++)
                    {
                        var messageFrame = new MessageFrame
                        {
                            MessageTypeId = (ushort)random.Next(0, UInt16.MaxValue),
                            RawMessage    = TestHelpers.GetRandomBytes(random, random.Next(100 * i))
                        };
                        messageFrames.Enqueue(messageFrame);
                        writer.WriteMessageFrame(messageFrame);
                    }

                    mem.Position = 0;
                    while (messageFrames.Count > 0)
                    {
                        var messageFrameWritten = messageFrames.Dequeue();
                        var messageFrameRead    = reader.ReadMessageFrame();

                        Assert.AreEqual(messageFrameWritten, messageFrameRead);
                    }
                }
        }
        public void MessageFrameStreamWriter_writes_MessageTypeId_then_Length_then_RawMessage()
        {
            var messageFrame = new MessageFrame
            {
                MessageTypeId = 54321,
                RawMessage = new byte[] { 1, 2, 3, 4, 5}
            };

            using (var mem = new MemoryStream())
            using (var socket = new TestStreamSocket(mem))
            {
                var writer = new MessageFrameStreamWriter(socket);
                writer.WriteMessageFrameAsync(messageFrame, CancellationToken.None).Wait();

                var writtenToStream = mem.ToArray();
                
                Assert.AreEqual(messageFrame.MessageTypeId, BitConverter.ToUInt16(writtenToStream, 0));
                Assert.AreEqual(messageFrame.RawMessage.Length, BitConverter.ToUInt16(writtenToStream, 2));

                Assert.AreEqual(messageFrame.RawMessage, writtenToStream.Skip(6).ToArray());
            }
        }
        public void MessageFrameStreamWriter_writes_MessageTypeId_then_Length_then_RawMessage()
        {
            var messageFrame = new MessageFrame
            {
                MessageTypeId = 54321,
                RawMessage    = new byte[] { 1, 2, 3, 4, 5 }
            };

            using (var mem = new MemoryStream())
                using (var socket = new TestStreamSocket(mem))
                {
                    var writer = new MessageFrameStreamWriter(socket);
                    writer.WriteMessageFrameAsync(messageFrame, CancellationToken.None).Wait();

                    var writtenToStream = mem.ToArray();

                    Assert.AreEqual(messageFrame.MessageTypeId, BitConverter.ToUInt16(writtenToStream, 0));
                    Assert.AreEqual(messageFrame.RawMessage.Length, BitConverter.ToUInt16(writtenToStream, 2));

                    Assert.AreEqual(messageFrame.RawMessage, writtenToStream.Skip(6).ToArray());
                }
        }