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