1273771Sbapt# $FreeBSD: releng/11.0/usr.bin/timeout/tests/timeout.sh 298879 2016-05-01 16:13:05Z pfg $
2273771Sbapt
3273771Sbaptatf_test_case nominal
4273771Sbaptnominal_head()
5273771Sbapt{
6273771Sbapt	atf_set "descr" "Basic tests on timeout(1) utility"
7273771Sbapt}
8273771Sbapt
9273771Sbaptnominal_body()
10273771Sbapt{
11273771Sbapt	atf_check \
12273771Sbapt		-o empty \
13273771Sbapt		-e empty \
14273771Sbapt		-s exit:0 \
15273771Sbapt		-x timeout 5 true
16273771Sbapt}
17273771Sbapt
18273771Sbaptatf_test_case time_unit
19273771Sbapttime_unit_head()
20273771Sbapt{
21273771Sbapt	atf_set "descr" "Test parsing the default time unit"
22273771Sbapt}
23273771Sbapt
24273771Sbapttime_unit_body()
25273771Sbapt{
26273771Sbapt	atf_check \
27273771Sbapt		-o empty \
28273771Sbapt		-e empty \
29273771Sbapt		-s exit:0 \
30273771Sbapt		-x timeout 1d true
31273771Sbapt
32273771Sbapt	atf_check \
33273771Sbapt		-o empty \
34273771Sbapt		-e empty \
35273771Sbapt		-s exit:0 \
36273771Sbapt		-x timeout 1h true
37273771Sbapt
38273771Sbapt	atf_check \
39273771Sbapt		-o empty \
40273771Sbapt		-e empty \
41273771Sbapt		-s exit:0 \
42273771Sbapt		-x timeout 1m true
43273771Sbapt
44273771Sbapt	atf_check \
45273771Sbapt		-o empty \
46273771Sbapt		-e empty \
47273771Sbapt		-s exit:0 \
48273771Sbapt		-x timeout 1s true
49273771Sbapt}
50273771Sbapt
51273771Sbaptatf_test_case no_timeout
52273771Sbaptno_timeout_head()
53273771Sbapt{
54273771Sbapt	atf_set "descr" "Test disabled timeout"
55273771Sbapt}
56273771Sbapt
57273771Sbaptno_timeout_body()
58273771Sbapt{
59273771Sbapt	atf_check \
60273771Sbapt		-o empty \
61273771Sbapt		-e empty \
62273771Sbapt		-s exit:0 \
63273771Sbapt		-x timeout 0 true
64273771Sbapt}
65273771Sbapt
66273771Sbaptatf_test_case exit_numbers
67273771Sbaptexit_numbers_head()
68273771Sbapt{
69273771Sbapt	atf_set "descr" "Test exit numbers"
70273771Sbapt}
71273771Sbapt
72273771Sbaptexit_numbers_body()
73273771Sbapt{
74273771Sbapt	atf_check \
75273771Sbapt		-o empty \
76273771Sbapt		-e empty \
77273771Sbapt		-s exit:2 \
78273771Sbapt		-x timeout 5 sh -c \'exit 2\'
79273771Sbapt
80273771Sbapt	atf_check \
81273771Sbapt		-o empty \
82273771Sbapt		-e empty \
83273771Sbapt		-s exit:124 \
84273771Sbapt		-x timeout .1 sleep 1
85273771Sbapt
86298879Spfg	# With preserv status exit should be 128 + TERM aka 143
87273771Sbapt	atf_check \
88273771Sbapt		-o empty \
89273771Sbapt		-e empty \
90273771Sbapt		-s exit:143 \
91273771Sbapt		-x timeout --preserve-status .1 sleep 10
92273771Sbapt
93273771Sbapt	atf_check \
94273771Sbapt		-o empty \
95273771Sbapt		-e empty \
96273771Sbapt		-s exit:124 \
97273771Sbapt		-x timeout -s1 -k1 .1 sleep 10
98273771Sbapt
99273771Sbapt	atf_check \
100273771Sbapt		-o empty \
101273771Sbapt		-e empty \
102273771Sbapt		-s exit:0 \
103273771Sbapt		-x sh -c 'trap "" CHLD; exec timeout 10 true'
104273771Sbapt}
105273771Sbapt
106273771Sbaptatf_test_case with_a_child
107273771Sbaptwith_a_child_head()
108273771Sbapt{
109273771Sbapt	atf_set "descr" "When starting with a child (coreutils bug#9098)"
110273771Sbapt}
111273771Sbapt
112273771Sbaptwith_a_child_body()
113273771Sbapt{
114273771Sbapt	out=$(sleep .1 & exec timeout .5 sh -c 'sleep 2; echo foo')
115273771Sbapt	status=$?
116273771Sbapt	test "$out" = "" && test $status = 124 || atf_fail
117273771Sbapt
118273771Sbapt}
119273771Sbapt
120273771Sbaptatf_test_case invalid_timeout
121273771Sbaptinvalid_timeout_head()
122273771Sbapt{
123273771Sbapt	atf_set "descr" "Invalid timeout"
124273771Sbapt}
125273771Sbapt
126273771Sbaptinvalid_timeout_body()
127273771Sbapt{
128273771Sbapt	atf_check \
129273771Sbapt		-o empty \
130273771Sbapt		-e inline:"timeout: invalid duration\n" \
131273771Sbapt		-s exit:125 \
132273771Sbapt		-x timeout invalid sleep 0
133273771Sbapt
134273771Sbapt	atf_check \
135273771Sbapt		-o empty \
136273771Sbapt		-e inline:"timeout: invalid duration\n" \
137273771Sbapt		-s exit:125 \
138273771Sbapt		-x timeout --kill-after=invalid 1 sleep 0
139273771Sbapt
140273771Sbapt	atf_check \
141273771Sbapt		-o empty \
142273771Sbapt		-e inline:"timeout: invalid duration\n" \
143273771Sbapt		-s exit:125 \
144273771Sbapt		-x timeout 42D sleep 0
145273771Sbapt
146273771Sbapt	atf_check \
147273771Sbapt		-o empty \
148273771Sbapt		-e inline:"timeout: invalid duration\n" \
149273771Sbapt		-s exit:125 \
150273771Sbapt		-x timeout 999999999999999999999999999999999999999999999999999999999999d sleep 0
151273771Sbapt
152273771Sbapt	atf_check \
153273771Sbapt		-o empty \
154273771Sbapt		-e inline:"timeout: invalid duration\n" \
155273771Sbapt		-s exit:125 \
156273771Sbapt		-x timeout 2.34e+5d sleep 0
157273771Sbapt}
158273771Sbapt
159273771Sbaptatf_test_case invalid_signal
160273771Sbaptinvalid_signal_head()
161273771Sbapt{
162273771Sbapt	atf_set "descr" "Invalid signal"
163273771Sbapt}
164273771Sbapt
165273771Sbaptinvalid_signal_body()
166273771Sbapt{
167273771Sbapt	atf_check \
168273771Sbapt		-o empty \
169273771Sbapt		-e inline:"timeout: invalid signal\n" \
170273771Sbapt		-s exit:125 \
171273771Sbapt		-x timeout --signal=invalid 1 sleep 0
172273771Sbapt}
173273771Sbapt
174273771Sbaptatf_test_case invalid_command
175273771Sbaptinvalid_command_head()
176273771Sbapt{
177273771Sbapt	atf_set "descr" "Invalid command"
178273771Sbapt}
179273771Sbapt
180273771Sbaptinvalid_command_body()
181273771Sbapt{
182273771Sbapt	atf_check \
183273771Sbapt		-o empty \
184273771Sbapt		-e inline:"timeout: exec(.): Permission denied\n" \
185273771Sbapt		-s exit:126 \
186273771Sbapt		-x timeout 10 .
187273771Sbapt}
188273771Sbapt
189273771Sbaptatf_test_case no_such_command
190273771Sbaptno_such_command_head()
191273771Sbapt{
192273771Sbapt	atf_set "descr" "No such command"
193273771Sbapt}
194273771Sbapt
195273771Sbaptno_such_command_body()
196273771Sbapt{
197273771Sbapt	atf_check \
198273771Sbapt		-o empty \
199273771Sbapt		-e inline:"timeout: exec(enoexists): No such file or directory\n" \
200273771Sbapt		-s exit:127 \
201273771Sbapt		-x timeout 10 enoexists
202273771Sbapt}
203273771Sbapt
204273771Sbaptatf_init_test_cases()
205273771Sbapt{
206273771Sbapt	atf_add_test_case nominal
207273771Sbapt	atf_add_test_case time_unit
208273771Sbapt	atf_add_test_case no_timeout
209273771Sbapt	atf_add_test_case exit_numbers
210273771Sbapt	atf_add_test_case with_a_child
211273771Sbapt	atf_add_test_case invalid_timeout
212273771Sbapt	atf_add_test_case invalid_signal
213273771Sbapt	atf_add_test_case invalid_command
214273771Sbapt	atf_add_test_case no_such_command
215273771Sbapt}
216