public void WriteShouldSplitByteArrayIntoPacketsAndSendToEndpoint()
        {
            // Arrange
            _producer.Setup(x => x.MaximumMessageSize).Returns(10);
            var stream = new MessageBusWriteStream(_producer.Object, "TestEndpoint", "TestSequence", _mockConfigurtaion.Object);
            
            var byteArray = new byte[20];
            for (int i = 0; i < byteArray.Length; i++)
            {
                byteArray[i] = Convert.ToByte(i);
            }

            var packet1 = new byte[10];
            for (int i = 0; i < packet1.Length; i++)
            {
                packet1[i] = Convert.ToByte(i);
            }

            var packet2 = new byte[10];
            for (int i = 0; i < packet2.Length; i++)
            {
                packet2[i] = Convert.ToByte(i + 10);
            }

            // Act
            stream.Write(byteArray, 0, byteArray.Length);

            // Assert
            _producer.Verify(x => x.SendBytes("TestEndpoint", It.Is<byte[]>(y => CompareByteArrays(y, packet1)), It.IsAny<Dictionary<string, string>>()));
            _producer.Verify(x => x.SendBytes("TestEndpoint", It.Is<byte[]>(y => CompareByteArrays(y, packet2)), It.IsAny<Dictionary<string, string>>()));
        }
        public void WriteShouldSendTheSameSequenceNumberWithEachPacket()
        {
            // Arrange
            _producer.Setup(x => x.MaximumMessageSize).Returns(10);
            var stream = new MessageBusWriteStream(_producer.Object, "TestEndpoint", "TestSequence", _mockConfigurtaion.Object);

            var byteArray = new byte[20];

            // Act
            stream.Write(byteArray, 0, byteArray.Length);

            // Assert
            _producer.Verify(x => x.SendBytes("TestEndpoint", It.IsAny<byte[]>(), It.Is<Dictionary<string, string>>(y => y["SequenceId"] == "TestSequence")));
            _producer.Verify(x => x.SendBytes("TestEndpoint", It.IsAny<byte[]>(), It.Is<Dictionary<string, string>>(y => y["SequenceId"] == "TestSequence")));
        }
        public void DisposeShouldSendAStopMessageToEndpoint()
        {
            // Arrange
            _producer.Setup(x => x.MaximumMessageSize).Returns(10);
            var stream = new MessageBusWriteStream(_producer.Object, "TestEndpoint", "TestSequence", _mockConfigurtaion.Object);

            // Act
            stream.Dispose();

            // Assert
            _producer.Verify(x => x.SendBytes("TestEndpoint", It.Is<byte[]>(y => y.Length == 0), It.Is<Dictionary<string, string>>(y => y.ContainsKey("Stop"))));
        }