mirror of
https://github.com/adamhathcock/sharpcompress.git
synced 2026-09-25 00:15:15 +00:00
Zip LZMA write will roundtrip
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)))
|
||||
{
|
||||
|
||||
@@ -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(); });
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user