Source file
src/os/root_unix_test.go
1
2
3
4
5
6
7 package os_test
8
9 import (
10 "fmt"
11 "os"
12 "runtime"
13 "syscall"
14 "testing"
15 )
16
17 func TestRootChown(t *testing.T) {
18 if runtime.GOOS == "wasip1" {
19 t.Skip("Chown not supported on " + runtime.GOOS)
20 }
21
22
23 f := newFile(t)
24 dir, err := f.Stat()
25 if err != nil {
26 t.Fatal(err)
27 }
28 sys := dir.Sys().(*syscall.Stat_t)
29
30 groups, err := os.Getgroups()
31 if err != nil {
32 t.Fatalf("getgroups: %v", err)
33 }
34 groups = append(groups, os.Getgid())
35 for _, test := range rootTestCases {
36 test.run(t, func(t *testing.T, target string, root *os.Root) {
37 if target != "" {
38 if err := os.WriteFile(target, nil, 0o666); err != nil {
39 t.Fatal(err)
40 }
41 }
42 for _, gid := range groups {
43 err := root.Chown(test.open, -1, gid)
44 if errEndsTest(t, err, test.wantError, "root.Chown(%q, -1, %v)", test.open, gid) {
45 return
46 }
47 checkUidGid(t, target, int(sys.Uid), gid)
48 }
49 })
50 }
51 }
52
53 func TestRootConsistencyChown(t *testing.T) {
54 if runtime.GOOS == "wasip1" {
55 t.Skip("Chown not supported on " + runtime.GOOS)
56 }
57 groups, err := os.Getgroups()
58 if err != nil {
59 t.Fatalf("getgroups: %v", err)
60 }
61 var gid int
62 if len(groups) == 0 {
63 gid = os.Getgid()
64 } else {
65 gid = groups[0]
66 }
67 for _, test := range rootConsistencyTestCases {
68 test.run(t, func(t *testing.T, path string, r *os.Root) (string, error) {
69 chown := os.Chown
70 lstat := os.Lstat
71 if r != nil {
72 chown = r.Chown
73 lstat = r.Lstat
74 }
75 err := chown(path, -1, gid)
76 if err != nil {
77 return "", err
78 }
79 fi, err := lstat(path)
80 if err != nil {
81 return "", err
82 }
83 sys := fi.Sys().(*syscall.Stat_t)
84 return fmt.Sprintf("%v %v", sys.Uid, sys.Gid), nil
85 })
86 }
87 }
88
View as plain text