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  }