pw_usermod_test.sh revision 286196
1# $FreeBSD: head/usr.sbin/pw/tests/pw_usermod.sh 286196 2015-08-02 12:47:50Z bapt $
2
3# Import helper functions
4. $(atf_get_srcdir)/helper_functions.shin
5
6# Test modifying a user
7atf_test_case user_mod
8user_mod_body() {
9	populate_etc_skel
10
11	atf_check -s exit:67 -e match:"no such user" ${PW} usermod test
12	atf_check -s exit:0 ${PW} useradd test
13	atf_check -s exit:0 ${PW} usermod test
14	atf_check -s exit:0 -o match:"^test:.*" \
15		grep "^test:.*" $HOME/master.passwd
16}
17
18# Test modifying a user with option -N
19atf_test_case user_mod_noupdate
20user_mod_noupdate_body() {
21	populate_etc_skel
22
23	atf_check -s exit:67 -e match:"no such user" ${PW} usermod test -N
24	atf_check -s exit:0 ${PW} useradd test
25	atf_check -s exit:0 -o match:"^test:.*" ${PW} usermod test -N
26	atf_check -s exit:0 -o match:"^test:.*" \
27		grep "^test:.*" $HOME/master.passwd
28}
29
30# Test modifying a user with comments
31atf_test_case user_mod_comments
32user_mod_comments_body() {
33	populate_etc_skel
34
35	atf_check -s exit:0 ${PW} useradd test -c "Test User,home,123,456"
36	atf_check -s exit:0 ${PW} usermod test -c "Test User,work,123,456"
37	atf_check -s exit:0 -o match:"^test:.*:Test User,work,123,456:" \
38		grep "^test:.*:Test User,work,123,456:" $HOME/master.passwd
39}
40
41# Test modifying a user with comments with option -N
42atf_test_case user_mod_comments_noupdate
43user_mod_comments_noupdate_body() {
44	populate_etc_skel
45
46	atf_check -s exit:0 ${PW} useradd test -c "Test User,home,123,456"
47	atf_check -s exit:0 -o match:"^test:.*:Test User,work,123,456:" \
48		${PW} usermod test -c "Test User,work,123,456" -N
49	atf_check -s exit:0 -o match:"^test:.*:Test User,home,123,456:" \
50		grep "^test:.*:Test User,home,123,456:" $HOME/master.passwd
51}
52
53# Test modifying a user with invalid comments
54atf_test_case user_mod_comments_invalid
55user_mod_comments_invalid_body() {
56	populate_etc_skel
57
58	atf_check -s exit:0 ${PW} useradd test
59	atf_check -s exit:65 -e match:"invalid character" \
60		${PW} usermod test -c "Test User,work,123:456,456"
61	atf_check -s exit:1 -o empty \
62		grep "^test:.*:Test User,work,123:456,456:" $HOME/master.passwd
63	atf_check -s exit:0 -o match:"^test:\*" \
64		grep "^test:\*" $HOME/master.passwd
65}
66
67# Test modifying a user with invalid comments with option -N
68atf_test_case user_mod_comments_invalid_noupdate
69user_mod_comments_invalid_noupdate_body() {
70	populate_etc_skel
71
72	atf_check -s exit:0 ${PW} useradd test
73	atf_check -s exit:65 -e match:"invalid character" \
74		${PW} usermod test -c "Test User,work,123:456,456" -N
75	atf_check -s exit:1 -o empty \
76		grep "^test:.*:Test User,work,123:456,456:" $HOME/master.passwd
77	atf_check -s exit:0 -o match:"^test:\*" \
78		grep "^test:\*" $HOME/master.passwd
79}
80
81# Test modifying a user name with -l
82atf_test_case user_mod_name
83user_mod_name_body() {
84	populate_etc_skel
85
86	atf_check -s exit:0 ${PW} useradd foo
87	atf_check -s exit:0 ${PW} usermod foo -l "bar"
88	atf_check -s exit:0 -o match:"^bar:.*" \
89		grep "^bar:.*" $HOME/master.passwd
90}
91
92# Test modifying a user name with -l with option -N
93atf_test_case user_mod_name_noupdate
94user_mod_name_noupdate_body() {
95	populate_etc_skel
96
97	atf_check -s exit:0 ${PW} useradd foo
98	atf_check -s exit:0 -o match:"^bar:.*" ${PW} usermod foo -l "bar" -N
99	atf_check -s exit:0 -o match:"^foo:.*" \
100		grep "^foo:.*" $HOME/master.passwd
101}
102
103atf_test_case user_mod_rename_multigroups
104user_mod_rename_multigroups_body() {
105	populate_etc_skel
106
107	atf_check -s exit:0 ${PW} groupadd test1
108	atf_check -s exit:0 ${PW} groupadd test2
109	atf_check -s exit:0 ${PW} useradd foo -G test1,test2
110	atf_check -o match:"foo" -s exit:0 ${PW} groupshow test1
111	atf_check -o match:"foo" -s exit:0 ${PW} groupshow test2
112	atf_check -s exit:0 ${PW} usermod foo -l bar
113	atf_check -o match:"bar" -s exit:0 ${PW} groupshow test1
114	atf_check -o match:"bar" -s exit:0 ${PW} groupshow test2
115}
116
117atf_test_case user_mod_nogroups
118user_mod_nogroups_body() {
119	populate_etc_skel
120
121	atf_check -s exit:0 ${PW} groupadd test1
122	atf_check -s exit:0 ${PW} groupadd test2
123	atf_check -s exit:0 ${PW} groupadd test3
124	atf_check -s exit:0 ${PW} groupadd test4
125	atf_check -s exit:0 ${PW} useradd foo -G test1,test2
126	atf_check -o match:"foo" -s exit:0 ${PW} groupshow test1
127	atf_check -o match:"foo" -s exit:0 ${PW} groupshow test2
128	atf_check -s exit:0 ${PW} usermod foo -G test3,test4
129	atf_check -s exit:0 -o inline:"test3\ntest4\n" \
130		awk -F\: '$4 == "foo" { print $1 }' ${HOME}/group
131}
132
133atf_test_case user_mod_rename
134user_mod_rename_body() {
135	populate_etc_skel
136
137	atf_check -s exit:0 ${PW} useradd foo
138	atf_check -s exit:0 ${PW} usermod foo -l bar
139	atf_check -s exit:0 -o match:"^bar:.*" \
140		grep "^bar:.*" ${HOME}/master.passwd
141}
142
143atf_test_case user_mod_rename_too_long
144user_mod_rename_too_long_body() {
145	populate_etc_skel
146
147	atf_check -s exit:0 ${PW} useradd foo
148	atf_check -s exit:64 -e match:"too long" ${PW} usermod foo \
149		-l name_very_very_very_very_very_long
150}
151
152atf_test_case user_mod_h
153user_mod_h_body() {
154	populate_etc_skel
155
156	atf_check -s exit:0 ${PW} useradd foo
157	atf_check -s exit:0 ${PW} usermod foo -h 0 <<- EOF
158	$(echo a)
159	EOF
160	atf_check -s exit:0 -o not-match:"^foo:\*:.*" \
161		grep "^foo" ${HOME}/master.passwd
162	atf_check -s exit:0 ${PW} usermod foo -h - <<- EOF
163	$(echo b)
164	EOF
165	atf_check -s exit:0 -o match:"^foo:\*:.*" \
166		grep "^foo" ${HOME}/master.passwd
167	atf_check -e inline:"pw: Bad file descriptor 'a': invalid\n" \
168		-s exit:64 ${PW} usermod foo -h a <<- EOF
169	$(echo a)
170	EOF
171}
172
173atf_test_case user_mod_H
174user_mod_H_body() {
175	populate_etc_skel
176
177	atf_check -s exit:0 ${PW} useradd foo
178	atf_check -s exit:0 ${PW} usermod foo -H 0 <<- EOF
179	$(echo a)
180	EOF
181	atf_check -s exit:0 -o match:"^foo:a:.*" \
182		grep "^foo" ${HOME}/master.passwd
183	atf_check -s exit:64 -e inline:"pw: -H expects a file descriptor\n" \
184		${PW} usermod foo -H -
185}
186
187atf_test_case user_mod_renamehome
188user_mod_renamehome_body() {
189	populate_root_etc_skel
190
191	mkdir -p ${HOME}/home
192	atf_check -s exit:0 ${RPW} useradd foo -m
193	test -d ${HOME}/home/foo || atf_fail "Directory not created"
194	atf_check -s exit:0 ${RPW} usermod foo -l bar -d /home/bar -m
195	test -d ${HOME}/home/bar || atf_fail "Directory not created"
196}
197
198atf_init_test_cases() {
199	atf_add_test_case user_mod
200	atf_add_test_case user_mod_noupdate
201	atf_add_test_case user_mod_comments
202	atf_add_test_case user_mod_comments_noupdate
203	atf_add_test_case user_mod_comments_invalid
204	atf_add_test_case user_mod_comments_invalid_noupdate
205	atf_add_test_case user_mod_nogroups
206	atf_add_test_case user_mod_rename
207	atf_add_test_case user_mod_name_noupdate
208	atf_add_test_case user_mod_rename_too_long
209	atf_add_test_case user_mod_rename_multigroups
210	atf_add_test_case user_mod_h
211	atf_add_test_case user_mod_H
212	atf_add_test_case user_mod_renamehome
213}
214