mirror of
https://github.com/Luzifer/password.git
synced 2024-12-30 09:41:19 +00:00
199 lines
3.7 KiB
Go
199 lines
3.7 KiB
Go
|
// 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)
|
||
|
}
|
||
|
}
|