Skip to content

Commit eeefea2

Browse files
chrissawercmaglie
authored andcommitted
Fix building/running of permissions tests on Windows
1 parent b540998 commit eeefea2

3 files changed

Lines changed: 50 additions & 9 deletions

File tree

extractor_test.go

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import (
1616
"github.com/arduino/go-paths-helper"
1717
"github.com/codeclysm/extract/v4"
1818
"github.com/stretchr/testify/require"
19-
"golang.org/x/sys/unix"
2019
)
2120

2221
func TestExtractors(t *testing.T) {
@@ -264,8 +263,8 @@ func TestSymLinkMazeHardening(t *testing.T) {
264263

265264
func TestUnixPermissions(t *testing.T) {
266265
// Disable user's umask to enable creation of files with any permission, restore it after the test
267-
userUmask := unix.Umask(0)
268-
defer unix.Umask(userUmask)
266+
userUmask := UnixUmaskZero()
267+
defer UnixUmask(userUmask)
269268

270269
archiveFilenames := []string{
271270
"testdata/permissions.zip",
@@ -287,11 +286,11 @@ func TestUnixPermissions(t *testing.T) {
287286
if strings.HasPrefix(filename, "dir") {
288287
desiredPermString, _ := strings.CutPrefix(filename, "dir")
289288
desiredPerms, _ := strconv.ParseUint(desiredPermString, 8, 32)
290-
require.Equal(t, os.ModeDir|os.FileMode(desiredPerms), info.Mode())
289+
require.Equal(t, os.ModeDir|os.FileMode(OsDirPerms(desiredPerms)), info.Mode())
291290
} else if strings.HasPrefix(filename, "file") {
292291
desiredPermString, _ := strings.CutPrefix(filename, "file")
293292
desiredPerms, _ := strconv.ParseUint(desiredPermString, 8, 32)
294-
require.Equal(t, os.FileMode(desiredPerms), info.Mode())
293+
require.Equal(t, os.FileMode(OsFilePerms(desiredPerms)), info.Mode())
295294
}
296295
return nil
297296
})
@@ -300,8 +299,8 @@ func TestUnixPermissions(t *testing.T) {
300299

301300
func TestZipDirectoryPermissions(t *testing.T) {
302301
// Disable user's umask to enable creation of files with any permission, restore it after the test
303-
userUmask := unix.Umask(0)
304-
defer unix.Umask(userUmask)
302+
userUmask := UnixUmaskZero()
303+
defer UnixUmask(userUmask)
305304

306305
// This arduino library has files before their containing directories in the zip,
307306
// so a good test case that these directory permissions are created correctly
@@ -321,9 +320,9 @@ func TestZipDirectoryPermissions(t *testing.T) {
321320
// Test files and directories (excluding the parent) match permissions from the zip file
322321
if path != tmp.String() {
323322
if info.IsDir() {
324-
require.Equal(t, os.ModeDir|os.FileMode(0755), info.Mode())
323+
require.Equal(t, os.ModeDir|os.FileMode(OsDirPerms(0755)), info.Mode())
325324
} else {
326-
require.Equal(t, os.FileMode(0644), info.Mode())
325+
require.Equal(t, os.FileMode(OsFilePerms(0644)), info.Mode())
327326
}
328327
}
329328
return nil

umask_unix_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//go:build !windows
2+
3+
package extract_test
4+
5+
import "golang.org/x/sys/unix"
6+
7+
func UnixUmaskZero() int {
8+
return unix.Umask(0)
9+
}
10+
11+
func UnixUmask(userUmask int) {
12+
unix.Umask(userUmask)
13+
}
14+
15+
func OsFilePerms(unixPerms uint64) uint64 {
16+
return unixPerms
17+
}
18+
19+
func OsDirPerms(unixPerms uint64) uint64 {
20+
return unixPerms
21+
}

umask_windows_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//go:build windows
2+
3+
package extract_test
4+
5+
func UnixUmaskZero() int {
6+
return 0
7+
}
8+
9+
func UnixUmask(userUmask int) {
10+
}
11+
12+
func OsFilePerms(unixPerms uint64) uint64 {
13+
// Go on Windows just uses 666/444 for files depending on whether "read only" is set
14+
globalPerms := unixPerms >> 6
15+
return globalPerms | (globalPerms << 3) | (globalPerms << 6)
16+
}
17+
18+
func OsDirPerms(unixPerms uint64) uint64 {
19+
// Go on Windows just uses 777 for directories
20+
return 0777
21+
}

0 commit comments

Comments
 (0)