From c774bd1510512ec7b980accf11d022cc489b2507 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20D=C3=BCrrenberger?= Date: Mon, 13 Feb 2023 13:56:07 +0100 Subject: [PATCH 1/2] Enable tests for NetZipArchiveFileSystem --- .../FileSystems/NetZipArchiveFileSystem.cs | 4 +-- .../NetZipArchiveFileSystemTest.cs | 30 ++++++------------ .../SharpFileSystem.Tests.csproj | 10 ++---- SharpFileSystem.Tests/filesystem.zip | Bin 0 -> 936 bytes 4 files changed, 14 insertions(+), 30 deletions(-) create mode 100644 SharpFileSystem.Tests/filesystem.zip diff --git a/SharpCoreFileSystem/FileSystems/NetZipArchiveFileSystem.cs b/SharpCoreFileSystem/FileSystems/NetZipArchiveFileSystem.cs index 8401820..67d20da 100644 --- a/SharpCoreFileSystem/FileSystems/NetZipArchiveFileSystem.cs +++ b/SharpCoreFileSystem/FileSystems/NetZipArchiveFileSystem.cs @@ -16,7 +16,7 @@ public static NetZipArchiveFileSystem Open(Stream s) { return new NetZipArchiveFileSystem(new ZipArchive(s, ZipArchiveMode.Update, true)); } - + public static NetZipArchiveFileSystem OpenReadOnly(Stream s) { return new NetZipArchiveFileSystem(new ZipArchive(s, ZipArchiveMode.Read, true)); @@ -85,7 +85,7 @@ public Stream CreateFile(FileSystemPath path) public Stream OpenFile(FileSystemPath path, FileAccess access) { - if (access != FileAccess.Read) + if (ZipArchive.Mode == ZipArchiveMode.Read && access != FileAccess.Read) throw new InvalidOperationException("This is a read-only filesystem."); var zae = ZipArchive.GetEntry(ToEntryPath(path)); diff --git a/SharpFileSystem.Tests/FileSystems/NetZipArchiveFileSystemTest.cs b/SharpFileSystem.Tests/FileSystems/NetZipArchiveFileSystemTest.cs index 5372d79..eebfcbd 100644 --- a/SharpFileSystem.Tests/FileSystems/NetZipArchiveFileSystemTest.cs +++ b/SharpFileSystem.Tests/FileSystems/NetZipArchiveFileSystemTest.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.IO.Compression; using System.Linq; using System.Text; using SharpFileSystem.IO; @@ -8,7 +9,7 @@ namespace SharpFileSystem.Tests.FileSystems { - public class NetZipArchiveFileSystemTest + public class NetZipArchiveFileSystemTest : IDisposable { private Stream zipStream; private NetZipArchiveFileSystem fileSystem; @@ -17,22 +18,7 @@ public class NetZipArchiveFileSystemTest //setup public NetZipArchiveFileSystemTest() { - var memoryStream = new MemoryStream(); - zipStream = memoryStream; - var zipOutput = new ZipOutputStream(zipStream); - - - var fileContentBytes = Encoding.ASCII.GetBytes(fileContentString); - zipOutput.PutNextEntry(new ZipEntry("textfileA.txt") - { - Size = fileContentBytes.Length - }); - zipOutput.Write(fileContentBytes); - zipOutput.PutNextEntry(new ZipEntry("directory/fileInDirectory.txt")); - zipOutput.PutNextEntry(new ZipEntry("scratchdirectory/scratch")); - zipOutput.Finish(); - - memoryStream.Position = 0; + zipStream = new FileStream("filesystem.zip", FileMode.Open); fileSystem = NetZipArchiveFileSystem.Open(zipStream); } @@ -45,6 +31,7 @@ public void Dispose() private readonly FileSystemPath directoryPath = FileSystemPath.Parse("/directory/"); private readonly FileSystemPath textfileAPath = FileSystemPath.Parse("/textfileA.txt"); + private readonly FileSystemPath textfileBPath = FileSystemPath.Parse("/textfileB.txt"); private readonly FileSystemPath fileInDirectoryPath = FileSystemPath.Parse("/directory/fileInDirectory.txt"); private readonly FileSystemPath scratchDirectoryPath = FileSystemPath.Parse("/scratchdirectory/"); @@ -53,9 +40,10 @@ public void GetEntitiesOfRootTest() { Assert.Equal(new[] { - textfileAPath, directoryPath, - scratchDirectoryPath + scratchDirectoryPath, + textfileAPath, + textfileBPath }, fileSystem.GetEntities(FileSystemPath.Root).ToArray()); } @@ -91,13 +79,13 @@ public void CanReadFile() [Fact] public void CanWriteFile() { - var file = fileSystem.OpenFile(textfileAPath, FileAccess.ReadWrite); + var file = fileSystem.OpenFile(textfileBPath, FileAccess.ReadWrite); var textBytes = Encoding.ASCII.GetBytes(fileContentString + " and a new string"); file.Write(textBytes); file.Close(); - file = fileSystem.OpenFile(textfileAPath, FileAccess.ReadWrite); + file = fileSystem.OpenFile(textfileBPath, FileAccess.ReadWrite); var text = file.ReadAllText(); Assert.True(string.Equals(text, fileContentString + " and a new string")); } diff --git a/SharpFileSystem.Tests/SharpFileSystem.Tests.csproj b/SharpFileSystem.Tests/SharpFileSystem.Tests.csproj index 3bf2363..d0f9089 100644 --- a/SharpFileSystem.Tests/SharpFileSystem.Tests.csproj +++ b/SharpFileSystem.Tests/SharpFileSystem.Tests.csproj @@ -36,10 +36,6 @@ - @@ -65,8 +61,8 @@ - - - + + Always + diff --git a/SharpFileSystem.Tests/filesystem.zip b/SharpFileSystem.Tests/filesystem.zip new file mode 100644 index 0000000000000000000000000000000000000000..0e47d5bfe4ca6c573ea064a9bdbe3254c9d86bff GIT binary patch literal 936 zcmWIWW@Zs#0D6KKJfV4uaSc|4r5U8~{xhSzDIRn)ui1IaP$|bQWhw4Xipi-W1*thlnBKd&IL6{ea zOHwOJKu&W6IjAHfvseL$5*0u~2%q88=!8upBa=M?uE0|P+6n>!5DFhrvkh|X5$KQnAsq6G=LZpcvylT*}D9-@(j4G!xc#|>p)&f24ajT zL$<;?(TJOn6_^o=Y{evOR=}be*{WmTKXKx=3KDpjaSF3a0cg!hAVx_V$i`2aJ++52 fx^Sz~8 literal 0 HcmV?d00001 From 3bdbe5a06a97ab74c1f32c234431707a0caaf8ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20D=C3=BCrrenberger?= Date: Mon, 13 Feb 2023 14:02:27 +0100 Subject: [PATCH 2/2] Add tests for ReadOnly mode --- .../NetZipArchiveFileSystemTest.cs | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/SharpFileSystem.Tests/FileSystems/NetZipArchiveFileSystemTest.cs b/SharpFileSystem.Tests/FileSystems/NetZipArchiveFileSystemTest.cs index eebfcbd..68d4102 100644 --- a/SharpFileSystem.Tests/FileSystems/NetZipArchiveFileSystemTest.cs +++ b/SharpFileSystem.Tests/FileSystems/NetZipArchiveFileSystemTest.cs @@ -13,6 +13,7 @@ public class NetZipArchiveFileSystemTest : IDisposable { private Stream zipStream; private NetZipArchiveFileSystem fileSystem; + private NetZipArchiveFileSystem fileSystemReadOnly; private string fileContentString = "this is a file"; //setup @@ -20,6 +21,7 @@ public NetZipArchiveFileSystemTest() { zipStream = new FileStream("filesystem.zip", FileMode.Open); fileSystem = NetZipArchiveFileSystem.Open(zipStream); + fileSystemReadOnly = NetZipArchiveFileSystem.OpenReadOnly(zipStream); } //teardown @@ -114,5 +116,66 @@ public void CanAddDirectory() Assert.True(fileSystem.Exists(fsp)); } + + [Fact] + public void ReadOnlyGetEntitiesOfRootTest() + { + Assert.Equal(new[] + { + directoryPath, + scratchDirectoryPath, + textfileAPath, + textfileBPath + }, fileSystemReadOnly.GetEntities(FileSystemPath.Root).ToArray()); + } + + [Fact] + public void ReadOnlyGetEntitiesOfDirectoryTest() + { + Assert.Equal(new[] + { + fileInDirectoryPath + }, fileSystemReadOnly.GetEntities(directoryPath).ToArray()); + } + + [Fact] + public void ReadOnlyExistsTest() + { + Assert.True(fileSystemReadOnly.Exists(FileSystemPath.Root)); + Assert.True(fileSystemReadOnly.Exists(textfileAPath)); + Assert.True(fileSystemReadOnly.Exists(directoryPath)); + Assert.True(fileSystemReadOnly.Exists(fileInDirectoryPath)); + Assert.False(fileSystemReadOnly.Exists(FileSystemPath.Parse("/nonExistingFile"))); + Assert.False(fileSystemReadOnly.Exists(FileSystemPath.Parse("/nonExistingDirectory/"))); + Assert.False(fileSystemReadOnly.Exists(FileSystemPath.Parse("/directory/nonExistingFileInDirectory"))); + } + + [Fact] + public void ReadOnlyCanReadFile() + { + var file = fileSystemReadOnly.OpenFile(textfileAPath, FileAccess.Read); + var text = file.ReadAllText(); + Assert.True(string.Equals(text, fileContentString)); + } + + [Fact] + public void ReadOnlyCanNotWriteFile() + { + Assert.Throws(() => fileSystemReadOnly.OpenFile(textfileBPath, FileAccess.ReadWrite)); + } + + [Fact] + public void ReadOnlyCanNotAddFile() + { + var fsp = FileSystemPath.Parse("/scratchdirectory/recentlyadded.txt"); + Assert.Throws(() => fileSystemReadOnly.CreateFile(fsp)); + } + + [Fact] + public void ReadOnlyCanNotAddDirectory() + { + var fsp = FileSystemPath.Parse("/scratchdirectory/dir/"); + Assert.Throws(() => fileSystemReadOnly.CreateDirectory(fsp)); + } } }