diff options
Diffstat (limited to 'src/syscall/syscall_linux_test.go')
| -rw-r--r-- | src/syscall/syscall_linux_test.go | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/src/syscall/syscall_linux_test.go b/src/syscall/syscall_linux_test.go index 24158bb8b8..99de6ebaf2 100644 --- a/src/syscall/syscall_linux_test.go +++ b/src/syscall/syscall_linux_test.go @@ -57,25 +57,27 @@ const ( _AT_SYMLINK_NOFOLLOW = 0x100 _AT_FDCWD = -0x64 _AT_EACCESS = 0x200 + _F_OK = 0 + _R_OK = 4 ) func TestFaccessat(t *testing.T) { defer chtmpdir(t)() touch(t, "file1") - err := syscall.Faccessat(_AT_FDCWD, "file1", syscall.O_RDONLY, 0) + err := syscall.Faccessat(_AT_FDCWD, "file1", _R_OK, 0) if err != nil { t.Errorf("Faccessat: unexpected error: %v", err) } - err = syscall.Faccessat(_AT_FDCWD, "file1", syscall.O_RDONLY, 2) + err = syscall.Faccessat(_AT_FDCWD, "file1", _R_OK, 2) if err != syscall.EINVAL { t.Errorf("Faccessat: unexpected error: %v, want EINVAL", err) } - err = syscall.Faccessat(_AT_FDCWD, "file1", syscall.O_RDONLY, _AT_EACCESS) - if err != syscall.EOPNOTSUPP { - t.Errorf("Faccessat: unexpected error: %v, want EOPNOTSUPP", err) + err = syscall.Faccessat(_AT_FDCWD, "file1", _R_OK, _AT_EACCESS) + if err != nil { + t.Errorf("Faccessat: unexpected error: %v", err) } err = os.Symlink("file1", "symlink1") @@ -83,9 +85,31 @@ func TestFaccessat(t *testing.T) { t.Fatal(err) } - err = syscall.Faccessat(_AT_FDCWD, "symlink1", syscall.O_RDONLY, _AT_SYMLINK_NOFOLLOW) - if err != syscall.EOPNOTSUPP { - t.Errorf("Faccessat: unexpected error: %v, want EOPNOTSUPP", err) + err = syscall.Faccessat(_AT_FDCWD, "symlink1", _R_OK, _AT_SYMLINK_NOFOLLOW) + if err != nil { + t.Errorf("Faccessat SYMLINK_NOFOLLOW: unexpected error %v", err) + } + + // We can't really test _AT_SYMLINK_NOFOLLOW, because there + // doesn't seem to be any way to change the mode of a symlink. + // We don't test _AT_EACCESS because such tests are only + // meaningful if run as root. + + err = syscall.Fchmodat(_AT_FDCWD, "file1", 0, 0) + if err != nil { + t.Errorf("Fchmodat: unexpected error %v", err) + } + + err = syscall.Faccessat(_AT_FDCWD, "file1", _F_OK, _AT_SYMLINK_NOFOLLOW) + if err != nil { + t.Errorf("Faccessat: unexpected error: %v", err) + } + + err = syscall.Faccessat(_AT_FDCWD, "file1", _R_OK, _AT_SYMLINK_NOFOLLOW) + if err != syscall.EACCES { + if syscall.Getuid() != 0 { + t.Errorf("Faccessat: unexpected error: %v, want EACCES", err) + } } } |
