예제 #1
0
        private static void CompressTemplate(string sampleFileName, ZLibCompLevel level, bool useSpan)
        {
            string filePath = Path.Combine(TestSetup.SampleDir, sampleFileName);

            ZLibCompressOptions compOpts = new ZLibCompressOptions()
            {
                Level     = level,
                LeaveOpen = true,
            };

            using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
                using (MemoryStream compMs = new MemoryStream())
                    using (MemoryStream decompMs = new MemoryStream())
                    {
                        using (DeflateStream zs = new DeflateStream(compMs, compOpts))
                        {
#if !NETFRAMEWORK
                            if (useSpan)
                            {
                                byte[] buffer = new byte[64 * 1024];
                                int    bytesRead;
                                do
                                {
                                    bytesRead = fs.Read(buffer.AsSpan());
                                    zs.Write(buffer.AsSpan(0, bytesRead));
                                } while (0 < bytesRead);
                            }
                            else
#endif
                            {
                                fs.CopyTo(zs);
                            }
                        }

                        fs.Position     = 0;
                        compMs.Position = 0;

                        // Decompress compMs with BCL DeflateStream
                        using (System.IO.Compression.DeflateStream zs = new System.IO.Compression.DeflateStream(compMs, CompressionMode.Decompress, true))
                        {
                            zs.CopyTo(decompMs);
                        }

                        decompMs.Position = 0;

                        // Compare SHA256 Digest
                        byte[] decompDigest = TestHelper.SHA256Digest(decompMs);
                        byte[] fileDigest   = TestHelper.SHA256Digest(fs);
                        Assert.IsTrue(decompDigest.SequenceEqual(fileDigest));
                    }
        }
예제 #2
0
        private static void CompressTemplate(string sampleFileName, ZLibCompLevel level, bool useSpan)
        {
            string tempDecompFile  = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
            string tempArchiveFile = tempDecompFile + ".zz";

            try
            {
                ZLibCompressOptions compOpts = new ZLibCompressOptions()
                {
                    Level     = level,
                    LeaveOpen = true,
                };

                string sampleFile = Path.Combine(TestSetup.SampleDir, sampleFileName);
                using (FileStream sampleFs = new FileStream(sampleFile, FileMode.Open, FileAccess.Read, FileShare.Read))
                    using (FileStream archiveFs = new FileStream(tempArchiveFile, FileMode.Create, FileAccess.Write, FileShare.None))
                        using (ZLibStream zs = new ZLibStream(archiveFs, compOpts))
                        {
#if !NETFRAMEWORK
                            if (useSpan)
                            {
                                byte[] buffer = new byte[64 * 1024];
                                int    bytesRead;
                                do
                                {
                                    bytesRead = sampleFs.Read(buffer.AsSpan());
                                    zs.Write(buffer.AsSpan(0, bytesRead));
                                } while (0 < bytesRead);
                            }
                            else
#endif
                            {
                                sampleFs.CopyTo(zs);
                            }

                            zs.Flush();

                            Assert.AreEqual(sampleFs.Length, zs.TotalIn);
                            Assert.AreEqual(archiveFs.Length, zs.TotalOut);
                        }

                int ret = TestHelper.RunPigz(tempArchiveFile);
                Assert.IsTrue(ret == 0);

                byte[] decompDigest;
                byte[] originDigest;
                using (FileStream fs = new FileStream(sampleFile, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    originDigest = TestHelper.SHA256Digest(fs);
                }

                using (FileStream fs = new FileStream(tempDecompFile, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    decompDigest = TestHelper.SHA256Digest(fs);
                }

                Assert.IsTrue(originDigest.SequenceEqual(decompDigest));
            }
            finally
            {
                if (File.Exists(tempArchiveFile))
                {
                    File.Delete(tempArchiveFile);
                }
                if (File.Exists(tempDecompFile))
                {
                    File.Delete(tempDecompFile);
                }
            }
        }