Skip to content

Commit 668babc

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

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

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
<ReferenceNuget Condition="'$(ReferenceNuget)' == ''">False</ReferenceNuget>
10+
<DefineConstants Condition="'$(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
using System.Text;
66
using System.Threading;
77
using Xamarin.Tools.Zip;
8+
using Unix = Mono.Unix;
89

910
namespace Tests {
1011

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

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

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

77+
#if !WINDOWS
78+
[Test]
79+
public void CheckExtractedFilePermissions ()
80+
{
81+
if (Environment.OSVersion.Platform != PlatformID.Unix)
82+
Assert.Ignore ("Skipping. Test invalid on windows.");
83+
string root = Path.Combine (Path.GetDirectoryName (typeof (ZipTests).Assembly.Location), "CheckExtractedFilePermissions");
84+
Directory.CreateDirectory (root);
85+
string extractedDir = Path.Combine (root, "Extracted");
86+
string file = Path.Combine (root, "script");
87+
string zip = 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 (var archive = ZipArchive.Open (zip, FileMode.Create)) {
94+
ZipEntry entry = archive.AddFile (file, archivePath: "script", permissions: EntryPermissions.OwnerAll | EntryPermissions.GroupAll | EntryPermissions.WorldAll);
95+
}
96+
using (var archive = ZipArchive.Open (zip, FileMode.Open)) {
97+
archive.ExtractAll (extractedDir);
98+
string script = Path.Combine (extractedDir, "script");
99+
FileAssert.Exists (script);
100+
var ufi = new Unix.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
static DateTime WithoutMilliseconds (DateTime t) =>
77110
new DateTime (t.Year, t.Month, t.Day, t.Hour, t.Minute, t.Second, t.Kind);
78111

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

0 commit comments

Comments
 (0)