github.com/snowflakedb/gosnowflake@v1.9.0/permissions_test.go (about) 1 //go:build !windows 2 3 package gosnowflake 4 5 import ( 6 "fmt" 7 "golang.org/x/sys/unix" 8 "os" 9 "path" 10 "testing" 11 ) 12 13 func TestConfigPermissions(t *testing.T) { 14 testCases := []struct { 15 filePerm int 16 isValid bool 17 }{ 18 {filePerm: 0700, isValid: true}, 19 {filePerm: 0600, isValid: true}, 20 {filePerm: 0500, isValid: true}, 21 {filePerm: 0400, isValid: true}, 22 {filePerm: 0300, isValid: true}, 23 {filePerm: 0200, isValid: true}, 24 {filePerm: 0100, isValid: true}, 25 {filePerm: 0707, isValid: false}, 26 {filePerm: 0706, isValid: false}, 27 {filePerm: 0705, isValid: true}, 28 {filePerm: 0704, isValid: true}, 29 {filePerm: 0703, isValid: false}, 30 {filePerm: 0702, isValid: false}, 31 {filePerm: 0701, isValid: true}, 32 {filePerm: 0770, isValid: false}, 33 {filePerm: 0760, isValid: false}, 34 {filePerm: 0750, isValid: true}, 35 {filePerm: 0740, isValid: true}, 36 {filePerm: 0730, isValid: false}, 37 {filePerm: 0720, isValid: false}, 38 {filePerm: 0710, isValid: true}, 39 } 40 41 oldMask := unix.Umask(0000) 42 defer unix.Umask(oldMask) 43 44 for _, tc := range testCases { 45 t.Run(fmt.Sprintf("0%o", tc.filePerm), func(t *testing.T) { 46 tempFile := path.Join(t.TempDir(), fmt.Sprintf("filePerm_%o", tc.filePerm)) 47 err := os.WriteFile(tempFile, nil, os.FileMode(tc.filePerm)) 48 assertNilE(t, err) 49 defer os.Remove(tempFile) 50 err = validateCfgPerm(tempFile) 51 if err != nil && tc.isValid { 52 t.Error(err) 53 } 54 }) 55 } 56 } 57 58 func TestLogDirectoryPermissions(t *testing.T) { 59 testCases := []struct { 60 dirPerm int 61 limitedToUser bool 62 }{ 63 {dirPerm: 0700, limitedToUser: true}, 64 {dirPerm: 0600, limitedToUser: false}, 65 {dirPerm: 0500, limitedToUser: false}, 66 {dirPerm: 0400, limitedToUser: false}, 67 {dirPerm: 0300, limitedToUser: false}, 68 {dirPerm: 0200, limitedToUser: false}, 69 {dirPerm: 0100, limitedToUser: false}, 70 {dirPerm: 0707, limitedToUser: false}, 71 {dirPerm: 0706, limitedToUser: false}, 72 {dirPerm: 0705, limitedToUser: false}, 73 {dirPerm: 0704, limitedToUser: false}, 74 {dirPerm: 0703, limitedToUser: false}, 75 {dirPerm: 0702, limitedToUser: false}, 76 {dirPerm: 0701, limitedToUser: false}, 77 {dirPerm: 0770, limitedToUser: false}, 78 {dirPerm: 0760, limitedToUser: false}, 79 {dirPerm: 0750, limitedToUser: false}, 80 {dirPerm: 0740, limitedToUser: false}, 81 {dirPerm: 0730, limitedToUser: false}, 82 {dirPerm: 0720, limitedToUser: false}, 83 {dirPerm: 0710, limitedToUser: false}, 84 } 85 86 oldMask := unix.Umask(0000) 87 defer unix.Umask(oldMask) 88 89 for _, tc := range testCases { 90 t.Run(fmt.Sprintf("0%o", tc.dirPerm), func(t *testing.T) { 91 tempDir := path.Join(t.TempDir(), fmt.Sprintf("filePerm_%o", tc.dirPerm)) 92 err := os.Mkdir(tempDir, os.FileMode(tc.dirPerm)) 93 assertNilE(t, err) 94 defer os.Remove(tempDir) 95 result, _, err := isDirAccessCorrect(tempDir) 96 if err != nil && tc.limitedToUser { 97 t.Error(err) 98 } 99 assertEqualE(t, result, tc.limitedToUser) 100 }) 101 } 102 }