Exemplo n.º 1
0
        public async Task Decompress(CompressionType type)
        {
            string testFilePath = CreateCompressedFile(type);
            int    _bufferSize  = 1024;
            var    bytes        = new byte[_bufferSize];

            using (MemoryStream gzStream = await LocalMemoryStream.readAppFileAsync(testFilePath))
                using (MemoryStream strippedMs = StripHeaderAndFooter.Strip(gzStream))
                    foreach (var iteration in Benchmark.Iterations)
                    {
                        using (iteration.StartMeasurement())
                            for (int i = 0; i < Benchmark.InnerIterationCount; i++)
                            {
                                int retCount = -1;
                                using (DeflateStream zip = new DeflateStream(strippedMs, CompressionMode.Decompress, leaveOpen: true))
                                {
                                    while (retCount != 0)
                                    {
                                        retCount = zip.Read(bytes, 0, _bufferSize);
                                    }
                                }
                                strippedMs.Seek(0, SeekOrigin.Begin);
                            }
                    }
            File.Delete(testFilePath);
        }
Exemplo n.º 2
0
        public bool WriteHit = false; // methods of the underlying stream. This bool acts as a toggle to check that they're being used.

        public static async Task <ManualSyncMemoryStream> GetStreamFromFileAsync(string testFile, bool sync = false, bool strip = false)
        {
            var baseStream = await StreamHelpers.CreateTempCopyStream(testFile);

            if (strip)
            {
                baseStream = StripHeaderAndFooter.Strip(baseStream);
            }

            var ms = new ManualSyncMemoryStream(sync);
            await baseStream.CopyToAsync(ms);

            ms.Position = 0;
            return(ms);
        }
Exemplo n.º 3
0
        public async Task ModifyBaseStream()
        {
            var ms = await LocalMemoryStream.readAppFileAsync(gzTestFile("GZTestDocument.txt.gz"));

            var newMs = StripHeaderAndFooter.Strip(ms);

            var zip  = new DeflateStream(newMs, CompressionMode.Decompress);
            int size = 1024;

            byte[] bytes = new byte[size];
            zip.BaseStream.Read(bytes, 0, size); // This will throw if the underlying stream is not writable as expected

            zip.BaseStream.Position = 0;
            await zip.BaseStream.ReadAsync(bytes, 0, size);
        }
Exemplo n.º 4
0
        public async Task CanReadBaseStreamAfterDispose()
        {
            var ms = await LocalMemoryStream.readAppFileAsync(gzTestFile("GZTestDocument.txt.gz"));

            var newMs = StripHeaderAndFooter.Strip(ms);

            var zip        = new DeflateStream(newMs, CompressionMode.Decompress, true);
            var baseStream = zip.BaseStream;

            zip.Dispose();

            int size = 1024;

            Byte[] bytes = new Byte[size];
            baseStream.Read(bytes, 0, size); // This will throw if the underlying stream is not writeable as expected

            baseStream.Position = 0;
            await baseStream.ReadAsync(bytes, 0, size);
        }
Exemplo n.º 5
0
        // Making this async since regular read/write are tested below
        private async Task DecompressAsync(MemoryStream compareStream, MemoryStream gzStream)
        {
            var sourceStream = StripHeaders ? StripHeaderAndFooter.Strip(gzStream) : gzStream;

            var ms  = new MemoryStream();
            var zip = CreateStream(sourceStream, CompressionMode.Decompress);

            var Stream = new MemoryStream();

            int  _bufferSize = 1024;
            var  bytes       = new byte[_bufferSize];
            bool finished    = false;
            int  retCount;

            while (!finished)
            {
                retCount = await ReadAsync(zip, bytes, 0, _bufferSize);

                if (retCount != 0)
                {
                    await Stream.WriteAsync(bytes, 0, retCount);
                }
                else
                {
                    finished = true;
                }
            }

            Stream.Position        = 0;
            compareStream.Position = 0;

            byte[] compareArray = compareStream.ToArray();
            byte[] writtenArray = Stream.ToArray();

            Assert.Equal(compareArray.Length, writtenArray.Length);
            for (int i = 0; i < compareArray.Length; i++)
            {
                Assert.Equal(compareArray[i], writtenArray[i]);
            }
        }