| // Copyright 2011 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package user |
| |
| import ( |
| "os" |
| "reflect" |
| "runtime" |
| "syscall" |
| "testing" |
| ) |
| |
| func skip(t *testing.T) bool { |
| if runtime.GOARCH == "arm" { |
| t.Logf("user: cgo not implemented on arm; skipping tests") |
| return true |
| } |
| |
| if runtime.GOOS == "linux" || runtime.GOOS == "freebsd" || runtime.GOOS == "darwin" { |
| return false |
| } |
| |
| t.Logf("user: Lookup not implemented on %s; skipping test", runtime.GOOS) |
| return true |
| } |
| |
| func TestLookup(t *testing.T) { |
| if skip(t) { |
| return |
| } |
| |
| // Test LookupId on the current user |
| uid := syscall.Getuid() |
| u, err := LookupId(uid) |
| if err != nil { |
| t.Fatalf("LookupId: %v", err) |
| } |
| if e, g := uid, u.Uid; e != g { |
| t.Errorf("expected Uid of %d; got %d", e, g) |
| } |
| fi, err := os.Stat(u.HomeDir) |
| if err != nil || !fi.IsDirectory() { |
| t.Errorf("expected a valid HomeDir; stat(%q): err=%v, IsDirectory=%v", u.HomeDir, err, fi.IsDirectory()) |
| } |
| if u.Username == "" { |
| t.Fatalf("didn't get a username") |
| } |
| |
| // Test Lookup by username, using the username from LookupId |
| un, err := Lookup(u.Username) |
| if err != nil { |
| t.Fatalf("Lookup: %v", err) |
| } |
| if !reflect.DeepEqual(u, un) { |
| t.Errorf("Lookup by userid vs. name didn't match\n"+ |
| "LookupId(%d): %#v\n"+ |
| "Lookup(%q): %#v\n",uid, u, u.Username, un) |
| } |
| } |