xref: /dflybsd-src/usr.bin/timeout/tests/timeout_test.sh (revision ef2b2b9d360bb2c0420ab14a436f0f4ce4849f92)
1*ef2b2b9dSAaron LI# $FreeBSD$
2*ef2b2b9dSAaron LI
3*ef2b2b9dSAaron LIatf_test_case nominal
4*ef2b2b9dSAaron LInominal_head()
5*ef2b2b9dSAaron LI{
6*ef2b2b9dSAaron LI	atf_set "descr" "Basic tests on timeout(1) utility"
7*ef2b2b9dSAaron LI}
8*ef2b2b9dSAaron LI
9*ef2b2b9dSAaron LInominal_body()
10*ef2b2b9dSAaron LI{
11*ef2b2b9dSAaron LI	atf_check \
12*ef2b2b9dSAaron LI		-o empty \
13*ef2b2b9dSAaron LI		-e empty \
14*ef2b2b9dSAaron LI		-s exit:0 \
15*ef2b2b9dSAaron LI		timeout 5 true
16*ef2b2b9dSAaron LI}
17*ef2b2b9dSAaron LI
18*ef2b2b9dSAaron LIatf_test_case time_unit
19*ef2b2b9dSAaron LItime_unit_head()
20*ef2b2b9dSAaron LI{
21*ef2b2b9dSAaron LI	atf_set "descr" "Test parsing the default time unit"
22*ef2b2b9dSAaron LI}
23*ef2b2b9dSAaron LI
24*ef2b2b9dSAaron LItime_unit_body()
25*ef2b2b9dSAaron LI{
26*ef2b2b9dSAaron LI	atf_check \
27*ef2b2b9dSAaron LI		-o empty \
28*ef2b2b9dSAaron LI		-e empty \
29*ef2b2b9dSAaron LI		-s exit:0 \
30*ef2b2b9dSAaron LI		timeout 1d true
31*ef2b2b9dSAaron LI
32*ef2b2b9dSAaron LI	atf_check \
33*ef2b2b9dSAaron LI		-o empty \
34*ef2b2b9dSAaron LI		-e empty \
35*ef2b2b9dSAaron LI		-s exit:0 \
36*ef2b2b9dSAaron LI		timeout 1h true
37*ef2b2b9dSAaron LI
38*ef2b2b9dSAaron LI	atf_check \
39*ef2b2b9dSAaron LI		-o empty \
40*ef2b2b9dSAaron LI		-e empty \
41*ef2b2b9dSAaron LI		-s exit:0 \
42*ef2b2b9dSAaron LI		timeout 1m true
43*ef2b2b9dSAaron LI
44*ef2b2b9dSAaron LI	atf_check \
45*ef2b2b9dSAaron LI		-o empty \
46*ef2b2b9dSAaron LI		-e empty \
47*ef2b2b9dSAaron LI		-s exit:0 \
48*ef2b2b9dSAaron LI		timeout 1s true
49*ef2b2b9dSAaron LI}
50*ef2b2b9dSAaron LI
51*ef2b2b9dSAaron LIatf_test_case no_timeout
52*ef2b2b9dSAaron LIno_timeout_head()
53*ef2b2b9dSAaron LI{
54*ef2b2b9dSAaron LI	atf_set "descr" "Test disabled timeout"
55*ef2b2b9dSAaron LI}
56*ef2b2b9dSAaron LI
57*ef2b2b9dSAaron LIno_timeout_body()
58*ef2b2b9dSAaron LI{
59*ef2b2b9dSAaron LI	atf_check \
60*ef2b2b9dSAaron LI		-o empty \
61*ef2b2b9dSAaron LI		-e empty \
62*ef2b2b9dSAaron LI		-s exit:0 \
63*ef2b2b9dSAaron LI		timeout 0 true
64*ef2b2b9dSAaron LI}
65*ef2b2b9dSAaron LI
66*ef2b2b9dSAaron LIatf_test_case exit_numbers
67*ef2b2b9dSAaron LIexit_numbers_head()
68*ef2b2b9dSAaron LI{
69*ef2b2b9dSAaron LI	atf_set "descr" "Test exit numbers"
70*ef2b2b9dSAaron LI}
71*ef2b2b9dSAaron LI
72*ef2b2b9dSAaron LIexit_numbers_body()
73*ef2b2b9dSAaron LI{
74*ef2b2b9dSAaron LI	atf_check \
75*ef2b2b9dSAaron LI		-o empty \
76*ef2b2b9dSAaron LI		-e empty \
77*ef2b2b9dSAaron LI		-s exit:2 \
78*ef2b2b9dSAaron LI		-x timeout 5 sh -c \'exit 2\'
79*ef2b2b9dSAaron LI
80*ef2b2b9dSAaron LI	atf_check \
81*ef2b2b9dSAaron LI		-o empty \
82*ef2b2b9dSAaron LI		-e empty \
83*ef2b2b9dSAaron LI		-s exit:124 \
84*ef2b2b9dSAaron LI		timeout .1 sleep 1
85*ef2b2b9dSAaron LI
86*ef2b2b9dSAaron LI	# With preserv status exit should be 128 + TERM aka 143
87*ef2b2b9dSAaron LI	atf_check \
88*ef2b2b9dSAaron LI		-o empty \
89*ef2b2b9dSAaron LI		-e empty \
90*ef2b2b9dSAaron LI		-s exit:143 \
91*ef2b2b9dSAaron LI		timeout --preserve-status .1 sleep 10
92*ef2b2b9dSAaron LI
93*ef2b2b9dSAaron LI	atf_check \
94*ef2b2b9dSAaron LI		-o empty \
95*ef2b2b9dSAaron LI		-e empty \
96*ef2b2b9dSAaron LI		-s exit:124 \
97*ef2b2b9dSAaron LI		timeout -s1 -k1 .1 sleep 10
98*ef2b2b9dSAaron LI
99*ef2b2b9dSAaron LI	atf_check \
100*ef2b2b9dSAaron LI		-o empty \
101*ef2b2b9dSAaron LI		-e empty \
102*ef2b2b9dSAaron LI		-s exit:0 \
103*ef2b2b9dSAaron LI		-x sh -c 'trap "" CHLD; exec timeout 10 true'
104*ef2b2b9dSAaron LI}
105*ef2b2b9dSAaron LI
106*ef2b2b9dSAaron LIatf_test_case with_a_child
107*ef2b2b9dSAaron LIwith_a_child_head()
108*ef2b2b9dSAaron LI{
109*ef2b2b9dSAaron LI	atf_set "descr" "When starting with a child (coreutils bug#9098)"
110*ef2b2b9dSAaron LI}
111*ef2b2b9dSAaron LI
112*ef2b2b9dSAaron LIwith_a_child_body()
113*ef2b2b9dSAaron LI{
114*ef2b2b9dSAaron LI	out=$(sleep .1 & exec timeout .5 sh -c 'sleep 2; echo foo')
115*ef2b2b9dSAaron LI	status=$?
116*ef2b2b9dSAaron LI	test "$out" = "" && test $status = 124 || atf_fail
117*ef2b2b9dSAaron LI
118*ef2b2b9dSAaron LI}
119*ef2b2b9dSAaron LI
120*ef2b2b9dSAaron LIatf_test_case invalid_timeout
121*ef2b2b9dSAaron LIinvalid_timeout_head()
122*ef2b2b9dSAaron LI{
123*ef2b2b9dSAaron LI	atf_set "descr" "Invalid timeout"
124*ef2b2b9dSAaron LI}
125*ef2b2b9dSAaron LI
126*ef2b2b9dSAaron LIinvalid_timeout_body()
127*ef2b2b9dSAaron LI{
128*ef2b2b9dSAaron LI	atf_check \
129*ef2b2b9dSAaron LI		-o empty \
130*ef2b2b9dSAaron LI		-e inline:"timeout: invalid duration\n" \
131*ef2b2b9dSAaron LI		-s exit:125 \
132*ef2b2b9dSAaron LI		timeout invalid sleep 0
133*ef2b2b9dSAaron LI
134*ef2b2b9dSAaron LI	atf_check \
135*ef2b2b9dSAaron LI		-o empty \
136*ef2b2b9dSAaron LI		-e inline:"timeout: invalid duration\n" \
137*ef2b2b9dSAaron LI		-s exit:125 \
138*ef2b2b9dSAaron LI		timeout --kill-after=invalid 1 sleep 0
139*ef2b2b9dSAaron LI
140*ef2b2b9dSAaron LI	atf_check \
141*ef2b2b9dSAaron LI		-o empty \
142*ef2b2b9dSAaron LI		-e inline:"timeout: invalid duration\n" \
143*ef2b2b9dSAaron LI		-s exit:125 \
144*ef2b2b9dSAaron LI		timeout 42D sleep 0
145*ef2b2b9dSAaron LI
146*ef2b2b9dSAaron LI	atf_check \
147*ef2b2b9dSAaron LI		-o empty \
148*ef2b2b9dSAaron LI		-e inline:"timeout: invalid duration\n" \
149*ef2b2b9dSAaron LI		-s exit:125 \
150*ef2b2b9dSAaron LI		timeout 999999999999999999999999999999999999999999999999999999999999d sleep 0
151*ef2b2b9dSAaron LI
152*ef2b2b9dSAaron LI	atf_check \
153*ef2b2b9dSAaron LI		-o empty \
154*ef2b2b9dSAaron LI		-e inline:"timeout: invalid duration\n" \
155*ef2b2b9dSAaron LI		-s exit:125 \
156*ef2b2b9dSAaron LI		timeout 2.34e+5d sleep 0
157*ef2b2b9dSAaron LI}
158*ef2b2b9dSAaron LI
159*ef2b2b9dSAaron LIatf_test_case invalid_signal
160*ef2b2b9dSAaron LIinvalid_signal_head()
161*ef2b2b9dSAaron LI{
162*ef2b2b9dSAaron LI	atf_set "descr" "Invalid signal"
163*ef2b2b9dSAaron LI}
164*ef2b2b9dSAaron LI
165*ef2b2b9dSAaron LIinvalid_signal_body()
166*ef2b2b9dSAaron LI{
167*ef2b2b9dSAaron LI	atf_check \
168*ef2b2b9dSAaron LI		-o empty \
169*ef2b2b9dSAaron LI		-e inline:"timeout: invalid signal\n" \
170*ef2b2b9dSAaron LI		-s exit:125 \
171*ef2b2b9dSAaron LI		timeout --signal=invalid 1 sleep 0
172*ef2b2b9dSAaron LI}
173*ef2b2b9dSAaron LI
174*ef2b2b9dSAaron LIatf_test_case invalid_command
175*ef2b2b9dSAaron LIinvalid_command_head()
176*ef2b2b9dSAaron LI{
177*ef2b2b9dSAaron LI	atf_set "descr" "Invalid command"
178*ef2b2b9dSAaron LI}
179*ef2b2b9dSAaron LI
180*ef2b2b9dSAaron LIinvalid_command_body()
181*ef2b2b9dSAaron LI{
182*ef2b2b9dSAaron LI	atf_check \
183*ef2b2b9dSAaron LI		-o empty \
184*ef2b2b9dSAaron LI		-e inline:"timeout: exec(.): Permission denied\n" \
185*ef2b2b9dSAaron LI		-s exit:126 \
186*ef2b2b9dSAaron LI		timeout 10 .
187*ef2b2b9dSAaron LI}
188*ef2b2b9dSAaron LI
189*ef2b2b9dSAaron LIatf_test_case no_such_command
190*ef2b2b9dSAaron LIno_such_command_head()
191*ef2b2b9dSAaron LI{
192*ef2b2b9dSAaron LI	atf_set "descr" "No such command"
193*ef2b2b9dSAaron LI}
194*ef2b2b9dSAaron LI
195*ef2b2b9dSAaron LIno_such_command_body()
196*ef2b2b9dSAaron LI{
197*ef2b2b9dSAaron LI	atf_check \
198*ef2b2b9dSAaron LI		-o empty \
199*ef2b2b9dSAaron LI		-e inline:"timeout: exec(enoexists): No such file or directory\n" \
200*ef2b2b9dSAaron LI		-s exit:127 \
201*ef2b2b9dSAaron LI		timeout 10 enoexists
202*ef2b2b9dSAaron LI}
203*ef2b2b9dSAaron LI
204*ef2b2b9dSAaron LIatf_init_test_cases()
205*ef2b2b9dSAaron LI{
206*ef2b2b9dSAaron LI	atf_add_test_case nominal
207*ef2b2b9dSAaron LI	atf_add_test_case time_unit
208*ef2b2b9dSAaron LI	atf_add_test_case no_timeout
209*ef2b2b9dSAaron LI	atf_add_test_case exit_numbers
210*ef2b2b9dSAaron LI	atf_add_test_case with_a_child
211*ef2b2b9dSAaron LI	atf_add_test_case invalid_timeout
212*ef2b2b9dSAaron LI	atf_add_test_case invalid_signal
213*ef2b2b9dSAaron LI	atf_add_test_case invalid_command
214*ef2b2b9dSAaron LI	atf_add_test_case no_such_command
215*ef2b2b9dSAaron LI}
216