summaryrefslogtreecommitdiffstats
path: root/pw/tests
diff options
context:
space:
mode:
Diffstat (limited to 'pw/tests')
-rwxr-xr-xpw/tests/helper_functions.shin16
-rwxr-xr-xpw/tests/pw_groupmod.sh27
-rwxr-xr-xpw/tests/pw_useradd.sh120
-rwxr-xr-xpw/tests/pw_userdel.sh20
-rwxr-xr-xpw/tests/pw_usermod.sh37
5 files changed, 219 insertions, 1 deletions
diff --git a/pw/tests/helper_functions.shin b/pw/tests/helper_functions.shin
index 3680dfe..1ee731a 100755
--- a/pw/tests/helper_functions.shin
+++ b/pw/tests/helper_functions.shin
@@ -2,11 +2,12 @@
# The pw command
PW="pw -V ${HOME}"
+RPW="pw -R ${HOME}"
# Workdir to run tests in
TESTDIR=$(atf_get_srcdir)
-# Populate the files pw needs to use into $HOME/etc
+# Populate the files pw needs to use into $HOME
populate_etc_skel() {
cp ${TESTDIR}/master.passwd ${HOME} || \
atf_fail "Populating master.passwd in ${HOME}"
@@ -16,3 +17,16 @@ populate_etc_skel() {
pwd_mkdb -p -d ${HOME} ${HOME}/master.passwd || \
atf_fail "generate passwd from master.passwd"
}
+
+# Populate the files pw needs to use into $HOME/etc
+populate_root_etc_skel() {
+ mkdir ${HOME}/etc
+ cp ${TESTDIR}/master.passwd ${HOME}/etc || \
+ atf_fail "Populating master.passwd in ${HOME}/etc"
+ cp ${TESTDIR}/group ${HOME}/etc || \
+ atf_fail "Populating group in ${HOME}/etc"
+
+ # Generate the passwd file
+ pwd_mkdb -p -d ${HOME}/etc ${HOME}//etc/master.passwd || \
+ atf_fail "generate passwd from master.passwd"
+}
diff --git a/pw/tests/pw_groupmod.sh b/pw/tests/pw_groupmod.sh
index 9ea8a6d..5806925 100755
--- a/pw/tests/pw_groupmod.sh
+++ b/pw/tests/pw_groupmod.sh
@@ -81,6 +81,32 @@ groupmod_rename_body() {
grep "^bar:.*" ${HOME}/group
}
+atf_test_case groupmod_members
+groupmod_members_body() {
+ populate_etc_skel
+
+ for i in user1 user2 user3 user4; do
+ atf_check -s exit:0 ${PW} useradd $i
+ done
+
+ atf_check -s exit:0 ${PW} groupadd foo -M "user1, user2"
+ atf_check -o inline:"foo:*:1005:user1,user2\n" -s exit:0 \
+ ${PW} groupshow foo
+ atf_check -s exit:0 ${PW} groupmod foo -m "user3, user4"
+ atf_check -o inline:"foo:*:1005:user1,user2,user3,user4\n" -s exit:0 \
+ ${PW} groupshow foo
+ atf_check -s exit:0 ${PW} groupmod foo -M "user1, user4"
+ atf_check -o inline:"foo:*:1005:user1,user4\n" -s exit:0 \
+ ${PW} groupshow foo
+ # what about duplicates
+ atf_check -s exit:0 ${PW} groupmod foo -m "user1, user2, user3, user4"
+ atf_check -o inline:"foo:*:1005:user1,user4,user2,user3\n" -s exit:0 \
+ ${PW} groupshow foo
+ atf_check -s exit:0 ${PW} groupmod foo -d "user1, user3"
+ atf_check -o inline:"foo:*:1005:user4,user2\n" -s exit:0 \
+ ${PW} groupshow foo
+}
+
atf_init_test_cases() {
atf_add_test_case groupmod_user
atf_add_test_case groupmod_invalid_user
@@ -88,4 +114,5 @@ atf_init_test_cases() {
atf_add_test_case usermod_bug_185666
atf_add_test_case do_not_duplicate_group_on_gid_change
atf_add_test_case groupmod_rename
+ atf_add_test_case groupmod_members
}
diff --git a/pw/tests/pw_useradd.sh b/pw/tests/pw_useradd.sh
index 27a8624..880dab5 100755
--- a/pw/tests/pw_useradd.sh
+++ b/pw/tests/pw_useradd.sh
@@ -176,6 +176,119 @@ user_add_name_too_long_body() {
${PW} useradd name_very_vert_very_very_very_long
}
+atf_test_case user_add_expiration
+user_add_expiration_body() {
+ populate_etc_skel
+
+ atf_check -s exit:0 \
+ ${PW} useradd foo -e 20-03-2043
+ atf_check -o inline:"foo:*:1001:1001::0:2310422400:User &:/home/foo:/bin/sh\n" \
+ -s exit:0 grep "^foo" ${HOME}/master.passwd
+ atf_check -s exit:0 ${PW} userdel foo
+ atf_check -s exit:0 \
+ ${PW} useradd foo -e 20-03-43
+ atf_check -o inline:"foo:*:1001:1001::0:2310422400:User &:/home/foo:/bin/sh\n" \
+ -s exit:0 grep "^foo" ${HOME}/master.passwd
+ atf_check -s exit:0 ${PW} userdel foo
+ atf_check -s exit:0 \
+ ${PW} useradd foo -e 20-Mar-2043
+ atf_check -o inline:"foo:*:1001:1001::0:2310422400:User &:/home/foo:/bin/sh\n" \
+ -s exit:0 grep "^foo" ${HOME}/master.passwd
+ atf_check -s exit:0 ${PW} userdel foo
+ atf_check -e inline:"pw: Invalid date\n" -s exit:1 \
+ ${PW} useradd foo -e 20-Foo-2043
+ atf_check -e inline:"pw: Invalid date\n" -s exit:1 \
+ ${PW} useradd foo -e 20-13-2043
+ atf_check -s exit:0 ${PW} useradd foo -e "12:00 20-03-2043"
+ atf_check -s exit:0 ${PW} userdel foo
+ atf_check -e inline:"pw: Invalid date\n" -s exit:1 \
+ ${PW} useradd foo -e "12 20-03-2043"
+ atf_check -s exit:0 ${PW} useradd foo -e "20-03-2043 12:00"
+ atf_check -s exit:0 ${PW} userdel foo
+}
+
+atf_test_case user_add_invalid_user_entry
+user_add_invalid_user_entry_body() {
+ touch ${HOME}/master.passwd
+ touch ${HOME}/group
+
+ pwd_mkdb -p -d ${HOME} ${HOME}/master.passwd || \
+ atf_fail "generate passwd from master.passwd"
+ atf_check -s exit:0 ${PW} useradd foo
+ echo "foo1:*:1002" >> ${HOME}/master.passwd
+ atf_check -s exit:1 -e match:"Invalid user entry" ${PW} useradd foo2
+}
+
+atf_test_case user_add_invalid_group_entry
+user_add_invalid_group_entry_body() {
+ touch ${HOME}/master.passwd
+ touch ${HOME}/group
+
+ pwd_mkdb -p -d ${HOME} ${HOME}/master.passwd || \
+ atf_fail "generate passwd from master.passwd"
+ atf_check -s exit:0 ${PW} useradd foo
+ echo 'foo1:*:1002' >> group
+ atf_check -s exit:1 -e match:"Invalid group entry" ${PW} useradd foo2
+}
+
+atf_test_case user_add_password_from_h
+user_add_password_from_h_body() {
+ populate_etc_skel
+
+ atf_check -s exit:0 ${PW} useradd test -h 0 <<-EOF
+ $(echo test)
+ EOF
+}
+
+atf_test_case user_add_R
+user_add_R_body() {
+ populate_root_etc_skel
+
+ atf_check -s exit:0 ${RPW} useradd foo
+ mkdir -p ${HOME}/home
+ atf_check -s exit:0 ${RPW} useradd bar -m
+ test -d ${HOME}/home/bar || atf_fail "Directory not created"
+ atf_check -s exit:0 ${RPW} userdel bar
+ test -d ${HOME}/home/bar || atf_fail "Directory removed"
+# atf_check -s exit:0 ${RPW} useradd bar
+# atf_check -s exit:0 ${RPW} userdel bar -r
+# test -d ${HOME}/home/bar && atf_fail "Directory not removed"
+}
+
+atf_test_case user_add_skel
+user_add_skel_body() {
+ populate_root_etc_skel
+
+ mkdir ${HOME}/skel
+ echo "a" > ${HOME}/skel/.a
+ echo "b" > ${HOME}/skel/b
+ mkdir ${HOME}/skel/c
+ mkdir ${HOME}/skel/c/d
+ mkdir ${HOME}/skel/dot.plop
+ echo "c" > ${HOME}/skel/c/d/dot.c
+ mkdir ${HOME}/home
+ ln -sf /nonexistent ${HOME}/skel/c/foo
+ atf_check -s exit:0 ${RPW} useradd foo -k /skel -m
+ test -d ${HOME}/home/foo || atf_fail "Directory not created"
+ test -f ${HOME}/home/foo/.a || atf_fail "File not created"
+ atf_check -o file:${HOME}/skel/.a -s exit:0 cat ${HOME}/home/foo/.a
+ atf_check -o file:${HOME}/skel/b -s exit:0 cat ${HOME}/home/foo/b
+ test -d ${HOME}/home/foo/c || atf_fail "Dotted directory in skel not copied"
+ test -d ${HOME}/home/foo/.plop || atf_fail "Directory in skell not created"
+ atf_check -o inline:"/nonexistent\n" -s ignore readlink -f ${HOME}/home/foo/c/foo
+ atf_check -o file:${HOME}/skel/c/d/dot.c -s exit:0 cat ${HOME}/home/foo/c/d/.c
+}
+
+atf_test_case user_add_uid0
+user_add_uid0_body() {
+ populate_etc_skel
+ atf_check -e inline:"pw: WARNING: new account \`foo' has a uid of 0 (superuser access!)\n" \
+ -s exit:0 ${PW} useradd foo -u 0 -g 0 -d /root -s /bin/sh -c "Bourne-again Superuser" -o
+ atf_check \
+ -o inline:"foo:*:0:0::0:0:Bourne-again Superuser:/root:/bin/sh\n" \
+ -s exit:0 ${PW} usershow foo
+}
+
atf_init_test_cases() {
atf_add_test_case user_add
atf_add_test_case user_add_noupdate
@@ -193,4 +306,11 @@ atf_init_test_cases() {
atf_add_test_case user_add_password_expiration_date_month
atf_add_test_case user_add_password_expiration_date_relative
atf_add_test_case user_add_name_too_long
+ atf_add_test_case user_add_expiration
+ atf_add_test_case user_add_invalid_user_entry
+ atf_add_test_case user_add_invalid_group_entry
+ atf_add_test_case user_add_password_from_h
+ atf_add_test_case user_add_R
+ atf_add_test_case user_add_skel
+ atf_add_test_case user_add_uid0
}
diff --git a/pw/tests/pw_userdel.sh b/pw/tests/pw_userdel.sh
index 71a7033..5ba87c2 100755
--- a/pw/tests/pw_userdel.sh
+++ b/pw/tests/pw_userdel.sh
@@ -31,7 +31,27 @@ user_do_not_try_to_delete_root_if_user_unknown_body() {
${PW} userdel -u plop
}
+atf_test_case delete_files
+delete_files_body() {
+ populate_root_etc_skel
+
+ mkdir -p ${HOME}/skel
+ touch ${HOME}/skel/a
+ mkdir -p ${HOME}/home
+ mkdir -p ${HOME}/var/mail
+ echo "foo wedontcare" > ${HOME}/etc/opiekeys
+ atf_check -s exit:0 ${RPW} useradd foo -k /skel -m
+ test -d ${HOME}/home || atf_fail "Fail to create home directory"
+ test -f ${HOME}/var/mail/foo || atf_fail "Mail file not created"
+ atf_check -s exit:0 ${RPW} userdel foo -r
+ atf_check -s exit:0 -o inline:"#oo wedontcare\n" cat ${HOME}/etc/opiekeys
+ if test -f ${HOME}/var/mail/foo; then
+ atf_fail "Mail file not removed"
+ fi
+}
+
atf_init_test_cases() {
atf_add_test_case rmuser_seperate_group
atf_add_test_case user_do_not_try_to_delete_root_if_user_unknown
+ atf_add_test_case delete_files
}
diff --git a/pw/tests/pw_usermod.sh b/pw/tests/pw_usermod.sh
index dbc6481..006bb2c 100755
--- a/pw/tests/pw_usermod.sh
+++ b/pw/tests/pw_usermod.sh
@@ -119,6 +119,41 @@ user_mod_rename_too_long_body() {
-l name_very_very_very_very_very_long
}
+atf_test_case user_mod_h
+user_mod_h_body() {
+ populate_etc_skel
+
+ atf_check -s exit:0 ${PW} useradd foo
+ atf_check -s exit:0 ${PW} usermod foo -h 0 <<- EOF
+ $(echo a)
+ EOF
+ atf_check -s exit:0 -o not-match:"^foo:\*:.*" \
+ grep "^foo" ${HOME}/master.passwd
+ atf_check -s exit:0 ${PW} usermod foo -h - <<- EOF
+ $(echo b)
+ EOF
+ atf_check -s exit:0 -o match:"^foo:\*:.*" \
+ grep "^foo" ${HOME}/master.passwd
+ atf_check -e inline:"pw: '-h' expects a file descriptor or '-'\n" \
+ -s exit:64 ${PW} usermod foo -h a <<- EOF
+ $(echo a)
+ EOF
+}
+
+atf_test_case user_mod_H
+user_mod_H_body() {
+ populate_etc_skel
+
+ atf_check -s exit:0 ${PW} useradd foo
+ atf_check -s exit:0 ${PW} usermod foo -H 0 <<- EOF
+ $(echo a)
+ EOF
+ atf_check -s exit:0 -o match:"^foo:a:.*" \
+ grep "^foo" ${HOME}/master.passwd
+ atf_check -s exit:64 -e inline:"pw: '-H' expects a file descriptor\n" \
+ ${PW} usermod foo -H -
+}
+
atf_init_test_cases() {
atf_add_test_case user_mod
atf_add_test_case user_mod_noupdate
@@ -130,4 +165,6 @@ atf_init_test_cases() {
atf_add_test_case user_mod_name_noupdate
atf_add_test_case user_mod_rename
atf_add_test_case user_mod_rename_too_long
+ atf_add_test_case user_mod_h
+ atf_add_test_case user_mod_H
}