Skip to content

Commit 668babc

Browse files
committed
Add Unit Test for setting file permissions on extraction.
1 parent 8f2053c commit 668babc

2 files changed

Lines changed: 36 additions & 2 deletions

File tree

‎LibZipSharp.UnitTest/LibZipSharp.UnitTest.csproj‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
<IsPackable>false</IsPackable>
88
<LibZipSharpBundleAllNativeLibraries>true</LibZipSharpBundleAllNativeLibraries>
99
<ReferenceNugetCondition="'$(ReferenceNuget)' == ''">False</ReferenceNuget>
10+
<DefineConstantsCondition="'$(OS)' == 'Windows_NT'">$(DefineConstants);WINDOWS</DefineConstants>
1011
</PropertyGroup>
1112

1213
<ItemGroup>

‎LibZipSharp.UnitTest/ZipTests.cs‎

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
usingSystem.Text;
66
usingSystem.Threading;
77
usingXamarin.Tools.Zip;
8+
usingUnix=Mono.Unix;
89

910
namespaceTests{
1011

@@ -20,7 +21,7 @@ void AssertEntryIsValid (ZipEntry e, string expectedArchivePath,
2021
}
2122

2223
conststringTEXT="oijoihaofiehfeafewufn e;fau 9ubre9wurew9;ru9;0oewubewa9ru bawpeu;9fberbf oiewrf";
23-
24+
2425

2526
[Test]
2627
publicvoidCanCreateZipFile()
@@ -73,6 +74,38 @@ public void CanExtractZipFile ()
7374
}
7475
}
7576

77+
#if !WINDOWS
78+
[Test]
79+
publicvoidCheckExtractedFilePermissions()
80+
{
81+
if(Environment.OSVersion.Platform!=PlatformID.Unix)
82+
Assert.Ignore("Skipping. Test invalid on windows.");
83+
stringroot=Path.Combine(Path.GetDirectoryName(typeof(ZipTests).Assembly.Location),"CheckExtractedFilePermissions");
84+
Directory.CreateDirectory(root);
85+
stringextractedDir=Path.Combine(root,"Extracted");
86+
stringfile=Path.Combine(root,"script");
87+
stringzip=Path.Combine(root,"foo.zip");
88+
if(File.Exists(zip))
89+
File.Delete(zip);
90+
if(File.Exists(file))
91+
File.Delete(file);
92+
File.WriteAllText(file,"#!/bin/bash"+Environment.NewLine+"echo foo");
93+
using(vararchive=ZipArchive.Open(zip,FileMode.Create)){
94+
ZipEntryentry=archive.AddFile(file,archivePath:"script",permissions:EntryPermissions.OwnerAll|EntryPermissions.GroupAll|EntryPermissions.WorldAll);
95+
}
96+
using(vararchive=ZipArchive.Open(zip,FileMode.Open)){
97+
archive.ExtractAll(extractedDir);
98+
stringscript=Path.Combine(extractedDir,"script");
99+
FileAssert.Exists(script);
100+
varufi=newUnix.UnixFileInfo(script);
101+
Assert.IsTrue(ufi.FileAccessPermissions.HasFlag(Unix.FileAccessPermissions.UserExecute));
102+
Assert.IsTrue(ufi.FileAccessPermissions.HasFlag(Unix.FileAccessPermissions.GroupExecute));
103+
Assert.IsTrue(ufi.FileAccessPermissions.HasFlag(Unix.FileAccessPermissions.OtherExecute));
104+
}
105+
106+
}
107+
#endif
108+
76109
staticDateTimeWithoutMilliseconds(DateTimet)=>
77110
newDateTime(t.Year,t.Month,t.Day,t.Hour,t.Minute,t.Second,t.Kind);
78111

@@ -114,7 +147,7 @@ public void DateTimeConversion ()
114147
varunixTime=(ulong)dateTimeOffset.ToUnixTimeSeconds();
115148
DateTimec=DateTimeOffset.FromUnixTimeSeconds((long)unixTime).UtcDateTime;
116149
Assert.AreEqual(WithoutMilliseconds(dt),WithoutMilliseconds(c));
117-
150+
118151
}
119152
}
120153

0 commit comments

Comments
 (0)