sh_helpers.sh revision 240116
1240116Smarcel#
2240116Smarcel# Automated Testing Framework (atf)
3240116Smarcel#
4240116Smarcel# Copyright (c) 2007 The NetBSD Foundation, Inc.
5240116Smarcel# All rights reserved.
6240116Smarcel#
7240116Smarcel# Redistribution and use in source and binary forms, with or without
8240116Smarcel# modification, are permitted provided that the following conditions
9240116Smarcel# are met:
10240116Smarcel# 1. Redistributions of source code must retain the above copyright
11240116Smarcel#    notice, this list of conditions and the following disclaimer.
12240116Smarcel# 2. Redistributions in binary form must reproduce the above copyright
13240116Smarcel#    notice, this list of conditions and the following disclaimer in the
14240116Smarcel#    documentation and/or other materials provided with the distribution.
15240116Smarcel#
16240116Smarcel# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
17240116Smarcel# CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
18240116Smarcel# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19240116Smarcel# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20240116Smarcel# IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
21240116Smarcel# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22240116Smarcel# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
23240116Smarcel# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24240116Smarcel# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
25240116Smarcel# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26240116Smarcel# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27240116Smarcel# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28240116Smarcel#
29240116Smarcel
30240116Smarcel# -------------------------------------------------------------------------
31240116Smarcel# Helper tests for "t_cleanup".
32240116Smarcel# -------------------------------------------------------------------------
33240116Smarcel
34240116Smarcelatf_test_case cleanup_pass cleanup
35240116Smarcelcleanup_pass_head()
36240116Smarcel{
37240116Smarcel    atf_set "descr" "Helper test case for the t_cleanup test program"
38240116Smarcel}
39240116Smarcelcleanup_pass_body()
40240116Smarcel{
41240116Smarcel    touch $(atf_config_get tmpfile)
42240116Smarcel}
43240116Smarcelcleanup_pass_cleanup()
44240116Smarcel{
45240116Smarcel    if [ $(atf_config_get cleanup no) = yes ]; then
46240116Smarcel        rm $(atf_config_get tmpfile)
47240116Smarcel    fi
48240116Smarcel}
49240116Smarcel
50240116Smarcelatf_test_case cleanup_fail cleanup
51240116Smarcelcleanup_fail_head()
52240116Smarcel{
53240116Smarcel    atf_set "descr" "Helper test case for the t_cleanup test program"
54240116Smarcel}
55240116Smarcelcleanup_fail_body()
56240116Smarcel{
57240116Smarcel    touch $(atf_config_get tmpfile)
58240116Smarcel    atf_fail "On purpose"
59240116Smarcel}
60240116Smarcelcleanup_fail_cleanup()
61240116Smarcel{
62240116Smarcel    if [ $(atf_config_get cleanup no) = yes ]; then
63240116Smarcel        rm $(atf_config_get tmpfile)
64240116Smarcel    fi
65240116Smarcel}
66240116Smarcel
67240116Smarcelatf_test_case cleanup_skip cleanup
68240116Smarcelcleanup_skip_head()
69240116Smarcel{
70240116Smarcel    atf_set "descr" "Helper test case for the t_cleanup test program"
71240116Smarcel}
72240116Smarcelcleanup_skip_body()
73240116Smarcel{
74240116Smarcel    touch $(atf_config_get tmpfile)
75240116Smarcel    atf_skip "On purpose"
76240116Smarcel}
77240116Smarcelcleanup_skip_cleanup()
78240116Smarcel{
79240116Smarcel    if [ $(atf_config_get cleanup no) = yes ]; then
80240116Smarcel        rm $(atf_config_get tmpfile)
81240116Smarcel    fi
82240116Smarcel}
83240116Smarcel
84240116Smarcelatf_test_case cleanup_curdir cleanup
85240116Smarcelcleanup_curdir_head()
86240116Smarcel{
87240116Smarcel    atf_set "descr" "Helper test case for the t_cleanup test program"
88240116Smarcel}
89240116Smarcelcleanup_curdir_body()
90240116Smarcel{
91240116Smarcel    echo 1234 >oldvalue
92240116Smarcel}
93240116Smarcelcleanup_curdir_cleanup()
94240116Smarcel{
95240116Smarcel    test -f oldvalue && echo "Old value: $(cat oldvalue)"
96240116Smarcel}
97240116Smarcel
98240116Smarcelatf_test_case cleanup_sigterm cleanup
99240116Smarcelcleanup_sigterm_head()
100240116Smarcel{
101240116Smarcel    atf_set "descr" "Helper test case for the t_cleanup test program"
102240116Smarcel}
103240116Smarcelcleanup_sigterm_body()
104240116Smarcel{
105240116Smarcel    touch $(atf_config_get tmpfile)
106240116Smarcel    kill $$
107240116Smarcel    touch $(atf_config_get tmpfile).no
108240116Smarcel}
109240116Smarcelcleanup_sigterm_cleanup()
110240116Smarcel{
111240116Smarcel    rm $(atf_config_get tmpfile)
112240116Smarcel}
113240116Smarcel
114240116Smarcelatf_test_case cleanup_fork cleanup
115240116Smarcelcleanup_fork_head()
116240116Smarcel{
117240116Smarcel    atf_set "descr" "Helper test case for the t_cleanup test program"
118240116Smarcel}
119240116Smarcelcleanup_fork_body()
120240116Smarcel{
121240116Smarcel    :
122240116Smarcel}
123240116Smarcelcleanup_fork_cleanup()
124240116Smarcel{
125240116Smarcel    exec 1>out
126240116Smarcel    exec 2>err
127240116Smarcel    exec 3>res
128240116Smarcel    rm -f out err res
129240116Smarcel}
130240116Smarcel
131240116Smarcel# -------------------------------------------------------------------------
132240116Smarcel# Helper tests for "t_config".
133240116Smarcel# -------------------------------------------------------------------------
134240116Smarcel
135240116Smarcelatf_test_case config_unset
136240116Smarcelconfig_unset_head()
137240116Smarcel{
138240116Smarcel    atf_set "descr" "Helper test case for the t_config test program"
139240116Smarcel}
140240116Smarcelconfig_unset_body()
141240116Smarcel{
142240116Smarcel    if atf_config_has 'test'; then
143240116Smarcel        atf_fail "Test variable already defined"
144240116Smarcel    fi
145240116Smarcel}
146240116Smarcel
147240116Smarcelatf_test_case config_empty
148240116Smarcelconfig_empty_head()
149240116Smarcel{
150240116Smarcel    atf_set "descr" "Helper test case for the t_config test program"
151240116Smarcel}
152240116Smarcelconfig_empty_body()
153240116Smarcel{
154240116Smarcel    atf_check_equal "$(atf_config_get 'test')" ""
155240116Smarcel}
156240116Smarcel
157240116Smarcelatf_test_case config_value
158240116Smarcelconfig_value_head()
159240116Smarcel{
160240116Smarcel    atf_set "descr" "Helper test case for the t_config test program"
161240116Smarcel}
162240116Smarcelconfig_value_body()
163240116Smarcel{
164240116Smarcel    atf_check_equal "$(atf_config_get 'test')" "foo"
165240116Smarcel}
166240116Smarcel
167240116Smarcelatf_test_case config_multi_value
168240116Smarcelconfig_multi_value_head()
169240116Smarcel{
170240116Smarcel    atf_set "descr" "Helper test case for the t_config test program"
171240116Smarcel}
172240116Smarcelconfig_multi_value_body()
173240116Smarcel{
174240116Smarcel    atf_check_equal "$(atf_config_get 'test')" "foo bar"
175240116Smarcel}
176240116Smarcel
177240116Smarcel# -------------------------------------------------------------------------
178240116Smarcel# Helper tests for "t_fork".
179240116Smarcel# -------------------------------------------------------------------------
180240116Smarcel
181240116Smarcelatf_test_case fork_stop
182240116Smarcelfork_stop_head()
183240116Smarcel{
184240116Smarcel    atf_set "descr" "Helper test case for the t_fork test program"
185240116Smarcel}
186240116Smarcelfork_stop_body()
187240116Smarcel{
188240116Smarcel    echo ${$} >$(atf_config_get pidfile)
189240116Smarcel    echo "Wrote pid file"
190240116Smarcel    echo "Waiting for done file"
191240116Smarcel    while ! test -f $(atf_config_get donefile); do sleep 1; done
192240116Smarcel    echo "Exiting"
193240116Smarcel}
194240116Smarcel
195240116Smarcel# -------------------------------------------------------------------------
196240116Smarcel# Helper tests for "t_expect".
197240116Smarcel# -------------------------------------------------------------------------
198240116Smarcel
199240116Smarcelatf_test_case expect_pass_and_pass
200240116Smarcelexpect_pass_and_pass_body()
201240116Smarcel{
202240116Smarcel    atf_expect_pass
203240116Smarcel}
204240116Smarcel
205240116Smarcelatf_test_case expect_pass_but_fail_requirement
206240116Smarcelexpect_pass_but_fail_requirement_body()
207240116Smarcel{
208240116Smarcel    atf_expect_pass
209240116Smarcel    atf_fail "Some reason"
210240116Smarcel}
211240116Smarcel
212240116Smarcelatf_test_case expect_pass_but_fail_check
213240116Smarcelexpect_pass_but_fail_check_body()
214240116Smarcel{
215240116Smarcel    atf_fail "Non-fatal failures not implemented"
216240116Smarcel}
217240116Smarcel
218240116Smarcelatf_test_case expect_fail_and_fail_requirement
219240116Smarcelexpect_fail_and_fail_requirement_body()
220240116Smarcel{
221240116Smarcel    atf_expect_fail "Fail reason"
222240116Smarcel    atf_fail "The failure"
223240116Smarcel    atf_expect_pass
224240116Smarcel}
225240116Smarcel
226240116Smarcelatf_test_case expect_fail_and_fail_check
227240116Smarcelexpect_fail_and_fail_check_body()
228240116Smarcel{
229240116Smarcel    atf_fail "Non-fatal failures not implemented"
230240116Smarcel}
231240116Smarcel
232240116Smarcelatf_test_case expect_fail_but_pass
233240116Smarcelexpect_fail_but_pass_body()
234240116Smarcel{
235240116Smarcel    atf_expect_fail "Fail first"
236240116Smarcel    atf_expect_pass
237240116Smarcel}
238240116Smarcel
239240116Smarcelatf_test_case expect_exit_any_and_exit
240240116Smarcelexpect_exit_any_and_exit_body()
241240116Smarcel{
242240116Smarcel    atf_expect_exit -1 "Call will exit"
243240116Smarcel    exit 0
244240116Smarcel}
245240116Smarcel
246240116Smarcelatf_test_case expect_exit_code_and_exit
247240116Smarcelexpect_exit_code_and_exit_body()
248240116Smarcel{
249240116Smarcel    atf_expect_exit 123 "Call will exit"
250240116Smarcel    exit 123
251240116Smarcel}
252240116Smarcel
253240116Smarcelatf_test_case expect_exit_but_pass
254240116Smarcelexpect_exit_but_pass_body()
255240116Smarcel{
256240116Smarcel    atf_expect_exit -1 "Call won't exit"
257240116Smarcel}
258240116Smarcel
259240116Smarcelatf_test_case expect_signal_any_and_signal
260240116Smarcelexpect_signal_any_and_signal_body()
261240116Smarcel{
262240116Smarcel    atf_expect_signal -1 "Call will signal"
263240116Smarcel    kill -9 $$
264240116Smarcel}
265240116Smarcel
266240116Smarcelatf_test_case expect_signal_no_and_signal
267240116Smarcelexpect_signal_no_and_signal_body()
268240116Smarcel{
269240116Smarcel    atf_expect_signal 1 "Call will signal"
270240116Smarcel    kill -1 $$
271240116Smarcel}
272240116Smarcel
273240116Smarcelatf_test_case expect_signal_but_pass
274240116Smarcelexpect_signal_but_pass_body()
275240116Smarcel{
276240116Smarcel    atf_expect_signal -1 "Call won't signal"
277240116Smarcel}
278240116Smarcel
279240116Smarcelatf_test_case expect_death_and_exit
280240116Smarcelexpect_death_and_exit_body()
281240116Smarcel{
282240116Smarcel    atf_expect_death "Exit case"
283240116Smarcel    exit 123
284240116Smarcel}
285240116Smarcel
286240116Smarcelatf_test_case expect_death_and_signal
287240116Smarcelexpect_death_and_signal_body()
288240116Smarcel{
289240116Smarcel    atf_expect_death "Signal case"
290240116Smarcel    kill -9 $$
291240116Smarcel}
292240116Smarcel
293240116Smarcelatf_test_case expect_death_but_pass
294240116Smarcelexpect_death_but_pass_body()
295240116Smarcel{
296240116Smarcel    atf_expect_death "Call won't die"
297240116Smarcel}
298240116Smarcel
299240116Smarcelatf_test_case expect_timeout_and_hang
300240116Smarcelexpect_timeout_and_hang_head()
301240116Smarcel{
302240116Smarcel    atf_set "timeout" "1"
303240116Smarcel}
304240116Smarcelexpect_timeout_and_hang_body()
305240116Smarcel{
306240116Smarcel    atf_expect_timeout "Will overrun"
307240116Smarcel    sleep 5
308240116Smarcel}
309240116Smarcel
310240116Smarcelatf_test_case expect_timeout_but_pass
311240116Smarcelexpect_timeout_but_pass_head()
312240116Smarcel{
313240116Smarcel    atf_set "timeout" "1"
314240116Smarcel}
315240116Smarcelexpect_timeout_but_pass_body()
316240116Smarcel{
317240116Smarcel    atf_expect_timeout "Will just exit"
318240116Smarcel}
319240116Smarcel
320240116Smarcel# -------------------------------------------------------------------------
321240116Smarcel# Helper tests for "t_meta_data".
322240116Smarcel# -------------------------------------------------------------------------
323240116Smarcel
324240116Smarcelatf_test_case metadata_no_descr
325240116Smarcelmetadata_no_descr_head()
326240116Smarcel{
327240116Smarcel    :
328240116Smarcel}
329240116Smarcelmetadata_no_descr_body()
330240116Smarcel{
331240116Smarcel    :
332240116Smarcel}
333240116Smarcel
334240116Smarcelatf_test_case metadata_no_head
335240116Smarcelmetadata_no_head_body()
336240116Smarcel{
337240116Smarcel    :
338240116Smarcel}
339240116Smarcel
340240116Smarcel# -------------------------------------------------------------------------
341240116Smarcel# Helper tests for "t_srcdir".
342240116Smarcel# -------------------------------------------------------------------------
343240116Smarcel
344240116Smarcelatf_test_case srcdir_exists
345240116Smarcelsrcdir_exists_head()
346240116Smarcel{
347240116Smarcel    atf_set "descr" "Helper test case for the t_srcdir test program"
348240116Smarcel}
349240116Smarcelsrcdir_exists_body()
350240116Smarcel{
351240116Smarcel    [ -f "$(atf_get_srcdir)/datafile" ] || atf_fail "Cannot find datafile"
352240116Smarcel}
353240116Smarcel
354240116Smarcel# -------------------------------------------------------------------------
355240116Smarcel# Helper tests for "t_result".
356240116Smarcel# -------------------------------------------------------------------------
357240116Smarcel
358240116Smarcelatf_test_case result_pass
359240116Smarcelresult_pass_body()
360240116Smarcel{
361240116Smarcel    echo "msg"
362240116Smarcel}
363240116Smarcel
364240116Smarcelatf_test_case result_fail
365240116Smarcelresult_fail_body()
366240116Smarcel{
367240116Smarcel    echo "msg"
368240116Smarcel    atf_fail "Failure reason"
369240116Smarcel}
370240116Smarcel
371240116Smarcelatf_test_case result_skip
372240116Smarcelresult_skip_body()
373240116Smarcel{
374240116Smarcel    echo "msg"
375240116Smarcel    atf_skip "Skipped reason"
376240116Smarcel}
377240116Smarcel
378240116Smarcel# -------------------------------------------------------------------------
379240116Smarcel# Main.
380240116Smarcel# -------------------------------------------------------------------------
381240116Smarcel
382240116Smarcelatf_init_test_cases()
383240116Smarcel{
384240116Smarcel    # Add helper tests for t_cleanup.
385240116Smarcel    atf_add_test_case cleanup_pass
386240116Smarcel    atf_add_test_case cleanup_fail
387240116Smarcel    atf_add_test_case cleanup_skip
388240116Smarcel    atf_add_test_case cleanup_curdir
389240116Smarcel    atf_add_test_case cleanup_sigterm
390240116Smarcel    atf_add_test_case cleanup_fork
391240116Smarcel
392240116Smarcel    # Add helper tests for t_config.
393240116Smarcel    atf_add_test_case config_unset
394240116Smarcel    atf_add_test_case config_empty
395240116Smarcel    atf_add_test_case config_value
396240116Smarcel    atf_add_test_case config_multi_value
397240116Smarcel
398240116Smarcel    # Add helper tests for t_expect.
399240116Smarcel    atf_add_test_case expect_pass_and_pass
400240116Smarcel    atf_add_test_case expect_pass_but_fail_requirement
401240116Smarcel    atf_add_test_case expect_pass_but_fail_check
402240116Smarcel    atf_add_test_case expect_fail_and_fail_requirement
403240116Smarcel    atf_add_test_case expect_fail_and_fail_check
404240116Smarcel    atf_add_test_case expect_fail_but_pass
405240116Smarcel    atf_add_test_case expect_exit_any_and_exit
406240116Smarcel    atf_add_test_case expect_exit_code_and_exit
407240116Smarcel    atf_add_test_case expect_exit_but_pass
408240116Smarcel    atf_add_test_case expect_signal_any_and_signal
409240116Smarcel    atf_add_test_case expect_signal_no_and_signal
410240116Smarcel    atf_add_test_case expect_signal_but_pass
411240116Smarcel    atf_add_test_case expect_death_and_exit
412240116Smarcel    atf_add_test_case expect_death_and_signal
413240116Smarcel    atf_add_test_case expect_death_but_pass
414240116Smarcel    atf_add_test_case expect_timeout_and_hang
415240116Smarcel    atf_add_test_case expect_timeout_but_pass
416240116Smarcel
417240116Smarcel    # Add helper tests for t_fork.
418240116Smarcel    atf_add_test_case fork_stop
419240116Smarcel
420240116Smarcel    # Add helper tests for t_meta_data.
421240116Smarcel    atf_add_test_case metadata_no_descr
422240116Smarcel    atf_add_test_case metadata_no_head
423240116Smarcel
424240116Smarcel    # Add helper tests for t_srcdir.
425240116Smarcel    atf_add_test_case srcdir_exists
426240116Smarcel
427240116Smarcel    # Add helper tests for t_result.
428240116Smarcel    atf_add_test_case result_pass
429240116Smarcel    atf_add_test_case result_fail
430240116Smarcel    atf_add_test_case result_skip
431240116Smarcel}
432240116Smarcel
433240116Smarcel# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4
434