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