Exemple #1
0
        public void WithWrites_ExpandsBufferWhenNeeded()
        {
            // Arrange
            var origBuffer = new byte[15];
            var offset     = 6;

            origBuffer[0] = 123; // So we can check it was retained during expansion

            // Act/Assert
            using (var stream = new MessagePackBinaryBlockStream(origBuffer, offset))
            {
                // We can fit the 6-byte offset plus 5-byte header plus 3 written bytes
                // into the original 15-byte buffer
                stream.Write(new byte[] { 10, 20, 30 }, 0, 3);
                Assert.Same(origBuffer, stream.Buffer);

                // Trying to add two more exceeds the capacity, so the buffer expands
                stream.Write(new byte[] { 40, 50 }, 0, 2);
                Assert.NotSame(origBuffer, stream.Buffer);
                Assert.True(stream.Buffer.Length > origBuffer.Length);

                // Check the expanded buffer has the expected contents
                stream.Close();
                Assert.Equal(123, stream.Buffer[0]); // Retains other values from original buffer
                Assert.Equal(MessagePackCode.Bin32, stream.Buffer[offset]);
                Assert.Equal(5, ReadBigEndianInt32(stream.Buffer, offset + 1));
                Assert.Equal(10, stream.Buffer[offset + 5]);
                Assert.Equal(20, stream.Buffer[offset + 6]);
                Assert.Equal(30, stream.Buffer[offset + 7]);
                Assert.Equal(40, stream.Buffer[offset + 8]);
                Assert.Equal(50, stream.Buffer[offset + 9]);
            }
        }
Exemple #2
0
        public void LengthIncludesHeaderButPositionDoesNot()
        {
            // Arrange
            var buffer = new byte[20];
            var offset = 3;

            // Act/Assert
            using (var stream = new MessagePackBinaryBlockStream(buffer, offset))
            {
                stream.Write(new byte[] { 0x01, 0x02 }, 0, 2);
                Assert.Equal(7, stream.Length);
                Assert.Equal(2, stream.Position);
            }
        }
Exemple #3
0
        public void WithWrites_WritesToUnderlyingBuffer()
        {
            // Arrange
            var buffer = new byte[100];
            var offset = 58; // Arbitrary

            // Act/Assert
            using (var stream = new MessagePackBinaryBlockStream(buffer, offset))
            {
                stream.Write(new byte[] { 10, 20, 30, 40 }, 1, 2); // Write 2 bytes
                stream.Write(new byte[] { 101 }, 0, 1);            // Write another 1 byte
                stream.Close();

                Assert.Equal(MessagePackCode.Bin32, buffer[offset]);
                Assert.Equal(3, ReadBigEndianInt32(buffer, offset + 1));
                Assert.Equal(20, buffer[offset + 5]);
                Assert.Equal(30, buffer[offset + 6]);
                Assert.Equal(101, buffer[offset + 7]);
            }
        }