Beispiel #1
0
        public async Task WhenWriteDataFromBufferToStream_ThenAllBytesShouldBeWritesToStreamSuccessively(int byteCount)
        {
            var pool        = new LargeContentPool(100, 10, false);
            var syncBuffer  = pool.Acquire();
            var asyncBuffer = pool.Acquire();
            var bytes       = Enumerable.Range(0, byteCount).Select(x => (byte)(x % byte.MaxValue)).ToArray();

            syncBuffer.ReadFrom(bytes, 0, bytes.Length);
            asyncBuffer.ReadFrom(bytes, 0, bytes.Length);
            byte[] syncMemStreamArray;
            byte[] asyncMemStreamArray;

            using (var memStream = new MemoryStream())
            {
                syncBuffer.WriteTo(memStream);
                syncMemStreamArray = memStream.ToArray();
            }

            using (var memStream = new MemoryStream())
            {
                await asyncBuffer.WriteToAsync(memStream, CancellationToken.None);

                asyncMemStreamArray = memStream.ToArray();
            }

            Assert.Equal(bytes, syncMemStreamArray);
            Assert.Equal(bytes, asyncMemStreamArray);
        }
Beispiel #2
0
        public async Task WhenWriteDataFromStream_ThenAllBytesShouldBeWritesSuccessively(int byteCount)
        {
            var pool        = new LargeContentPool(100, 10, false);
            var syncBuffer  = pool.Acquire();
            var asyncBuffer = pool.Acquire();
            var bytes       = Enumerable.Range(0, byteCount).Select(x => (byte)(x % byte.MaxValue)).ToArray();

            using (var memStream = new MemoryStream())
            {
                memStream.Write(bytes, 0, bytes.Length);
                memStream.Position = 0;
                syncBuffer.ReadFrom(memStream);
            }

            using (var memStream = new MemoryStream())
            {
                memStream.Write(bytes, 0, bytes.Length);
                memStream.Position = 0;
                await asyncBuffer.ReadFromAsync(memStream, CancellationToken.None);
            }

            Assert.Equal(bytes, syncBuffer);
            Assert.Equal(bytes.LongLength, syncBuffer.Size);
            Assert.Equal(bytes, asyncBuffer);
            Assert.Equal(bytes.LongLength, asyncBuffer.Size);
        }
Beispiel #3
0
        public void WhenReleaseBuffer_ThenAllMemoryShouldBeReturnedToPool()
        {
            var       r           = new Random();
            var       initialSize = r.Next(1000, 2000);
            const int chunkSize   = 10;
            var       content     = Enumerable.Range(0, chunkSize).Select(i => (byte)i).ToArray();
            var       pool        = new LargeContentPool(initialSize, chunkSize, false);
            var       buffers     = new List <Content>();

            while (pool.Free > chunkSize)
            {
                var buf = pool.Acquire();
                buf.ReadFrom(content, 0, content.Length);
                buffers.Add(buf);
            }

            var allocatedBytes = buffers.Aggregate(0L, (count, buf) => count + buf.Size);
            var poolAcquired   = pool.Total - pool.Free;

            foreach (var buffer in buffers)
            {
                buffer.Dispose();
            }

            Assert.True(poolAcquired == allocatedBytes, $"Pool acquired size '{poolAcquired}' is not equal allocated size '{allocatedBytes}'");
            Assert.True(pool.Free == pool.Total, $"All buffers has release, but Free chunks size ({pool.Free}) is not equal Total pool size ({pool.Total})");
        }
Beispiel #4
0
        public void WhenWriteCollectionOfBytes_ThenAllBytesShouldBeWritesSuccessively(int byteCount)
        {
            var pool   = new LargeContentPool(100, 10, false);
            var buffer = pool.Acquire();
            var bytes  = Enumerable.Range(0, byteCount).Select(x => (byte)(x % byte.MaxValue)).ToArray();

            buffer.ReadFrom(bytes, 0, bytes.Length);

            Assert.Equal(bytes, buffer);
            Assert.Equal(bytes.LongLength, buffer.Size);
        }
Beispiel #5
0
        public void WhenClearContent_ThenAllUnderlyingContentBytesShouldBeZeroed()
        {
            var r           = new Random();
            var initialSize = r.Next(1000, 2000);
            var chunkSize   = initialSize / 10;
            var pool        = new LargeContentPool(initialSize, chunkSize, false);
            var bytes       = Enumerable.Range(0, chunkSize).Select(i => (byte)i).ToArray();
            var zeroBytes   = Enumerable.Range(0, chunkSize).Select(_ => (byte)0).ToArray();
            var content     = pool.Acquire();

            content.ReadFrom(bytes, 0, bytes.Length);

            content.Clear();

            Assert.Equal(zeroBytes, content);
        }