From b3975b7bbd0deb2ec2fffaeb0f635f18c016b13a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 27 Oct 2025 09:28:34 +0000 Subject: [PATCH] Add async tests for EntryStream and compression streams Co-authored-by: adamhathcock <527620+adamhathcock@users.noreply.github.com> --- tests/SharpCompress.Test/AsyncTests.cs | 69 ++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/tests/SharpCompress.Test/AsyncTests.cs b/tests/SharpCompress.Test/AsyncTests.cs index a67f8f00..6cab92d2 100644 --- a/tests/SharpCompress.Test/AsyncTests.cs +++ b/tests/SharpCompress.Test/AsyncTests.cs @@ -130,4 +130,73 @@ public class AsyncTests : TestBase Assert.True(File.Exists(outputPath)); Assert.True(new FileInfo(outputPath).Length > 0); } + + [Fact] + public async Task EntryStream_ReadAsync_Works() + { + var testArchive = Path.Combine(TEST_ARCHIVES_PATH, "Tar.tar.gz"); + using var stream = File.OpenRead(testArchive); + using var reader = ReaderFactory.Open(stream); + + while (reader.MoveToNextEntry()) + { + if (!reader.Entry.IsDirectory) + { + using var entryStream = reader.OpenEntryStream(); + var buffer = new byte[4096]; + var totalRead = 0; + int bytesRead; + + // Test ReadAsync on EntryStream + while ((bytesRead = await entryStream.ReadAsync(buffer, 0, buffer.Length)) > 0) + { + totalRead += bytesRead; + } + + Assert.True(totalRead > 0, "Should have read some data from entry stream"); + break; // Test just one entry + } + } + } + + [Fact] + public async Task CompressionStream_Async_ReadWrite() + { + var testData = new byte[1024]; + new Random(42).NextBytes(testData); + + var compressedPath = Path.Combine(SCRATCH_FILES_PATH, "async_compressed.gz"); + + // Test async write with GZipStream + using (var fileStream = File.Create(compressedPath)) + using (var gzipStream = new Compressors.Deflate.GZipStream( + fileStream, + Compressors.CompressionMode.Compress)) + { + await gzipStream.WriteAsync(testData, 0, testData.Length); + await gzipStream.FlushAsync(); + } + + Assert.True(File.Exists(compressedPath)); + Assert.True(new FileInfo(compressedPath).Length > 0); + + // Test async read with GZipStream + using (var fileStream = File.OpenRead(compressedPath)) + using (var gzipStream = new Compressors.Deflate.GZipStream( + fileStream, + Compressors.CompressionMode.Decompress)) + { + var decompressed = new byte[testData.Length]; + var totalRead = 0; + int bytesRead; + while (totalRead < decompressed.Length && + (bytesRead = await gzipStream.ReadAsync(decompressed, totalRead, decompressed.Length - totalRead)) > 0) + { + totalRead += bytesRead; + } + + Assert.Equal(testData.Length, totalRead); + Assert.Equal(testData, decompressed); + } + } }