Exemplo n.º 1
0
        public override void Serialize(RecyclableMemoryStream target)
        {
            base.Serialize(target);

            target.Write((ushort)ContentTypeLength);
            if (ContentTypeLength > 0)
            {
                target.Write(ContentType, 0, ContentTypeLength);
            }
            target.Write(checked ((short)ContentLength.Length));
            foreach (var i in ContentLength)
            {
                target.Write7BitInt(i);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        ///     Deserializes from byte array
        /// </summary>
        /// <typeparam name="T">Type to deserialize into</typeparam>
        /// <param name="value">Byte-array to be deserialized</param>
        /// <param name="gzipDecompress">Use gzip decompression, if your data is serialized with gzip</param>
        /// <returns>Byte-array deserialized into type</returns>
        public T FromByteArray <T>(
            [NotNull] byte[] value,
            bool gzipDecompress = false)
        {
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }
            var manager = new RecyclableMemoryStreamManager();

            using (var ms = new RecyclableMemoryStream(manager, "mytag"))//new MemoryStream(value)
            {
                ms.Write(value, 0, value.Length);
                ms.Position = 0;
                if (gzipDecompress)
                {
                    using (var gzip = new GZipStream(ms, CompressionMode.Decompress, true))
                    {
                        return(Serializer.Deserialize <T>(gzip));
                    }
                }

                return(Serializer.Deserialize <T>(ms));
            }
        }
Exemplo n.º 3
0
        public RecyclableMemoryStream Add(string filename, byte[] bytes, int startIndex, int length)
        {
            RecyclableMemoryStream rms = new RecyclableMemoryStream(filename);

            rms.Write(bytes, startIndex, length);
            rms.Position = 0;
            return(this.Add(filename, rms));
        }
Exemplo n.º 4
0
 public void RecyclableMemoryStream()
 {
     using (var stream = new RecyclableMemoryStream(this.memoryManager))
     {
         for (int position = 0; position < this.Length; position += blockSize)
         {
             stream.Write(this.data, position, Math.Min(blockSize, this.Length - position));
         }
     }
 }
Exemplo n.º 5
0
        private void EventLoop(CancellationToken token)
        {
            try
            {
                for (; ;)
                {
                    token.ThrowIfCancellationRequested();

                    long length = (long)Varint.GetUInt64(_stream);
                    if (length == 0)
                    {
                        continue;
                    }

                    Stream resultSteram = null;

                    try
                    {
                        resultSteram = new RecyclableMemoryStream(_bufferManager);

                        using (var safeBuffer = _bufferManager.CreateSafeBuffer(1024 * 32))
                        {
                            long remain = length;

                            while (remain > 0)
                            {
                                int readLength = _stream.Read(safeBuffer.Value, 0, (int)Math.Min(remain, safeBuffer.Value.Length));
                                resultSteram.Write(safeBuffer.Value, 0, readLength);

                                remain -= readLength;
                            }
                        }

                        resultSteram.Seek(0, SeekOrigin.Begin);

                        this.OnReceive(resultSteram);
                    }
                    catch (Exception)
                    {
                        if (resultSteram != null)
                        {
                            resultSteram.Dispose();
                            resultSteram = null;
                        }
                    }
                }
            }
            catch (Exception)
            {
            }
        }
Exemplo n.º 6
0
        public void MessageUpload()
        {
            _callback.Invoke("----- CoreManager Message Upload Test (Start) -----");
            _callback.Invoke("");

            var random = RandomProvider.GetThreadRandom();

            _coreManager.Resize((long)1024 * 1024 * 1024 * 32).Wait();

            Metadata metadata = null;
            Hash     hash;

            using (var stream = new RecyclableMemoryStream(_bufferManager))
            {
                using (var safeBuffer = _bufferManager.CreateSafeBuffer(1024 * 4))
                {
                    for (long remain = (long)1024 * 1024 * 256; 0 < remain; remain -= safeBuffer.Value.Length)
                    {
                        int length = (int)Math.Min(remain, safeBuffer.Value.Length);

                        random.NextBytes(safeBuffer.Value);
                        stream.Write(safeBuffer.Value, 0, length);
                    }
                }

                stream.Seek(0, SeekOrigin.Begin);
                hash = new Hash(HashAlgorithm.Sha256, Sha256.Compute(new WrapperStream(stream)));

                stream.Seek(0, SeekOrigin.Begin);
                metadata = _coreManager.VolatileSetStream(stream, new TimeSpan(1, 0, 0, 0), CancellationToken.None).Result;
            }

            using (var stream = metadata.Export(_bufferManager))
                using (var safeBuffer = _bufferManager.CreateSafeBuffer((int)stream.Length))
                {
                    stream.Read(safeBuffer.Value, 0, (int)stream.Length);
                    Console.WriteLine(NetworkConverter.ToBase64UrlString(safeBuffer.Value, 0, (int)stream.Length));
                }

            using (var stream = hash.Export(_bufferManager))
                using (var safeBuffer = _bufferManager.CreateSafeBuffer((int)stream.Length))
                {
                    stream.Read(safeBuffer.Value, 0, (int)stream.Length);
                    Console.WriteLine(NetworkConverter.ToBase64UrlString(safeBuffer.Value, 0, (int)stream.Length));
                }

            _callback.Invoke("----- CoreManager Message Upload Test (End) -----");
        }
Exemplo n.º 7
0
 internal static byte[] UncompressBuffer(byte[] compressed)
 {
     using (var input = new MemoryStream(compressed))
         using (var output = new RecyclableMemoryStream())
             using (var decompressor = new ZlibStream(input, CompressionMode.Decompress))
                 using (Leayal.ByteBuffer buffer = new Leayal.ByteBuffer(1024))
                 {
                     int read = decompressor.Read(buffer, 0, buffer.Length);
                     while (read > 0)
                     {
                         output.Write(buffer, 0, read);
                         read = decompressor.Read(buffer, 0, buffer.Length);
                     }
                     return(output.ToArray());
                 }
 }
Exemplo n.º 8
0
            private static Stream AddPadding(Stream stream, int size)
            {
                if (stream == null)
                {
                    throw new ArgumentNullException(nameof(stream));
                }

                try
                {
                    var lengthStream = new RecyclableMemoryStream(_bufferManager);
                    Varint.SetUInt64(lengthStream, (ulong)stream.Length);

                    Stream paddingStream;
                    {
                        using (var random = RandomNumberGenerator.Create())
                        {
                            int paddingLength = size - (int)(lengthStream.Length + stream.Length);

                            paddingStream = new RecyclableMemoryStream(_bufferManager);

                            using (var safeBuffer = _bufferManager.CreateSafeBuffer(1024 * 4))
                            {
                                while (paddingLength > 0)
                                {
                                    int writeSize = Math.Min(paddingLength, safeBuffer.Value.Length);

                                    random.GetBytes(safeBuffer.Value);
                                    paddingStream.Write(safeBuffer.Value, 0, writeSize);

                                    paddingLength -= writeSize;
                                }
                            }
                        }
                    }

                    return(new UniteStream(lengthStream, stream, paddingStream));
                }
                catch (Exception e)
                {
                    if (stream != null)
                    {
                        stream.Dispose();
                    }

                    throw new ArgumentException(e.Message, e);
                }
            }
Exemplo n.º 9
0
        /// <summary>
        /// Retrieve a new MemoryStream object with the given tag and with contents copied from the provided
        /// buffer. The provided buffer is not wrapped or used after construction.
        /// </summary>
        /// <remarks>The new stream's position is set to the beginning of the stream when returned.</remarks>
        /// <param name="id">A unique identifier which can be used to trace usages of the stream.</param>
        /// <param name="tag">A tag which can be used to track the source of the stream.</param>
        /// <param name="buffer">The byte buffer to copy data from.</param>
        /// <param name="offset">The offset from the start of the buffer to copy from.</param>
        /// <param name="count">The number of bytes to copy from the buffer.</param>
        /// <returns>A MemoryStream.</returns>
        public RecyclableMemoryStream GetStream(Guid id, object tag, byte[] buffer, int offset, int count)
        {
            RecyclableMemoryStream stream = null;

            try
            {
                stream = new RecyclableMemoryStream(this, id, tag, count);
                stream.Write(buffer, offset, count);
                stream.Position = 0;
                return(stream);
            }
            catch
            {
                stream?.Dispose();
                throw;
            }
        }
Exemplo n.º 10
0
        /// <summary>
        /// Retrieve a new MemoryStream object with the given tag and with contents copied from the provided
        /// buffer. The provided buffer is not wrapped or used after construction.
        /// </summary>
        /// <remarks>The new stream's position is set to the beginning of the stream when returned.</remarks>
        /// <param name="id">A unique identifier which can be used to trace usages of the stream.</param>
        /// <param name="tag">A tag which can be used to track the source of the stream.</param>
        /// <param name="buffer">The byte buffer to copy data from.</param>
        /// <returns>A MemoryStream.</returns>
        public MemoryStream GetStream(Guid id, string tag, Memory <byte> buffer)
        {
            RecyclableMemoryStream stream = null;

            try
            {
                stream = new RecyclableMemoryStream(this, id, tag, buffer.Length);
                stream.Write(buffer.Span);
                stream.Position = 0;
                return(stream);
            }
            catch
            {
                stream?.Dispose();
                throw;
            }
        }
Exemplo n.º 11
0
            private static Stream AddHash(Stream stream)
            {
                if (stream == null)
                {
                    throw new ArgumentNullException(nameof(stream));
                }

                var hashStream = new RecyclableMemoryStream(_bufferManager);

                {
                    Varint.SetUInt64(hashStream, (uint)ConvertHashAlgorithm.Sha256);
                    var value = Sha256.Compute(new WrapperStream(stream));
                    hashStream.Write(value, 0, value.Length);
                }

                return(new UniteStream(hashStream, stream));
            }
Exemplo n.º 12
0
            private Stream GetStream(string url)
            {
                var recyclableMemoryStream = new RecyclableMemoryStream(_bufferManager);

                try
                {
                    using (var client = new HttpClient())
                    {
                        using (var stream = client.GetStreamAsync(url).Result)
                        {
                            if (stream.Length > 1024 * 1024 * 32)
                            {
                                throw new Exception("too large");
                            }

                            using (var safeBuffer = _bufferManager.CreateSafeBuffer(1024 * 4))
                            {
                                int length;

                                while ((length = stream.Read(safeBuffer.Value, 0, safeBuffer.Value.Length)) > 0)
                                {
                                    recyclableMemoryStream.Write(safeBuffer.Value, 0, length);

                                    if (recyclableMemoryStream.Length > 1024 * 1024 * 32)
                                    {
                                        throw new Exception("too large");
                                    }
                                }
                            }

                            recyclableMemoryStream.Seek(0, SeekOrigin.Begin);
                            return(recyclableMemoryStream);
                        }
                    }
                }
                catch (Exception)
                {
                    recyclableMemoryStream.Dispose();

                    throw;
                }
            }
        public void PublicMethodThrowAfterDispose()
        {
            var stream = new RecyclableMemoryStream();

            stream.Dispose();

            byte[] buffer = new byte[1];
            Assert.That(
                () => stream.SetLength(10),
                Throws.InstanceOf <ObjectDisposedException>());
            Assert.That(
                () => stream.WriteByte(0x00),
                Throws.InstanceOf <ObjectDisposedException>());
            Assert.That(
                () => stream.Write(buffer, 0, 1),
                Throws.InstanceOf <ObjectDisposedException>());
            Assert.That(
                () => stream.ReadByte(),
                Throws.InstanceOf <ObjectDisposedException>());
            Assert.That(
                () => stream.Read(buffer, 0, 1),
                Throws.InstanceOf <ObjectDisposedException>());
        }
        public void ToStringReturnsHelpfulDebugInfo()
        {
            var tag = "Nunit test";
            var stream = new RecyclableMemoryStream(this.GetMemoryManager(), tag);
            var buffer = this.GetRandomBuffer(1000);
            stream.Write(buffer, 0, buffer.Length);
            var debugInfo = stream.ToString();

            Assert.That(debugInfo, Contains.Substring(stream.Id.ToString()));
            Assert.That(debugInfo, Contains.Substring(tag));
            Assert.That(debugInfo, Contains.Substring(buffer.Length.ToString("N0")));
        }
Exemplo n.º 15
0
            private static Stream Decrypt(Stream stream, ExchangePrivateKey privateKey)
            {
                if (stream == null)
                {
                    throw new ArgumentNullException(nameof(stream));
                }
                if (privateKey == null)
                {
                    throw new ArgumentNullException(nameof(privateKey));
                }

                try
                {
                    int type = (int)Varint.GetUInt64(stream);

                    if (type == (int)ConvertCryptoAlgorithm.Aes256)
                    {
                        byte[] cryptoKey;

                        {
                            int length = (int)Varint.GetUInt64(stream);

                            var encryptedBuffer = new byte[length];
                            if (stream.Read(encryptedBuffer, 0, encryptedBuffer.Length) != encryptedBuffer.Length)
                            {
                                throw new ArgumentException();
                            }

                            cryptoKey = Exchange.Decrypt(privateKey, encryptedBuffer);
                        }

                        var iv = new byte[32];
                        stream.Read(iv, 0, iv.Length);

                        RecyclableMemoryStream outStream = null;

                        try
                        {
                            outStream = new RecyclableMemoryStream(_bufferManager);

                            using (var aes = Aes.Create())
                            {
                                aes.KeySize = 256;
                                aes.Mode    = CipherMode.CBC;
                                aes.Padding = PaddingMode.PKCS7;

                                using (var inStream = new RangeStream(stream, stream.Position, stream.Length - stream.Position, true))
                                    using (var cs = new CryptoStream(inStream, aes.CreateDecryptor(cryptoKey, iv), CryptoStreamMode.Read))
                                        using (var safeBuffer = _bufferManager.CreateSafeBuffer(1024 * 4))
                                        {
                                            int length;

                                            while ((length = cs.Read(safeBuffer.Value, 0, safeBuffer.Value.Length)) > 0)
                                            {
                                                outStream.Write(safeBuffer.Value, 0, length);
                                            }
                                        }
                            }

                            outStream.Seek(0, SeekOrigin.Begin);
                        }
                        catch (Exception)
                        {
                            if (outStream != null)
                            {
                                outStream.Dispose();
                            }

                            throw;
                        }

                        return(outStream);
                    }
                    else
                    {
                        throw new NotSupportedException();
                    }
                }
                catch (Exception e)
                {
                    throw new ArgumentException(e.Message, e);
                }
                finally
                {
                    if (stream != null)
                    {
                        stream.Dispose();
                    }
                }
            }
Exemplo n.º 16
0
            private static Stream Encrypt(Stream stream, ExchangePublicKey publicKey)
            {
                if (stream == null)
                {
                    throw new ArgumentNullException(nameof(stream));
                }
                if (publicKey == null)
                {
                    throw new ArgumentNullException(nameof(publicKey));
                }

                try
                {
                    RecyclableMemoryStream outStream = null;

                    try
                    {
                        outStream = new RecyclableMemoryStream(_bufferManager);
                        Varint.SetUInt64(outStream, (uint)ConvertCryptoAlgorithm.Aes256);

                        var cryptoKey = new byte[32];
                        var iv        = new byte[32];

                        using (var random = RandomNumberGenerator.Create())
                        {
                            random.GetBytes(cryptoKey);
                            random.GetBytes(iv);
                        }

                        {
                            var encryptedBuffer = Exchange.Encrypt(publicKey, cryptoKey);
                            Varint.SetUInt64(outStream, (uint)encryptedBuffer.Length);
                            outStream.Write(encryptedBuffer, 0, encryptedBuffer.Length);
                        }

                        outStream.Write(iv, 0, iv.Length);

                        using (var aes = Aes.Create())
                        {
                            aes.KeySize = 256;
                            aes.Mode    = CipherMode.CBC;
                            aes.Padding = PaddingMode.PKCS7;

                            using (var inStream = new WrapperStream(stream))
                                using (var cs = new CryptoStream(inStream, aes.CreateEncryptor(cryptoKey, iv), CryptoStreamMode.Read))
                                    using (var safeBuffer = _bufferManager.CreateSafeBuffer(1024 * 4))
                                    {
                                        int length;

                                        while ((length = cs.Read(safeBuffer.Value, 0, safeBuffer.Value.Length)) > 0)
                                        {
                                            outStream.Write(safeBuffer.Value, 0, length);
                                        }
                                    }
                        }

                        outStream.Seek(0, SeekOrigin.Begin);
                    }
                    catch (Exception)
                    {
                        if (outStream != null)
                        {
                            outStream.Dispose();
                        }

                        throw;
                    }

                    return(outStream);
                }
                catch (Exception e)
                {
                    throw new ArgumentException(e.Message, e);
                }
                finally
                {
                    if (stream != null)
                    {
                        stream.Dispose();
                    }
                }
            }
Exemplo n.º 17
0
            private static Stream Decompress(Stream stream)
            {
                if (stream == null)
                {
                    throw new ArgumentNullException(nameof(stream));
                }

                try
                {
                    stream.Seek(0, SeekOrigin.Begin);

                    int type = (int)Varint.GetUInt64(stream);

                    if (type == (int)ConvertCompressionAlgorithm.None)
                    {
                        return(new RangeStream(stream));
                    }
                    else if (type == (int)ConvertCompressionAlgorithm.Deflate)
                    {
                        RecyclableMemoryStream deflateBufferStream = null;

                        try
                        {
                            deflateBufferStream = new RecyclableMemoryStream(_bufferManager);

                            using (var deflateStream = new DeflateStream(stream, CompressionMode.Decompress))
                                using (var safeBuffer = _bufferManager.CreateSafeBuffer(1024 * 4))
                                {
                                    int length;

                                    while ((length = deflateStream.Read(safeBuffer.Value, 0, safeBuffer.Value.Length)) > 0)
                                    {
                                        deflateBufferStream.Write(safeBuffer.Value, 0, length);

                                        if (deflateBufferStream.Length > 1024 * 1024 * 256)
                                        {
                                            throw new Exception("too large");
                                        }
                                    }
                                }

                            deflateBufferStream.Seek(0, SeekOrigin.Begin);

                            return(deflateBufferStream);
                        }
                        catch (Exception)
                        {
                            if (deflateBufferStream != null)
                            {
                                deflateBufferStream.Dispose();
                            }

                            throw;
                        }
                    }
                    else
                    {
                        throw new ArgumentException("ArgumentException");
                    }
                }
                catch (Exception e)
                {
                    if (stream != null)
                    {
                        stream.Dispose();
                    }

                    throw new ArgumentException(e.Message, e);
                }
            }
Exemplo n.º 18
0
        private static T FromStream <T>(int version, Stream stream)
            where T : MessageBase <T>
        {
            try
            {
                stream.Seek(0, SeekOrigin.Begin);

                // Check
                {
                    var verifyCrc  = Crc32_Castagnoli.Compute(new RangeStream(stream, 0, stream.Length - 4, true));
                    var orignalCrc = new byte[4];

                    using (var crcStream = new RangeStream(stream, stream.Length - 4, 4, true))
                    {
                        crcStream.Read(orignalCrc, 0, orignalCrc.Length);
                    }

                    if (!Unsafe.Equals(verifyCrc, orignalCrc))
                    {
                        throw new ArgumentException("Crc Error");
                    }
                }

                stream.Seek(0, SeekOrigin.Begin);

                if (version != (int)Varint.GetUInt64(stream))
                {
                    throw new ArgumentException("version");
                }
                int type = (int)Varint.GetUInt64(stream);

                using (var dataStream = new RangeStream(stream, stream.Position, stream.Length - stream.Position - 4, true))
                {
                    if (type == (int)ConvertCompressionAlgorithm.None)
                    {
                        return(MessageBase <T> .Import(dataStream, _bufferManager));
                    }
                    else if (type == (int)ConvertCompressionAlgorithm.Deflate)
                    {
                        using (var deflateBufferStream = new RecyclableMemoryStream(_bufferManager))
                        {
                            using (var deflateStream = new DeflateStream(dataStream, CompressionMode.Decompress, true))
                                using (var safeBuffer = _bufferManager.CreateSafeBuffer(1024 * 4))
                                {
                                    int length;

                                    while ((length = deflateStream.Read(safeBuffer.Value, 0, safeBuffer.Value.Length)) > 0)
                                    {
                                        deflateBufferStream.Write(safeBuffer.Value, 0, length);

                                        if (deflateBufferStream.Length > 1024 * 1024 * 32)
                                        {
                                            throw new Exception("too large");
                                        }
                                    }
                                }

                            deflateBufferStream.Seek(0, SeekOrigin.Begin);

                            return(MessageBase <T> .Import(deflateBufferStream, _bufferManager));
                        }
                    }
                    else
                    {
                        throw new ArgumentException("ArgumentException");
                    }
                }
            }
            catch (Exception e)
            {
                throw new ArgumentException(e.Message, e);
            }
            finally
            {
                if (stream != null)
                {
                    stream.Dispose();
                }
            }
        }
Exemplo n.º 19
0
        private int CreateHeader(out int contentLength)
        {
            contentLength = 0;
            if (_header is ContentHeader content)
            {
                if (_message is Stream)
                {
                    throw new NotSupportedException();
                }

                if (_message is byte[] buf)
                {
                    throw new NotSupportedException();
                }

                _bodyStream = _contentStream;
                var pos = _bodyStream.Position;
                if (_message is IDynamicPayload dp)
                {
                    content.PacketFlag |= PacketFlag.MultiContent;
                    var obj = dp.Deconstruct();
                    content.ContentLength = new int[obj.Length];
                    byte[] ct = null;
                    for (var i = 0; i < obj.Length; i++)
                    {
                        var cur = _bodyStream.Position;
                        Serializer.Serialize(obj[i], _bodyStream, out ct);
                        content.ContentLength[i] = checked ((int)(_bodyStream.Position - cur));
                    }

                    content.ContentType = ct;
                }
                else
                {
                    byte[] contentType = ContentHeader.EmptyContent;
                    if (!content.PacketFlag.HasFlag(PacketFlag.NoContent))
                    {
                        Serializer.Serialize(_message, _bodyStream, out contentType);
                    }
                    content.ContentType   = contentType;
                    content.ContentLength = new int[1] {
                        checked ((int)(_bodyStream.Position - pos))
                    };
                }

                _bodyStream.Position = pos;
                contentLength        = checked ((int)(_bodyStream.Length - _bodyStream.Position));

                if (contentLength == 0)
                {
                    content.PacketFlag |= PacketFlag.NoContent;
                }
                if (content.ContentLength.Length > 1)
                {
                    content.PacketFlag |= PacketFlag.MultiContent;
                }
            }

            else if (_header is RawDataHeader raw)
            {
                _bodyStream = (Stream)_message;
                if (raw.ContentLength <= 0)
                {
                    raw.ContentLength = checked ((int)(_bodyStream.Length - _bodyStream.Position));
                }
                contentLength      = raw.ContentLength;
                _disposeBodyStream = raw.DisposeStreamAfterSend;
            }

            _headerStream.TryExtend(512);
            _headerStream.Position = sizeof(short);
            _headerStream.Write(Version);
            _header.Serialize(_headerStream);
            var len = (short)_headerStream.Position;

            if (_headerStream.Position > ushort.MaxValue)
            {
                throw new InvalidDataException("Invalid header");
            }
            _headerStream.Position = 0;
            _headerStream.Write(len);

            return(len);
        }
Exemplo n.º 20
0
 public void EncodeBuffer(byte[] value, int start, int length)
 {
     ThrowIfDisposed();
     m_stream.Write(value, start, length);
 }
        public void GetBufferAdjustsLargePoolFreeSize()
        {
            var stream = this.GetDefaultStream();
            var memMgr = stream.MemoryManager;
            var bufferLength = stream.MemoryManager.BlockSize * 4;
            var buffer = this.GetRandomBuffer(bufferLength);
            stream.Write(buffer, 0, buffer.Length);

            var newBuffer = stream.GetBuffer();

            stream.Dispose();

            Assert.That(memMgr.LargePoolFreeSize, Is.EqualTo(newBuffer.Length));

            var newStream = new RecyclableMemoryStream(memMgr);
            newStream.Write(buffer, 0, buffer.Length);

            var newBuffer2 = newStream.GetBuffer();
            Assert.That(newBuffer2.Length, Is.EqualTo(newBuffer.Length));
            Assert.That(memMgr.LargePoolFreeSize, Is.EqualTo(0));
        }
 public void WriteUpdatesLengthAndPosition()
 {
     const int expectedLength = 100;
     var memoryManager = this.GetMemoryManager();
     var stream = new RecyclableMemoryStream(memoryManager, string.Empty, expectedLength);
     var buffer = this.GetRandomBuffer(expectedLength);
     stream.Write(buffer, 0, buffer.Length);
     Assert.That(stream.Length, Is.EqualTo(expectedLength));
     Assert.That(stream.Position, Is.EqualTo(expectedLength));
 }
        public void ToStringWithNullTagIsOk()
        {
            var stream = new RecyclableMemoryStream(this.GetMemoryManager(), null);
            var buffer = this.GetRandomBuffer(1000);
            stream.Write(buffer, 0, buffer.Length);
            var debugInfo = stream.ToString();

            Assert.That(debugInfo, Contains.Substring(stream.Id.ToString()));
            Assert.That(debugInfo, Contains.Substring(buffer.Length.ToString("N0")));
        }
Exemplo n.º 24
0
 public override void Serialize(RecyclableMemoryStream target)
 {
     base.Serialize(target);
     target.Write(RequestId);
 }