summaryrefslogtreecommitdiffstats
path: root/pw/tests
diff options
context:
space:
mode:
authorBaptiste Daroussin <bapt@FreeBSD.org>2015-08-02 12:47:50 +0000
committerBaptiste Daroussin <bapt@FreeBSD.org>2015-08-02 12:47:50 +0000
commit0c4addea3407c6268cd01be51e8d56a804e5b15d (patch)
tree6a632c6d718df3fdad70db4b8a3569a58f595176 /pw/tests
parentf1bef959a51e2994216735586c6ef525f2728f10 (diff)
downloadpw-darwin-0c4addea3407c6268cd01be51e8d56a804e5b15d.tar.gz
pw-darwin-0c4addea3407c6268cd01be51e8d56a804e5b15d.tar.zst
pw-darwin-0c4addea3407c6268cd01be51e8d56a804e5b15d.zip
Rewrite parsing subcommands arguments of pw(8)
Now each subcommands checks its arguments in a dedicated functions. This helps improving input validation, code readability/maintainability While here: - Add a -y option to pw userdel/usermod so it can maintain NIS servers if nispasswd is not defined in pw.conf(5) - Allow pw -r <rootdir> to remove directory with userdel -r - Fix bug when renaming a user which was not renaming the user name it groups it is a member of. - Only parse pw.conf(5) when needed.
Diffstat (limited to 'pw/tests')
-rwxr-xr-xpw/tests/pw_groupdel.sh2
-rwxr-xr-xpw/tests/pw_useradd.sh15
-rwxr-xr-xpw/tests/pw_userdel.sh2
-rwxr-xr-xpw/tests/pw_usermod.sh49
4 files changed, 60 insertions, 8 deletions
diff --git a/pw/tests/pw_groupdel.sh b/pw/tests/pw_groupdel.sh
index 75b063a..88cc0e0 100755
--- a/pw/tests/pw_groupdel.sh
+++ b/pw/tests/pw_groupdel.sh
@@ -13,7 +13,7 @@ group_do_not_delete_wheel_if_group_unknown_head() {
group_do_not_delete_wheel_if_group_unknown_body() {
populate_etc_skel
atf_check -s exit:0 -o inline:"wheel:*:0:root\n" -x ${PW} groupshow wheel
- atf_check -e inline:"pw: -g expects a number\n" -s exit:64 -x \
+ atf_check -e inline:"pw: Bad id 'I_do_not_exist': invalid\n" -s exit:64 -x \
${PW} groupdel -g I_do_not_exist
atf_check -s exit:0 -o inline:"wheel:*:0:root\n" -x ${PW} groupshow wheel
}
diff --git a/pw/tests/pw_useradd.sh b/pw/tests/pw_useradd.sh
index 7306387..401769b 100755
--- a/pw/tests/pw_useradd.sh
+++ b/pw/tests/pw_useradd.sh
@@ -250,9 +250,9 @@ user_add_R_body() {
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_check -s exit:0 ${RPW} useradd bar
+ atf_check -s exit:0 ${RPW} userdel bar -r
+ [ ! -d ${HOME}/home/bar ] || atf_fail "Directory not removed"
}
atf_test_case user_add_skel
@@ -296,6 +296,14 @@ user_add_uid_too_large_body() {
${PW} useradd -n test1 -u 9999999999999
}
+atf_test_case user_add_bad_shell
+user_add_bad_shell_body() {
+ populate_etc_skel
+
+ atf_check -s exit:0 ${PW} useradd foo -s sh
+ atf_check -s exit:78 -e ignore ${PW} useradd bar -s badshell
+}
+
atf_init_test_cases() {
atf_add_test_case user_add
atf_add_test_case user_add_noupdate
@@ -321,4 +329,5 @@ atf_init_test_cases() {
atf_add_test_case user_add_skel
atf_add_test_case user_add_uid0
atf_add_test_case user_add_uid_too_large
+ atf_add_test_case user_add_bad_shell
}
diff --git a/pw/tests/pw_userdel.sh b/pw/tests/pw_userdel.sh
index 1305cb7..f608029 100755
--- a/pw/tests/pw_userdel.sh
+++ b/pw/tests/pw_userdel.sh
@@ -27,7 +27,7 @@ user_do_not_try_to_delete_root_if_user_unknown_head() {
}
user_do_not_try_to_delete_root_if_user_unknown_body() {
populate_etc_skel
- atf_check -e inline:"pw: -u expects a number\n" -s exit:64 -x \
+ atf_check -e inline:"pw: Bad id 'plop': invalid\n" -s exit:64 -x \
${PW} userdel -u plop
}
diff --git a/pw/tests/pw_usermod.sh b/pw/tests/pw_usermod.sh
index 006bb2c..7acc7a5 100755
--- a/pw/tests/pw_usermod.sh
+++ b/pw/tests/pw_usermod.sh
@@ -100,6 +100,36 @@ user_mod_name_noupdate_body() {
grep "^foo:.*" $HOME/master.passwd
}
+atf_test_case user_mod_rename_multigroups
+user_mod_rename_multigroups_body() {
+ populate_etc_skel
+
+ atf_check -s exit:0 ${PW} groupadd test1
+ atf_check -s exit:0 ${PW} groupadd test2
+ atf_check -s exit:0 ${PW} useradd foo -G test1,test2
+ atf_check -o match:"foo" -s exit:0 ${PW} groupshow test1
+ atf_check -o match:"foo" -s exit:0 ${PW} groupshow test2
+ atf_check -s exit:0 ${PW} usermod foo -l bar
+ atf_check -o match:"bar" -s exit:0 ${PW} groupshow test1
+ atf_check -o match:"bar" -s exit:0 ${PW} groupshow test2
+}
+
+atf_test_case user_mod_nogroups
+user_mod_nogroups_body() {
+ populate_etc_skel
+
+ atf_check -s exit:0 ${PW} groupadd test1
+ atf_check -s exit:0 ${PW} groupadd test2
+ atf_check -s exit:0 ${PW} groupadd test3
+ atf_check -s exit:0 ${PW} groupadd test4
+ atf_check -s exit:0 ${PW} useradd foo -G test1,test2
+ atf_check -o match:"foo" -s exit:0 ${PW} groupshow test1
+ atf_check -o match:"foo" -s exit:0 ${PW} groupshow test2
+ atf_check -s exit:0 ${PW} usermod foo -G test3,test4
+ atf_check -s exit:0 -o inline:"test3\ntest4\n" \
+ awk -F\: '$4 == "foo" { print $1 }' ${HOME}/group
+}
+
atf_test_case user_mod_rename
user_mod_rename_body() {
populate_etc_skel
@@ -134,7 +164,7 @@ user_mod_h_body() {
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" \
+ atf_check -e inline:"pw: Bad file descriptor 'a': invalid\n" \
-s exit:64 ${PW} usermod foo -h a <<- EOF
$(echo a)
EOF
@@ -150,10 +180,21 @@ user_mod_H_body() {
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" \
+ atf_check -s exit:64 -e inline:"pw: -H expects a file descriptor\n" \
${PW} usermod foo -H -
}
+atf_test_case user_mod_renamehome
+user_mod_renamehome_body() {
+ populate_root_etc_skel
+
+ mkdir -p ${HOME}/home
+ atf_check -s exit:0 ${RPW} useradd foo -m
+ test -d ${HOME}/home/foo || atf_fail "Directory not created"
+ atf_check -s exit:0 ${RPW} usermod foo -l bar -d /home/bar -m
+ test -d ${HOME}/home/bar || atf_fail "Directory not created"
+}
+
atf_init_test_cases() {
atf_add_test_case user_mod
atf_add_test_case user_mod_noupdate
@@ -161,10 +202,12 @@ atf_init_test_cases() {
atf_add_test_case user_mod_comments_noupdate
atf_add_test_case user_mod_comments_invalid
atf_add_test_case user_mod_comments_invalid_noupdate
+ atf_add_test_case user_mod_nogroups
atf_add_test_case user_mod_rename
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_rename_multigroups
atf_add_test_case user_mod_h
atf_add_test_case user_mod_H
+ atf_add_test_case user_mod_renamehome
}