Zip LZMA write will roundtrip

This commit is contained in:
Adam Hathcock
2021-02-13 16:44:53 +00:00
parent 1f37ced35a
commit fe4cc8e6cb
19 changed files with 141 additions and 190 deletions

View File

@@ -69,7 +69,7 @@ namespace SharpCompress.Test
{
foreach (var path in testArchives)
{
using (var stream = new NonDisposingStream(File.OpenRead(path), true))
await using (var stream = new NonDisposingStream(File.OpenRead(path), true))
await using (var archive = await ArchiveFactory.OpenAsync(stream, readerOptions))
{
try

View File

@@ -18,7 +18,7 @@ namespace SharpCompress.Test.GZip
[Fact]
public async ValueTask GZip_Archive_Generic()
{
using (Stream stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Tar.tar.gz")))
await using (Stream stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Tar.tar.gz")))
await using (var archive = await ArchiveFactory.OpenAsync(stream))
{
var entry = await archive.Entries.FirstAsync();
@@ -38,7 +38,7 @@ namespace SharpCompress.Test.GZip
[Fact]
public async ValueTask GZip_Archive()
{
using (Stream stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Tar.tar.gz")))
await using (Stream stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Tar.tar.gz")))
await using (var archive = GZipArchive.Open(stream))
{
var entry = await archive.Entries.FirstAsync();

View File

@@ -24,7 +24,7 @@ namespace SharpCompress.Test.GZip
public async ValueTask GZip_Reader_Generic2()
{
//read only as GZip itme
using (Stream stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Tar.tar.gz")))
await using (Stream stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Tar.tar.gz")))
await using (var reader = SharpCompress.Readers.GZip.GZipReader.Open(new RewindableStream(stream)))
{
while (await reader.MoveToNextEntryAsync()) // Crash here

View File

@@ -1,4 +1,6 @@
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using SharpCompress.IO;
using Xunit;
@@ -7,7 +9,7 @@ namespace SharpCompress.Test.Streams
public class RewindableStreamTest
{
[Fact]
public void TestRewind()
public async Task TestRewind()
{
MemoryStream ms = new MemoryStream();
BinaryWriter bw = new BinaryWriter(ms);
@@ -22,30 +24,29 @@ namespace SharpCompress.Test.Streams
ms.Position = 0;
RewindableStream stream = new RewindableStream(ms);
stream.StartRecording();
BinaryReader br = new BinaryReader(stream);
Assert.Equal(1, br.ReadInt32());
Assert.Equal(2, br.ReadInt32());
Assert.Equal(3, br.ReadInt32());
Assert.Equal(4, br.ReadInt32());
Assert.Equal(1, await stream.ReadInt32(CancellationToken.None));
Assert.Equal(2, await stream.ReadInt32(CancellationToken.None));
Assert.Equal(3, await stream.ReadInt32(CancellationToken.None));
Assert.Equal(4, await stream.ReadInt32(CancellationToken.None));
stream.Rewind(true);
stream.StartRecording();
Assert.Equal(1, br.ReadInt32());
Assert.Equal(2, br.ReadInt32());
Assert.Equal(3, br.ReadInt32());
Assert.Equal(4, br.ReadInt32());
Assert.Equal(5, br.ReadInt32());
Assert.Equal(6, br.ReadInt32());
Assert.Equal(7, br.ReadInt32());
Assert.Equal(1, await stream.ReadInt32(CancellationToken.None));
Assert.Equal(2, await stream.ReadInt32(CancellationToken.None));
Assert.Equal(3, await stream.ReadInt32(CancellationToken.None));
Assert.Equal(4, await stream.ReadInt32(CancellationToken.None));
Assert.Equal(5, await stream.ReadInt32(CancellationToken.None));
Assert.Equal(6, await stream.ReadInt32(CancellationToken.None));
Assert.Equal(7, await stream.ReadInt32(CancellationToken.None));
stream.Rewind(true);
stream.StartRecording();
Assert.Equal(1, br.ReadInt32());
Assert.Equal(2, br.ReadInt32());
Assert.Equal(3, br.ReadInt32());
Assert.Equal(4, br.ReadInt32());
Assert.Equal(1, await stream.ReadInt32(CancellationToken.None));
Assert.Equal(2, await stream.ReadInt32(CancellationToken.None));
Assert.Equal(3, await stream.ReadInt32(CancellationToken.None));
Assert.Equal(4, await stream.ReadInt32(CancellationToken.None));
}
[Fact]
public void TestIncompleteRewind()
public async Task TestIncompleteRewind()
{
MemoryStream ms = new MemoryStream();
BinaryWriter bw = new BinaryWriter(ms);
@@ -60,24 +61,23 @@ namespace SharpCompress.Test.Streams
ms.Position = 0;
RewindableStream stream = new RewindableStream(ms);
stream.StartRecording();
BinaryReader br = new BinaryReader(stream);
Assert.Equal(1, br.ReadInt32());
Assert.Equal(2, br.ReadInt32());
Assert.Equal(3, br.ReadInt32());
Assert.Equal(4, br.ReadInt32());
Assert.Equal(1, await stream.ReadInt32(CancellationToken.None));
Assert.Equal(2, await stream.ReadInt32(CancellationToken.None));
Assert.Equal(3, await stream.ReadInt32(CancellationToken.None));
Assert.Equal(4, await stream.ReadInt32(CancellationToken.None));
stream.Rewind(true);
Assert.Equal(1, br.ReadInt32());
Assert.Equal(2, br.ReadInt32());
Assert.Equal(1, await stream.ReadInt32(CancellationToken.None));
Assert.Equal(2, await stream.ReadInt32(CancellationToken.None));
stream.StartRecording();
Assert.Equal(3, br.ReadInt32());
Assert.Equal(4, br.ReadInt32());
Assert.Equal(5, br.ReadInt32());
Assert.Equal(3, await stream.ReadInt32(CancellationToken.None));
Assert.Equal(4, await stream.ReadInt32(CancellationToken.None));
Assert.Equal(5, await stream.ReadInt32(CancellationToken.None));
stream.Rewind(true);
Assert.Equal(3, br.ReadInt32());
Assert.Equal(4, br.ReadInt32());
Assert.Equal(5, br.ReadInt32());
Assert.Equal(6, br.ReadInt32());
Assert.Equal(7, br.ReadInt32());
Assert.Equal(3, await stream.ReadInt32(CancellationToken.None));
Assert.Equal(4, await stream.ReadInt32(CancellationToken.None));
Assert.Equal(5, await stream.ReadInt32(CancellationToken.None));
Assert.Equal(6, await stream.ReadInt32(CancellationToken.None));
Assert.Equal(7, await stream.ReadInt32(CancellationToken.None));
}
}
}

View File

@@ -44,8 +44,8 @@ namespace SharpCompress.Test.Tar
[InlineData(false)]
public async Task Tar_Finalize_Archive(bool finalizeArchive)
{
using (MemoryStream stream = new MemoryStream())
using (Stream content = File.OpenRead(Path.Combine(ORIGINAL_FILES_PATH, "jpg", "test.jpg")))
await using (MemoryStream stream = new MemoryStream())
await using (Stream content = File.OpenRead(Path.Combine(ORIGINAL_FILES_PATH, "jpg", "test.jpg")))
{
await using (TarWriter writer = await TarWriter.CreateAsync(stream, new TarWriterOptions(CompressionType.None, finalizeArchive)))
{

View File

@@ -25,7 +25,7 @@ namespace SharpCompress.Test.Xz
{
var bytes = Compressed.Clone() as byte[];
bytes[8]++;
using (Stream badCrcStream = new MemoryStream(bytes))
await using (Stream badCrcStream = new MemoryStream(bytes))
{
var header = new XZHeader(badCrcStream);
var ex = await Assert.ThrowsAsync<InvalidDataException>(async () => { await header.Process(); });
@@ -41,7 +41,7 @@ namespace SharpCompress.Test.Xz
byte[] crc = Crc32.Compute(streamFlags).ToLittleEndianBytes();
streamFlags.CopyTo(bytes, 6);
crc.CopyTo(bytes, 8);
using (Stream badFlagStream = new MemoryStream(bytes))
await using (Stream badFlagStream = new MemoryStream(bytes))
{
var header = new XZHeader(badFlagStream);
var ex = await Assert.ThrowsAsync<InvalidDataException>(async () => { await header.Process(); });

View File

@@ -147,8 +147,8 @@ namespace SharpCompress.Test.Zip
// Use no compression to ensure we hit the limits (actually inflates a bit, but seems better than using method==Store)
var eo = new ZipWriterEntryOptions() { DeflateCompressionLevel = Compressors.Deflate.CompressionLevel.None };
using (var zip = File.OpenWrite(filename))
using (var st = forward_only ? (Stream)new ForwardOnlyStream(zip) : zip)
await using (var zip = File.OpenWrite(filename))
await using (var st = forward_only ? (Stream)new ForwardOnlyStream(zip) : zip)
await using (var zipWriter = (ZipWriter)await WriterFactory.OpenAsync(st, ArchiveType.Zip, opts))
{
@@ -173,7 +173,7 @@ namespace SharpCompress.Test.Zip
long count = 0;
long size = 0;
Common.Zip.ZipEntry prev = null;
using (var fs = File.OpenRead(filename))
await using (var fs = File.OpenRead(filename))
await using (var rd = ZipReader.Open(fs, new ReaderOptions() { LookForHeader = false }))
{
while (await rd.MoveToNextEntryAsync())

View File

@@ -529,7 +529,7 @@ namespace SharpCompress.Test.Zip
var buffer = new byte[4096];
await using (var memoryStream = new MemoryStream())
using (var firstStream = await firstEntry.OpenEntryStreamAsync())
await using (var firstStream = await firstEntry.OpenEntryStreamAsync())
{
await firstStream.CopyToAsync(memoryStream);
Assert.Equal(199, memoryStream.Length);
@@ -550,8 +550,8 @@ namespace SharpCompress.Test.Zip
var firstEntry = await za.Entries.FirstAsync(x => x.Key == "first.txt");
var buffer = new byte[4096];
using (var memoryStream = new MemoryStream())
using (var firstStream = await firstEntry.OpenEntryStreamAsync())
await using (var memoryStream = new MemoryStream())
await using (var firstStream = await firstEntry.OpenEntryStreamAsync())
{
await firstStream.CopyToAsync(memoryStream);
Assert.Equal(199, memoryStream.Length);

View File

@@ -194,7 +194,7 @@ namespace SharpCompress.Test.Zip
[Fact]
public async ValueTask Zip_Reader_Disposal_Test2()
{
using (TestStream stream = new TestStream(File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Zip.deflate.dd.zip"))))
await using (TestStream stream = new TestStream(File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Zip.deflate.dd.zip"))))
{
var reader = await ReaderFactory.OpenAsync(stream);
while (await reader.MoveToNextEntryAsync())
@@ -218,7 +218,7 @@ namespace SharpCompress.Test.Zip
{
await Assert.ThrowsAsync<NotSupportedException>(async () =>
{
using (
await using (
Stream stream =
File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH,
"Zip.lzma.WinzipAES.zip")))
@@ -316,7 +316,7 @@ namespace SharpCompress.Test.Zip
{
var keys = new string[] { "Empty1", "Empty2", "Dir1/", "Dir2/", "Fake1", "Fake2", "Internal.zip" };
using (Stream stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Zip.none.issue86.zip")))
await using (Stream stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Zip.none.issue86.zip")))
await using (var reader = ZipReader.Open(stream))
{
foreach (var key in keys)