1
0
mirror of https://github.com/Luzifer/password.git synced 2024-09-20 10:52:57 +00:00
password/vendor/github.com/tredoe/osutil/user/user_test.go

199 lines
3.7 KiB
Go
Raw Normal View History

// Copyright 2010 Jonas mg
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package user
import (
"bufio"
"io"
"os"
"testing"
)
func TestUserParser(t *testing.T) {
f, err := os.Open(_USER_FILE)
if err != nil {
t.Fatal(err)
}
defer f.Close()
buf := bufio.NewReader(f)
for {
line, _, err := buf.ReadLine()
if err != nil {
if err == io.EOF {
break
}
t.Error(err)
continue
}
if _, err = parseUser(string(line)); err != nil {
t.Error(err)
}
}
}
func TestUserFull(t *testing.T) {
entry, err := LookupUID(os.Getuid())
if err != nil || entry == nil {
t.Error(err)
}
entry, err = LookupUser("root")
if err != nil || entry == nil {
t.Error(err)
}
entries, err := LookupInUser(U_GID, 65534, -1)
if err != nil || entries == nil {
t.Error(err)
}
entries, err = LookupInUser(U_GECOS, "", -1)
if err != nil || entries == nil {
t.Error(err)
}
entries, err = LookupInUser(U_DIR, "/bin", -1)
if err != nil || entries == nil {
t.Error(err)
}
entries, err = LookupInUser(U_SHELL, "/bin/false", -1)
if err != nil || entries == nil {
t.Error(err)
}
entries, err = LookupInUser(U_ALL, nil, -1)
if err != nil || len(entries) == 0 {
t.Error(err)
}
}
func TestUserCount(t *testing.T) {
count := 2
entries, err := LookupInUser(U_SHELL, "/bin/false", count)
if err != nil || len(entries) != count {
t.Error(err)
}
count = 5
entries, err = LookupInUser(U_ALL, nil, count)
if err != nil || len(entries) != count {
t.Error(err)
}
}
func TestUserError(t *testing.T) {
_, err := LookupUser("!!!???")
if _, ok := err.(NoFoundError); !ok {
t.Error("expected to report NoFoundError")
}
if _, err = LookupInUser(U_SHELL, "/bin/false", 0); err != errSearch {
t.Error("expected to report errSearch")
}
u := &User{}
if _, err = u.Add(); err != RequiredError("Name") {
t.Error("expected to report RequiredError")
}
u = &User{Name: USER, Dir: config.useradd.HOME, Shell: config.useradd.SHELL}
if _, err = u.Add(); err != HomeError(config.useradd.HOME) {
t.Error("expected to report HomeError")
}
}
func TestUser_Add(t *testing.T) {
user := NewUser(USER, GID)
user.Dir = "/tmp"
_testUser_Add(t, user, false)
user = NewSystemUser(SYS_USER, "/tmp", GID)
_testUser_Add(t, user, true)
}
func _testUser_Add(t *testing.T, user *User, ofSystem bool) {
prefix := "user"
if ofSystem {
prefix = "system " + prefix
}
id, err := user.Add()
if err != nil {
t.Fatal(err)
}
if id == -1 {
t.Errorf("%s: got UID = -1", prefix)
}
if _, err = user.Add(); err == nil {
t.Fatalf("%s: an existent user can not be added again", prefix)
} else {
if !IsExist(err) {
t.Errorf("%s: expected to report ErrExist", prefix)
}
}
if ofSystem {
if !user.IsOfSystem() {
t.Errorf("%s: IsOfSystem(): expected true")
}
} else {
if user.IsOfSystem() {
t.Errorf("%s: IsOfSystem(): expected false")
}
}
// Check value stored
name := ""
if ofSystem {
name = SYS_USER
} else {
name = USER
}
u, err := LookupUser(name)
if err != nil {
t.Fatalf("%s: ", err)
}
if u.Name != name {
t.Errorf("%s: expected to get name %q", prefix, name)
}
}
func TestUserLock(t *testing.T) {
err := LockUser(USER)
if err != nil {
t.Fatal(err)
}
s, err := LookupShadow(USER)
if err != nil {
t.Fatal(err)
}
if s.password[0] != _LOCK_CHAR {
t.Fatalf("expected to get password starting with '%c', got: '%c'",
_LOCK_CHAR, s.password[0])
}
err = UnlockUser(USER)
if err != nil {
t.Fatal(err)
}
s, err = LookupShadow(USER)
if err != nil {
t.Fatal(err)
}
if s.password[0] == _LOCK_CHAR {
t.Fatalf("no expected to get password starting with '%c'", _LOCK_CHAR)
}
}