Source file
src/os/user/user_test.go
Documentation: os/user
1
2
3
4
5 package user
6
7 import (
8 "runtime"
9 "testing"
10 )
11
12 func checkUser(t *testing.T) {
13 t.Helper()
14 if !userImplemented {
15 t.Skip("user: not implemented; skipping tests")
16 }
17 }
18
19 func TestCurrent(t *testing.T) {
20 u, err := Current()
21 if err != nil {
22 t.Fatalf("Current: %v (got %#v)", err, u)
23 }
24 if u.HomeDir == "" {
25 t.Errorf("didn't get a HomeDir")
26 }
27 if u.Username == "" {
28 t.Errorf("didn't get a username")
29 }
30 }
31
32 func BenchmarkCurrent(b *testing.B) {
33 for i := 0; i < b.N; i++ {
34 Current()
35 }
36 }
37
38 func compare(t *testing.T, want, got *User) {
39 if want.Uid != got.Uid {
40 t.Errorf("got Uid=%q; want %q", got.Uid, want.Uid)
41 }
42 if want.Username != got.Username {
43 t.Errorf("got Username=%q; want %q", got.Username, want.Username)
44 }
45 if want.Name != got.Name {
46 t.Errorf("got Name=%q; want %q", got.Name, want.Name)
47 }
48 if want.HomeDir != got.HomeDir {
49 t.Errorf("got HomeDir=%q; want %q", got.HomeDir, want.HomeDir)
50 }
51 if want.Gid != got.Gid {
52 t.Errorf("got Gid=%q; want %q", got.Gid, want.Gid)
53 }
54 }
55
56 func TestLookup(t *testing.T) {
57 checkUser(t)
58
59 if runtime.GOOS == "plan9" {
60 t.Skipf("Lookup not implemented on %q", runtime.GOOS)
61 }
62
63 want, err := Current()
64 if err != nil {
65 t.Fatalf("Current: %v", err)
66 }
67
68
69
70 got, err := Lookup(want.Username)
71 if err != nil {
72 t.Fatalf("Lookup: %v", err)
73 }
74 compare(t, want, got)
75 }
76
77 func TestLookupId(t *testing.T) {
78 checkUser(t)
79
80 if runtime.GOOS == "plan9" {
81 t.Skipf("LookupId not implemented on %q", runtime.GOOS)
82 }
83
84 want, err := Current()
85 if err != nil {
86 t.Fatalf("Current: %v", err)
87 }
88 got, err := LookupId(want.Uid)
89 if err != nil {
90 t.Fatalf("LookupId: %v", err)
91 }
92 compare(t, want, got)
93 }
94
95 func checkGroup(t *testing.T) {
96 t.Helper()
97 if !groupImplemented {
98 t.Skip("user: group not implemented; skipping test")
99 }
100 }
101
102 func TestLookupGroup(t *testing.T) {
103 checkGroup(t)
104 user, err := Current()
105 if err != nil {
106 t.Fatalf("Current(): %v", err)
107 }
108
109 g1, err := LookupGroupId(user.Gid)
110 if err != nil {
111
112
113
114 t.Logf("LookupGroupId(%q): %v", user.Gid, err)
115 return
116 }
117 if g1.Gid != user.Gid {
118 t.Errorf("LookupGroupId(%q).Gid = %s; want %s", user.Gid, g1.Gid, user.Gid)
119 }
120
121 g2, err := LookupGroup(g1.Name)
122 if err != nil {
123 t.Fatalf("LookupGroup(%q): %v", g1.Name, err)
124 }
125 if g1.Gid != g2.Gid || g1.Name != g2.Name {
126 t.Errorf("LookupGroup(%q) = %+v; want %+v", g1.Name, g2, g1)
127 }
128 }
129
130 func TestGroupIds(t *testing.T) {
131 checkGroup(t)
132 if runtime.GOOS == "aix" {
133 t.Skip("skipping GroupIds, see golang.org/issue/30563")
134 }
135 if runtime.GOOS == "illumos" {
136 t.Skip("skipping GroupIds, see golang.org/issue/14709")
137 }
138 user, err := Current()
139 if err != nil {
140 t.Fatalf("Current(): %v", err)
141 }
142 gids, err := user.GroupIds()
143 if err != nil {
144 t.Fatalf("%+v.GroupIds(): %v", user, err)
145 }
146 if !containsID(gids, user.Gid) {
147 t.Errorf("%+v.GroupIds() = %v; does not contain user GID %s", user, gids, user.Gid)
148 }
149 }
150
151 func containsID(ids []string, id string) bool {
152 for _, x := range ids {
153 if x == id {
154 return true
155 }
156 }
157 return false
158 }
159
View as plain text