xref: /freebsd/contrib/kyua/integration/cmd_test_test.sh (revision 51a8eb6410461c94c8e0f2b59e3417cfb5d7da75)
1b0d29bc4SBrooks Davis# Copyright 2011 The Kyua Authors.
2b0d29bc4SBrooks Davis# All rights reserved.
3b0d29bc4SBrooks Davis#
4b0d29bc4SBrooks Davis# Redistribution and use in source and binary forms, with or without
5b0d29bc4SBrooks Davis# modification, are permitted provided that the following conditions are
6b0d29bc4SBrooks Davis# met:
7b0d29bc4SBrooks Davis#
8b0d29bc4SBrooks Davis# * Redistributions of source code must retain the above copyright
9b0d29bc4SBrooks Davis#   notice, this list of conditions and the following disclaimer.
10b0d29bc4SBrooks Davis# * Redistributions in binary form must reproduce the above copyright
11b0d29bc4SBrooks Davis#   notice, this list of conditions and the following disclaimer in the
12b0d29bc4SBrooks Davis#   documentation and/or other materials provided with the distribution.
13b0d29bc4SBrooks Davis# * Neither the name of Google Inc. nor the names of its contributors
14b0d29bc4SBrooks Davis#   may be used to endorse or promote products derived from this software
15b0d29bc4SBrooks Davis#   without specific prior written permission.
16b0d29bc4SBrooks Davis#
17b0d29bc4SBrooks Davis# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18b0d29bc4SBrooks Davis# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19b0d29bc4SBrooks Davis# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20b0d29bc4SBrooks Davis# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21b0d29bc4SBrooks Davis# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22b0d29bc4SBrooks Davis# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23b0d29bc4SBrooks Davis# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24b0d29bc4SBrooks Davis# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25b0d29bc4SBrooks Davis# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26b0d29bc4SBrooks Davis# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27b0d29bc4SBrooks Davis# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28b0d29bc4SBrooks Davis
29b0d29bc4SBrooks Davis
30b0d29bc4SBrooks Davisutils_test_case one_test_program__all_pass
31b0d29bc4SBrooks Davisone_test_program__all_pass_body() {
32b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
33b0d29bc4SBrooks Davis
34b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
35b0d29bc4SBrooks Davissyntax(2)
36b0d29bc4SBrooks Davistest_suite("integration")
37b0d29bc4SBrooks Davisatf_test_program{name="simple_all_pass"}
38b0d29bc4SBrooks DavisEOF
39b0d29bc4SBrooks Davis
40b0d29bc4SBrooks Davis    cat >expout <<EOF
41b0d29bc4SBrooks Davissimple_all_pass:pass  ->  passed  [S.UUUs]
42b0d29bc4SBrooks Davissimple_all_pass:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
43b0d29bc4SBrooks Davis
44b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
45b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
46b0d29bc4SBrooks Davis
4799689201SIgor Ostapenko1/2 passed (0 broken, 0 failed, 1 skipped)
48b0d29bc4SBrooks DavisEOF
49b0d29bc4SBrooks Davis
50b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass .
51b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua test
52b0d29bc4SBrooks Davis}
53b0d29bc4SBrooks Davis
54b0d29bc4SBrooks Davis
55b0d29bc4SBrooks Davisutils_test_case one_test_program__some_fail
56b0d29bc4SBrooks Davisone_test_program__some_fail_body() {
57b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
58b0d29bc4SBrooks Davis
59b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
60b0d29bc4SBrooks Davissyntax(2)
61b0d29bc4SBrooks Davistest_suite("integration")
62b0d29bc4SBrooks Davisatf_test_program{name="simple_some_fail"}
63b0d29bc4SBrooks DavisEOF
64b0d29bc4SBrooks Davis
65b0d29bc4SBrooks Davis    cat >expout <<EOF
66b0d29bc4SBrooks Davissimple_some_fail:fail  ->  failed: This fails on purpose  [S.UUUs]
67b0d29bc4SBrooks Davissimple_some_fail:pass  ->  passed  [S.UUUs]
68b0d29bc4SBrooks Davis
69b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
70b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
71b0d29bc4SBrooks Davis
7299689201SIgor Ostapenko1/2 passed (0 broken, 1 failed, 0 skipped)
73b0d29bc4SBrooks DavisEOF
74b0d29bc4SBrooks Davis
75b0d29bc4SBrooks Davis    utils_cp_helper simple_some_fail .
76b0d29bc4SBrooks Davis    atf_check -s exit:1 -o file:expout -e empty kyua test
77b0d29bc4SBrooks Davis}
78b0d29bc4SBrooks Davis
79b0d29bc4SBrooks Davis
80b0d29bc4SBrooks Davisutils_test_case many_test_programs__all_pass
81b0d29bc4SBrooks Davismany_test_programs__all_pass_body() {
82b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
83b0d29bc4SBrooks Davis
84b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
85b0d29bc4SBrooks Davissyntax(2)
86b0d29bc4SBrooks Davistest_suite("integration")
87b0d29bc4SBrooks Davisatf_test_program{name="first"}
88b0d29bc4SBrooks Davisatf_test_program{name="second"}
89b0d29bc4SBrooks Davisatf_test_program{name="third"}
90b0d29bc4SBrooks Davisplain_test_program{name="fourth", required_files="/non-existent/foo"}
91b0d29bc4SBrooks DavisEOF
92b0d29bc4SBrooks Davis
93b0d29bc4SBrooks Davis    cat >expout <<EOF
94b0d29bc4SBrooks Davisfirst:pass  ->  passed  [S.UUUs]
95b0d29bc4SBrooks Davisfirst:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
96b0d29bc4SBrooks Davisfourth:main  ->  skipped: Required file '/non-existent/foo' not found  [S.UUUs]
97b0d29bc4SBrooks Davissecond:pass  ->  passed  [S.UUUs]
98b0d29bc4SBrooks Davissecond:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
99b0d29bc4SBrooks Davisthird:pass  ->  passed  [S.UUUs]
100b0d29bc4SBrooks Davisthird:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
101b0d29bc4SBrooks Davis
102b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
103b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
104b0d29bc4SBrooks Davis
10599689201SIgor Ostapenko3/7 passed (0 broken, 0 failed, 4 skipped)
106b0d29bc4SBrooks DavisEOF
107b0d29bc4SBrooks Davis
108b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass first
109b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass second
110b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass third
111b0d29bc4SBrooks Davis    echo "not executed" >fourth; chmod +x fourth
112b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua test
113b0d29bc4SBrooks Davis}
114b0d29bc4SBrooks Davis
115b0d29bc4SBrooks Davis
116b0d29bc4SBrooks Davisutils_test_case many_test_programs__some_fail
117b0d29bc4SBrooks Davismany_test_programs__some_fail_body() {
118b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
119b0d29bc4SBrooks Davis
120b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
121b0d29bc4SBrooks Davissyntax(2)
122b0d29bc4SBrooks Davistest_suite("integration")
123b0d29bc4SBrooks Davisatf_test_program{name="first"}
124b0d29bc4SBrooks Davisatf_test_program{name="second"}
125b0d29bc4SBrooks Davisatf_test_program{name="third"}
126b0d29bc4SBrooks Davisplain_test_program{name="fourth"}
127b0d29bc4SBrooks DavisEOF
128b0d29bc4SBrooks Davis
129b0d29bc4SBrooks Davis    cat >expout <<EOF
130b0d29bc4SBrooks Davisfirst:fail  ->  failed: This fails on purpose  [S.UUUs]
131b0d29bc4SBrooks Davisfirst:pass  ->  passed  [S.UUUs]
132b0d29bc4SBrooks Davisfourth:main  ->  failed: Returned non-success exit status 76  [S.UUUs]
133b0d29bc4SBrooks Davissecond:fail  ->  failed: This fails on purpose  [S.UUUs]
134b0d29bc4SBrooks Davissecond:pass  ->  passed  [S.UUUs]
135b0d29bc4SBrooks Davisthird:pass  ->  passed  [S.UUUs]
136b0d29bc4SBrooks Davisthird:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
137b0d29bc4SBrooks Davis
138b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
139b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
140b0d29bc4SBrooks Davis
14199689201SIgor Ostapenko3/7 passed (0 broken, 3 failed, 1 skipped)
142b0d29bc4SBrooks DavisEOF
143b0d29bc4SBrooks Davis
144b0d29bc4SBrooks Davis    utils_cp_helper simple_some_fail first
145b0d29bc4SBrooks Davis    utils_cp_helper simple_some_fail second
146b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass third
147b0d29bc4SBrooks Davis    echo '#! /bin/sh' >fourth
148b0d29bc4SBrooks Davis    echo 'exit 76' >>fourth
149b0d29bc4SBrooks Davis    chmod +x fourth
150b0d29bc4SBrooks Davis    atf_check -s exit:1 -o file:expout -e empty kyua test
151b0d29bc4SBrooks Davis}
152b0d29bc4SBrooks Davis
153b0d29bc4SBrooks Davis
154b0d29bc4SBrooks Davisutils_test_case expect__all_pass
155b0d29bc4SBrooks Davisexpect__all_pass_body() {
156b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
157b0d29bc4SBrooks Davis
158b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
159b0d29bc4SBrooks Davissyntax(2)
160b0d29bc4SBrooks Davistest_suite("integration")
161b0d29bc4SBrooks Davisatf_test_program{name="expect_all_pass"}
162b0d29bc4SBrooks DavisEOF
163b0d29bc4SBrooks Davis
164b0d29bc4SBrooks Davis# CHECK_STYLE_DISABLE
165b0d29bc4SBrooks Davis    cat >expout <<EOF
166b0d29bc4SBrooks Davisexpect_all_pass:die  ->  expected_failure: This is the reason for death  [S.UUUs]
167b0d29bc4SBrooks Davisexpect_all_pass:exit  ->  expected_failure: Exiting with correct code  [S.UUUs]
168b0d29bc4SBrooks Davisexpect_all_pass:failure  ->  expected_failure: Oh no: Forced failure  [S.UUUs]
169b0d29bc4SBrooks Davisexpect_all_pass:signal  ->  expected_failure: Exiting with correct signal  [S.UUUs]
170b0d29bc4SBrooks Davisexpect_all_pass:timeout  ->  expected_failure: This times out  [S.UUUs]
171b0d29bc4SBrooks Davis
172b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
173b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
174b0d29bc4SBrooks Davis
17599689201SIgor Ostapenko5/5 passed (0 broken, 0 failed, 0 skipped)
176b0d29bc4SBrooks DavisEOF
177b0d29bc4SBrooks Davis# CHECK_STYLE_ENABLE
178b0d29bc4SBrooks Davis
179b0d29bc4SBrooks Davis    utils_cp_helper expect_all_pass .
180b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua test
181b0d29bc4SBrooks Davis}
182b0d29bc4SBrooks Davis
183b0d29bc4SBrooks Davis
184b0d29bc4SBrooks Davisutils_test_case expect__some_fail
185b0d29bc4SBrooks Davisexpect__some_fail_body() {
186b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
187b0d29bc4SBrooks Davis
188b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
189b0d29bc4SBrooks Davissyntax(2)
190b0d29bc4SBrooks Davistest_suite("integration")
191b0d29bc4SBrooks Davisatf_test_program{name="expect_some_fail"}
192b0d29bc4SBrooks DavisEOF
193b0d29bc4SBrooks Davis
194b0d29bc4SBrooks Davis# CHECK_STYLE_DISABLE
195b0d29bc4SBrooks Davis    cat >expout <<EOF
196b0d29bc4SBrooks Davisexpect_some_fail:die  ->  failed: Test case was expected to terminate abruptly but it continued execution  [S.UUUs]
197b0d29bc4SBrooks Davisexpect_some_fail:exit  ->  failed: Test case expected to exit with code 12 but got code 34  [S.UUUs]
198b0d29bc4SBrooks Davisexpect_some_fail:failure  ->  failed: Test case was expecting a failure but none were raised  [S.UUUs]
199b0d29bc4SBrooks Davisexpect_some_fail:pass  ->  passed  [S.UUUs]
200b0d29bc4SBrooks Davisexpect_some_fail:signal  ->  failed: Test case expected to receive signal 15 but got 9  [S.UUUs]
201b0d29bc4SBrooks Davisexpect_some_fail:timeout  ->  failed: Test case was expected to hang but it continued execution  [S.UUUs]
202b0d29bc4SBrooks Davis
203b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
204b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
205b0d29bc4SBrooks Davis
20699689201SIgor Ostapenko1/6 passed (0 broken, 5 failed, 0 skipped)
207b0d29bc4SBrooks DavisEOF
208b0d29bc4SBrooks Davis# CHECK_STYLE_ENABLE
209b0d29bc4SBrooks Davis
210b0d29bc4SBrooks Davis    utils_cp_helper expect_some_fail .
211b0d29bc4SBrooks Davis    atf_check -s exit:1 -o file:expout -e empty kyua test
212b0d29bc4SBrooks Davis}
213b0d29bc4SBrooks Davis
214b0d29bc4SBrooks Davis
215b0d29bc4SBrooks Davisutils_test_case premature_exit
216b0d29bc4SBrooks Davispremature_exit_body() {
217b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
218b0d29bc4SBrooks Davis
219b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
220b0d29bc4SBrooks Davissyntax(2)
221b0d29bc4SBrooks Davistest_suite("integration")
222b0d29bc4SBrooks Davisatf_test_program{name="bogus_test_cases"}
223b0d29bc4SBrooks DavisEOF
224b0d29bc4SBrooks Davis
225b0d29bc4SBrooks Davis# CHECK_STYLE_DISABLE
226b0d29bc4SBrooks Davis    cat >expout <<EOF
227b0d29bc4SBrooks Davisbogus_test_cases:die  ->  broken: Premature exit; test case received signal 9  [S.UUUs]
228b0d29bc4SBrooks Davisbogus_test_cases:exit  ->  broken: Premature exit; test case exited with code 0  [S.UUUs]
229b0d29bc4SBrooks Davisbogus_test_cases:pass  ->  passed  [S.UUUs]
230b0d29bc4SBrooks Davis
231b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
232b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
233b0d29bc4SBrooks Davis
23499689201SIgor Ostapenko1/3 passed (2 broken, 0 failed, 0 skipped)
235b0d29bc4SBrooks DavisEOF
236b0d29bc4SBrooks Davis# CHECK_STYLE_ENABLE
237b0d29bc4SBrooks Davis
238b0d29bc4SBrooks Davis    utils_cp_helper bogus_test_cases .
239b0d29bc4SBrooks Davis    atf_check -s exit:1 -o file:expout -e empty kyua test
240b0d29bc4SBrooks Davis}
241b0d29bc4SBrooks Davis
242b0d29bc4SBrooks Davis
243b0d29bc4SBrooks Davisutils_test_case no_args
244b0d29bc4SBrooks Davisno_args_body() {
245b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
246b0d29bc4SBrooks Davis
247b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
248b0d29bc4SBrooks Davissyntax(2)
249b0d29bc4SBrooks Davistest_suite("integration")
250b0d29bc4SBrooks Davisatf_test_program{name="simple_all_pass"}
251b0d29bc4SBrooks Davisinclude("subdir/Kyuafile")
252b0d29bc4SBrooks DavisEOF
253b0d29bc4SBrooks Davis    utils_cp_helper metadata .
254b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass .
255b0d29bc4SBrooks Davis
256b0d29bc4SBrooks Davis    mkdir subdir
257b0d29bc4SBrooks Davis    cat >subdir/Kyuafile <<EOF
258b0d29bc4SBrooks Davissyntax(2)
259b0d29bc4SBrooks Davistest_suite("integration2")
260b0d29bc4SBrooks Davisatf_test_program{name="simple_some_fail"}
261b0d29bc4SBrooks DavisEOF
262b0d29bc4SBrooks Davis    utils_cp_helper simple_some_fail subdir
263b0d29bc4SBrooks Davis
264b0d29bc4SBrooks Davis    cat >expout <<EOF
265b0d29bc4SBrooks Davissimple_all_pass:pass  ->  passed  [S.UUUs]
266b0d29bc4SBrooks Davissimple_all_pass:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
267b0d29bc4SBrooks Davissubdir/simple_some_fail:fail  ->  failed: This fails on purpose  [S.UUUs]
268b0d29bc4SBrooks Davissubdir/simple_some_fail:pass  ->  passed  [S.UUUs]
269b0d29bc4SBrooks Davis
270b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
271b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
272b0d29bc4SBrooks Davis
27399689201SIgor Ostapenko2/4 passed (0 broken, 1 failed, 1 skipped)
274b0d29bc4SBrooks DavisEOF
275b0d29bc4SBrooks Davis    atf_check -s exit:1 -o file:expout -e empty kyua test
276b0d29bc4SBrooks Davis}
277b0d29bc4SBrooks Davis
278b0d29bc4SBrooks Davis
279b0d29bc4SBrooks Davisutils_test_case one_arg__subdir
280b0d29bc4SBrooks Davisone_arg__subdir_body() {
281b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
282b0d29bc4SBrooks Davis
283b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
284b0d29bc4SBrooks Davissyntax(2)
285b0d29bc4SBrooks Davistest_suite("top-level")
286b0d29bc4SBrooks Davisinclude("subdir/Kyuafile")
287b0d29bc4SBrooks DavisEOF
288b0d29bc4SBrooks Davis
289b0d29bc4SBrooks Davis    mkdir subdir
290b0d29bc4SBrooks Davis    cat >subdir/Kyuafile <<EOF
291b0d29bc4SBrooks Davissyntax(2)
292b0d29bc4SBrooks Davistest_suite("in-subdir")
293b0d29bc4SBrooks Davisatf_test_program{name="simple_all_pass"}
294b0d29bc4SBrooks DavisEOF
295b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass subdir
296b0d29bc4SBrooks Davis
297b0d29bc4SBrooks Davis# CHECK_STYLE_DISABLE
298b0d29bc4SBrooks Davis    cat >expout <<EOF
299b0d29bc4SBrooks Davissubdir/simple_all_pass:pass  ->  passed  [S.UUUs]
300b0d29bc4SBrooks Davissubdir/simple_all_pass:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
301b0d29bc4SBrooks Davis
302b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
303b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
304b0d29bc4SBrooks Davis
30599689201SIgor Ostapenko1/2 passed (0 broken, 0 failed, 1 skipped)
306b0d29bc4SBrooks DavisEOF
307b0d29bc4SBrooks Davis# CHECK_STYLE_ENABLE
308b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua test subdir
309b0d29bc4SBrooks Davis}
310b0d29bc4SBrooks Davis
311b0d29bc4SBrooks Davis
312b0d29bc4SBrooks Davisutils_test_case one_arg__test_case
313b0d29bc4SBrooks Davisone_arg__test_case_body() {
314b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
315b0d29bc4SBrooks Davis
316b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
317b0d29bc4SBrooks Davissyntax(2)
318b0d29bc4SBrooks Davistest_suite("top-level")
319b0d29bc4SBrooks Davisatf_test_program{name="first"}
320b0d29bc4SBrooks Davisatf_test_program{name="second"}
321b0d29bc4SBrooks DavisEOF
322b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass first
323b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass second
324b0d29bc4SBrooks Davis
325b0d29bc4SBrooks Davis    cat >expout <<EOF
326b0d29bc4SBrooks Davisfirst:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
327b0d29bc4SBrooks Davis
328b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
329b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
330b0d29bc4SBrooks Davis
33199689201SIgor Ostapenko0/1 passed (0 broken, 0 failed, 1 skipped)
332b0d29bc4SBrooks DavisEOF
333b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua test first:skip
334b0d29bc4SBrooks Davis}
335b0d29bc4SBrooks Davis
336b0d29bc4SBrooks Davis
337b0d29bc4SBrooks Davisutils_test_case one_arg__test_program
338b0d29bc4SBrooks Davisone_arg__test_program_body() {
339b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
340b0d29bc4SBrooks Davis
341b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
342b0d29bc4SBrooks Davissyntax(2)
343b0d29bc4SBrooks Davistest_suite("top-level")
344b0d29bc4SBrooks Davisatf_test_program{name="first"}
345b0d29bc4SBrooks Davisatf_test_program{name="second"}
346b0d29bc4SBrooks DavisEOF
347b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass first
348b0d29bc4SBrooks Davis    utils_cp_helper simple_some_fail second
349b0d29bc4SBrooks Davis
350b0d29bc4SBrooks Davis    cat >expout <<EOF
351b0d29bc4SBrooks Davissecond:fail  ->  failed: This fails on purpose  [S.UUUs]
352b0d29bc4SBrooks Davissecond:pass  ->  passed  [S.UUUs]
353b0d29bc4SBrooks Davis
354b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
355b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
356b0d29bc4SBrooks Davis
35799689201SIgor Ostapenko1/2 passed (0 broken, 1 failed, 0 skipped)
358b0d29bc4SBrooks DavisEOF
359b0d29bc4SBrooks Davis    atf_check -s exit:1 -o file:expout -e empty kyua test second
360b0d29bc4SBrooks Davis}
361b0d29bc4SBrooks Davis
362b0d29bc4SBrooks Davis
363b0d29bc4SBrooks Davisutils_test_case one_arg__invalid
364b0d29bc4SBrooks Davisone_arg__invalid_body() {
365b0d29bc4SBrooks Daviscat >experr <<EOF
366b0d29bc4SBrooks Daviskyua: E: Test case component in 'foo:' is empty.
367b0d29bc4SBrooks DavisEOF
368b0d29bc4SBrooks Davis    atf_check -s exit:2 -o empty -e file:experr kyua test foo:
369b0d29bc4SBrooks Davis
370b0d29bc4SBrooks Daviscat >experr <<EOF
371b0d29bc4SBrooks Daviskyua: E: Program name '/a/b' must be relative to the test suite, not absolute.
372b0d29bc4SBrooks DavisEOF
373b0d29bc4SBrooks Davis    atf_check -s exit:2 -o empty -e file:experr kyua test /a/b
374b0d29bc4SBrooks Davis}
375b0d29bc4SBrooks Davis
376b0d29bc4SBrooks Davis
377b0d29bc4SBrooks Davisutils_test_case many_args__ok
378b0d29bc4SBrooks Davismany_args__ok_body() {
379b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
380b0d29bc4SBrooks Davis
381b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
382b0d29bc4SBrooks Davissyntax(2)
383b0d29bc4SBrooks Davistest_suite("top-level")
384b0d29bc4SBrooks Davisinclude("subdir/Kyuafile")
385b0d29bc4SBrooks Davisatf_test_program{name="first"}
386b0d29bc4SBrooks DavisEOF
387b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass first
388b0d29bc4SBrooks Davis
389b0d29bc4SBrooks Davis    mkdir subdir
390b0d29bc4SBrooks Davis    cat >subdir/Kyuafile <<EOF
391b0d29bc4SBrooks Davissyntax(2)
392b0d29bc4SBrooks Davistest_suite("in-subdir")
393b0d29bc4SBrooks Davisatf_test_program{name="second"}
394b0d29bc4SBrooks DavisEOF
395b0d29bc4SBrooks Davis    utils_cp_helper simple_some_fail subdir/second
396b0d29bc4SBrooks Davis
397b0d29bc4SBrooks Davis    cat >expout <<EOF
398b0d29bc4SBrooks Davisfirst:pass  ->  passed  [S.UUUs]
399b0d29bc4SBrooks Davissubdir/second:fail  ->  failed: This fails on purpose  [S.UUUs]
400b0d29bc4SBrooks Davissubdir/second:pass  ->  passed  [S.UUUs]
401b0d29bc4SBrooks Davis
402b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
403b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
404b0d29bc4SBrooks Davis
40599689201SIgor Ostapenko2/3 passed (0 broken, 1 failed, 0 skipped)
406b0d29bc4SBrooks DavisEOF
407b0d29bc4SBrooks Davis    atf_check -s exit:1 -o file:expout -e empty kyua test subdir first:pass
408b0d29bc4SBrooks Davis}
409b0d29bc4SBrooks Davis
410b0d29bc4SBrooks Davis
411b0d29bc4SBrooks Davisutils_test_case many_args__invalid
412b0d29bc4SBrooks Davismany_args__invalid_body() {
413b0d29bc4SBrooks Daviscat >experr <<EOF
414b0d29bc4SBrooks Daviskyua: E: Program name component in ':badbad' is empty.
415b0d29bc4SBrooks DavisEOF
416b0d29bc4SBrooks Davis    atf_check -s exit:2 -o empty -e file:experr kyua test this-is-ok :badbad
417b0d29bc4SBrooks Davis
418b0d29bc4SBrooks Daviscat >experr <<EOF
419b0d29bc4SBrooks Daviskyua: E: Program name '/foo' must be relative to the test suite, not absolute.
420b0d29bc4SBrooks DavisEOF
421b0d29bc4SBrooks Davis    atf_check -s exit:2 -o empty -e file:experr kyua test this-is-ok /foo
422b0d29bc4SBrooks Davis}
423b0d29bc4SBrooks Davis
424b0d29bc4SBrooks Davis
425b0d29bc4SBrooks Davisutils_test_case many_args__no_match__all
426b0d29bc4SBrooks Davismany_args__no_match__all_body() {
427b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
428b0d29bc4SBrooks Davis
429b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
430b0d29bc4SBrooks Davissyntax(2)
431b0d29bc4SBrooks Davistest_suite("top-level")
432b0d29bc4SBrooks Davisatf_test_program{name="first"}
433b0d29bc4SBrooks Davisatf_test_program{name="second"}
434b0d29bc4SBrooks DavisEOF
435b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass first
436b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass second
437b0d29bc4SBrooks Davis
438b0d29bc4SBrooks Davis    cat >expout <<EOF
439b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
440b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
441b0d29bc4SBrooks DavisEOF
442b0d29bc4SBrooks Davis    cat >experr <<EOF
443b0d29bc4SBrooks Daviskyua: W: No test cases matched by the filter 'first1'.
444b0d29bc4SBrooks DavisEOF
445b0d29bc4SBrooks Davis    atf_check -s exit:1 -o file:expout -e file:experr kyua test first1
446b0d29bc4SBrooks Davis}
447b0d29bc4SBrooks Davis
448b0d29bc4SBrooks Davis
449b0d29bc4SBrooks Davisutils_test_case many_args__no_match__some
450b0d29bc4SBrooks Davismany_args__no_match__some_body() {
451b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
452b0d29bc4SBrooks Davis
453b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
454b0d29bc4SBrooks Davissyntax(2)
455b0d29bc4SBrooks Davistest_suite("top-level")
456b0d29bc4SBrooks Davisatf_test_program{name="first"}
457b0d29bc4SBrooks Davisatf_test_program{name="second"}
458b0d29bc4SBrooks Davisatf_test_program{name="third"}
459b0d29bc4SBrooks DavisEOF
460b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass first
461b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass second
462b0d29bc4SBrooks Davis    utils_cp_helper simple_some_fail third
463b0d29bc4SBrooks Davis
464b0d29bc4SBrooks Davis    cat >expout <<EOF
465b0d29bc4SBrooks Davisfirst:pass  ->  passed  [S.UUUs]
466b0d29bc4SBrooks Davisfirst:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
467b0d29bc4SBrooks Davisthird:fail  ->  failed: This fails on purpose  [S.UUUs]
468b0d29bc4SBrooks Davisthird:pass  ->  passed  [S.UUUs]
469b0d29bc4SBrooks Davis
470b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
471b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
472b0d29bc4SBrooks Davis
47399689201SIgor Ostapenko2/4 passed (0 broken, 1 failed, 1 skipped)
474b0d29bc4SBrooks DavisEOF
475b0d29bc4SBrooks Davis
476b0d29bc4SBrooks Davis    cat >experr <<EOF
477b0d29bc4SBrooks Daviskyua: W: No test cases matched by the filter 'fifth'.
478b0d29bc4SBrooks Daviskyua: W: No test cases matched by the filter 'fourth'.
479b0d29bc4SBrooks DavisEOF
480b0d29bc4SBrooks Davis    atf_check -s exit:1 -o file:expout -e file:experr kyua test first fourth \
481b0d29bc4SBrooks Davis        third fifth
482b0d29bc4SBrooks Davis}
483b0d29bc4SBrooks Davis
484b0d29bc4SBrooks Davis
485b0d29bc4SBrooks Davisutils_test_case args_are_relative
486b0d29bc4SBrooks Davisargs_are_relative_body() {
487b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
488b0d29bc4SBrooks Davis
489b0d29bc4SBrooks Davis    mkdir root
490b0d29bc4SBrooks Davis    cat >root/Kyuafile <<EOF
491b0d29bc4SBrooks Davissyntax(2)
492b0d29bc4SBrooks Davistest_suite("integration-1")
493b0d29bc4SBrooks Davisatf_test_program{name="first"}
494b0d29bc4SBrooks Davisatf_test_program{name="second"}
495b0d29bc4SBrooks Davisinclude("subdir/Kyuafile")
496b0d29bc4SBrooks DavisEOF
497b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass root/first
498b0d29bc4SBrooks Davis    utils_cp_helper simple_some_fail root/second
499b0d29bc4SBrooks Davis
500b0d29bc4SBrooks Davis    mkdir root/subdir
501b0d29bc4SBrooks Davis    cat >root/subdir/Kyuafile <<EOF
502b0d29bc4SBrooks Davissyntax(2)
503b0d29bc4SBrooks Davistest_suite("integration-2")
504b0d29bc4SBrooks Davisatf_test_program{name="third"}
505b0d29bc4SBrooks Davisatf_test_program{name="fourth"}
506b0d29bc4SBrooks DavisEOF
507b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass root/subdir/third
508b0d29bc4SBrooks Davis    utils_cp_helper simple_some_fail root/subdir/fourth
509b0d29bc4SBrooks Davis
510b0d29bc4SBrooks Davis    cat >expout <<EOF
511b0d29bc4SBrooks Davisfirst:pass  ->  passed  [S.UUUs]
512b0d29bc4SBrooks Davisfirst:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
513b0d29bc4SBrooks Davissubdir/fourth:fail  ->  failed: This fails on purpose  [S.UUUs]
514b0d29bc4SBrooks Davis
515b0d29bc4SBrooks DavisResults file id is $(utils_results_id root)
516b0d29bc4SBrooks DavisResults saved to $(utils_results_file root)
517b0d29bc4SBrooks Davis
51899689201SIgor Ostapenko1/3 passed (0 broken, 1 failed, 1 skipped)
519b0d29bc4SBrooks DavisEOF
520b0d29bc4SBrooks Davis    atf_check -s exit:1 -o file:expout -e empty kyua test \
521b0d29bc4SBrooks Davis        -k "$(pwd)/root/Kyuafile" first subdir/fourth:fail
522b0d29bc4SBrooks Davis}
523b0d29bc4SBrooks Davis
524b0d29bc4SBrooks Davis
525b0d29bc4SBrooks Davisutils_test_case only_load_used_test_programs
526b0d29bc4SBrooks Davisonly_load_used_test_programs_body() {
527b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
528b0d29bc4SBrooks Davis
529b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
530b0d29bc4SBrooks Davissyntax(2)
531b0d29bc4SBrooks Davistest_suite("integration")
532b0d29bc4SBrooks Davisatf_test_program{name="first"}
533b0d29bc4SBrooks Davisatf_test_program{name="second"}
534b0d29bc4SBrooks DavisEOF
535b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass first
536b0d29bc4SBrooks Davis    utils_cp_helper bad_test_program second
537b0d29bc4SBrooks Davis
538b0d29bc4SBrooks Davis    cat >expout <<EOF
539b0d29bc4SBrooks Davisfirst:pass  ->  passed  [S.UUUs]
540b0d29bc4SBrooks Davisfirst:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
541b0d29bc4SBrooks Davis
542b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
543b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
544b0d29bc4SBrooks Davis
54599689201SIgor Ostapenko1/2 passed (0 broken, 0 failed, 1 skipped)
546b0d29bc4SBrooks DavisEOF
547b0d29bc4SBrooks Davis    CREATE_COOKIE="$(pwd)/cookie"; export CREATE_COOKIE
548b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua test first
549b0d29bc4SBrooks Davis    if [ -f "${CREATE_COOKIE}" ]; then
550b0d29bc4SBrooks Davis        atf_fail "An unmatched test case has been executed, which harms" \
551b0d29bc4SBrooks Davis            "performance"
552b0d29bc4SBrooks Davis    fi
553b0d29bc4SBrooks Davis}
554b0d29bc4SBrooks Davis
555b0d29bc4SBrooks Davis
556b0d29bc4SBrooks Davisutils_test_case config_behavior
557b0d29bc4SBrooks Davisconfig_behavior_body() {
558b0d29bc4SBrooks Davis    cat >"my-config" <<EOF
559b0d29bc4SBrooks Davissyntax(2)
560b0d29bc4SBrooks Davistest_suites.suite1["the-variable"] = "value1"
561b0d29bc4SBrooks Davistest_suites.suite2["the-variable"] = "override me"
562b0d29bc4SBrooks DavisEOF
563b0d29bc4SBrooks Davis
564b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
565b0d29bc4SBrooks Davissyntax(2)
566b0d29bc4SBrooks Davisatf_test_program{name="config1", test_suite="suite1"}
567b0d29bc4SBrooks Davisatf_test_program{name="config2", test_suite="suite2"}
568b0d29bc4SBrooks Davisatf_test_program{name="config3", test_suite="suite3"}
569b0d29bc4SBrooks DavisEOF
570b0d29bc4SBrooks Davis    utils_cp_helper config config1
571b0d29bc4SBrooks Davis    utils_cp_helper config config2
572b0d29bc4SBrooks Davis    utils_cp_helper config config3
573b0d29bc4SBrooks Davis
574b0d29bc4SBrooks Davis    atf_check -s exit:1 -o save:stdout -e empty \
575b0d29bc4SBrooks Davis        kyua -c my-config -v test_suites.suite2.the-variable=value2 test
576b0d29bc4SBrooks Davis    atf_check -s exit:0 -o ignore -e empty \
577b0d29bc4SBrooks Davis        grep 'config1:get_variable.*failed' stdout
578b0d29bc4SBrooks Davis    atf_check -s exit:0 -o ignore -e empty \
579b0d29bc4SBrooks Davis        grep 'config2:get_variable.*passed' stdout
580b0d29bc4SBrooks Davis    atf_check -s exit:0 -o ignore -e empty \
581b0d29bc4SBrooks Davis        grep 'config3:get_variable.*skipped' stdout
582b0d29bc4SBrooks Davis
583b0d29bc4SBrooks Davis    CONFIG_VAR_FILE="$(pwd)/cookie"; export CONFIG_VAR_FILE
584b0d29bc4SBrooks Davis    if [ -f "${CONFIG_VAR_FILE}" ]; then
585b0d29bc4SBrooks Davis        atf_fail "Cookie file already created; test case list may have gotten" \
586b0d29bc4SBrooks Davis            "a bad configuration"
587b0d29bc4SBrooks Davis    fi
588b0d29bc4SBrooks Davis    atf_check -s exit:1 -o ignore -e empty kyua -c my-config test config1
589b0d29bc4SBrooks Davis    [ -f "${CONFIG_VAR_FILE}" ] || \
590b0d29bc4SBrooks Davis        atf_fail "Cookie file not created; test case list did not get" \
591b0d29bc4SBrooks Davis            "configuration variables"
592b0d29bc4SBrooks Davis    value="$(cat "${CONFIG_VAR_FILE}")"
593b0d29bc4SBrooks Davis    [ "${value}" = "value1" ] || \
594b0d29bc4SBrooks Davis        atf_fail "Invalid value (${value}) in cookie file; test case list did" \
595b0d29bc4SBrooks Davis            "not get the correct configuration variables"
596b0d29bc4SBrooks Davis}
597b0d29bc4SBrooks Davis
598b0d29bc4SBrooks Davis
599*51a8eb64SIgor Ostapenkoutils_test_case config_unprivileged_user
600*51a8eb64SIgor Ostapenkoconfig_unprivileged_user_body() {
601*51a8eb64SIgor Ostapenko    cat >"my-config" <<EOF
602*51a8eb64SIgor Ostapenkosyntax(2)
603*51a8eb64SIgor Ostapenkounprivileged_user = "nobody"
604*51a8eb64SIgor OstapenkoEOF
605*51a8eb64SIgor Ostapenko    cat >Kyuafile <<EOF
606*51a8eb64SIgor Ostapenkosyntax(2)
607*51a8eb64SIgor Ostapenkoatf_test_program{name="config1", test_suite="suite1"}
608*51a8eb64SIgor OstapenkoEOF
609*51a8eb64SIgor Ostapenko    utils_cp_helper config config1
610*51a8eb64SIgor Ostapenko
611*51a8eb64SIgor Ostapenko    CONFIG_VAR_FILE="$(pwd)/cookie"; export CONFIG_VAR_FILE
612*51a8eb64SIgor Ostapenko    if [ -f "${CONFIG_VAR_FILE}" ]; then
613*51a8eb64SIgor Ostapenko        atf_fail "Cookie file already created; test case list may have gotten" \
614*51a8eb64SIgor Ostapenko            "a bad configuration"
615*51a8eb64SIgor Ostapenko    fi
616*51a8eb64SIgor Ostapenko
617*51a8eb64SIgor Ostapenko    CONFIG_VAR_NAME="unprivileged-user"; export CONFIG_VAR_NAME
618*51a8eb64SIgor Ostapenko    atf_check -s exit:1 -o ignore -e ignore kyua -c my-config test config1
619*51a8eb64SIgor Ostapenko    [ -f "${CONFIG_VAR_FILE}" ] || \
620*51a8eb64SIgor Ostapenko        atf_fail "Cookie file not created; test case list did not get" \
621*51a8eb64SIgor Ostapenko            "configuration variables"
622*51a8eb64SIgor Ostapenko    value="$(cat "${CONFIG_VAR_FILE}")"
623*51a8eb64SIgor Ostapenko    [ "${value}" = "nobody" ] || \
624*51a8eb64SIgor Ostapenko        atf_fail "Invalid value (${value}) in cookie file; test case list did" \
625*51a8eb64SIgor Ostapenko            "not get the correct configuration variables"
626*51a8eb64SIgor Ostapenko
627*51a8eb64SIgor Ostapenko    rm "${CONFIG_VAR_FILE}"
628*51a8eb64SIgor Ostapenko
629*51a8eb64SIgor Ostapenko    CONFIG_VAR_NAME="unprivileged_user"; export CONFIG_VAR_NAME
630*51a8eb64SIgor Ostapenko    atf_check -s exit:1 -o ignore -e ignore kyua -c my-config test config1
631*51a8eb64SIgor Ostapenko    [ -f "${CONFIG_VAR_FILE}" ] || \
632*51a8eb64SIgor Ostapenko        atf_fail "Cookie file not created; test case list did not get" \
633*51a8eb64SIgor Ostapenko            "configuration variables"
634*51a8eb64SIgor Ostapenko    value="$(cat "${CONFIG_VAR_FILE}")"
635*51a8eb64SIgor Ostapenko    [ "${value}" = "nobody" ] || \
636*51a8eb64SIgor Ostapenko        atf_fail "Invalid value (${value}) in cookie file; test case list did" \
637*51a8eb64SIgor Ostapenko            "not get the correct configuration variables"
638*51a8eb64SIgor Ostapenko}
639*51a8eb64SIgor Ostapenko
640*51a8eb64SIgor Ostapenko
641b0d29bc4SBrooks Davisutils_test_case store_contents
642b0d29bc4SBrooks Davisstore_contents_body() {
643b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
644b0d29bc4SBrooks Davis
645b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
646b0d29bc4SBrooks Davissyntax(2)
647b0d29bc4SBrooks Davisatf_test_program{name="some-program", test_suite="suite1"}
648b0d29bc4SBrooks DavisEOF
649b0d29bc4SBrooks Davis    utils_cp_helper simple_some_fail some-program
650b0d29bc4SBrooks Davis    cat >expout <<EOF
651b0d29bc4SBrooks Davissome-program:fail  ->  failed: This fails on purpose  [S.UUUs]
652b0d29bc4SBrooks Davissome-program:pass  ->  passed  [S.UUUs]
653b0d29bc4SBrooks Davis
654b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
655b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
656b0d29bc4SBrooks Davis
65799689201SIgor Ostapenko1/2 passed (0 broken, 1 failed, 0 skipped)
658b0d29bc4SBrooks DavisEOF
659b0d29bc4SBrooks Davis
660b0d29bc4SBrooks Davis    atf_check -s exit:1 -o file:expout -e empty kyua test
661b0d29bc4SBrooks Davis
662b0d29bc4SBrooks Daviscat >expout <<EOF
663b0d29bc4SBrooks Davissome-program,fail,failed,This fails on purpose
664b0d29bc4SBrooks Davissome-program,pass,passed,NULL
665b0d29bc4SBrooks DavisEOF
666b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty \
667b0d29bc4SBrooks Davis        kyua db-exec --no-headers \
668b0d29bc4SBrooks Davis        "SELECT " \
669b0d29bc4SBrooks Davis        "       test_programs.relative_path, test_cases.name, " \
670b0d29bc4SBrooks Davis        "       test_results.result_type, test_results.result_reason " \
671b0d29bc4SBrooks Davis        "FROM test_programs " \
672b0d29bc4SBrooks Davis        "     JOIN test_cases " \
673b0d29bc4SBrooks Davis        "     ON test_programs.test_program_id = test_cases.test_program_id " \
674b0d29bc4SBrooks Davis        "     JOIN test_results " \
675b0d29bc4SBrooks Davis        "     ON test_cases.test_case_id = test_results.test_case_id " \
676b0d29bc4SBrooks Davis        "ORDER BY test_programs.relative_path, test_cases.name"
677b0d29bc4SBrooks Davis}
678b0d29bc4SBrooks Davis
679b0d29bc4SBrooks Davis
680b0d29bc4SBrooks Davisutils_test_case results_file__ok
681b0d29bc4SBrooks Davisresults_file__ok_body() {
682b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
683b0d29bc4SBrooks Davissyntax(2)
684b0d29bc4SBrooks Davisatf_test_program{name="config1", test_suite="suite1"}
685b0d29bc4SBrooks DavisEOF
686b0d29bc4SBrooks Davis    utils_cp_helper config config1
687b0d29bc4SBrooks Davis
688b0d29bc4SBrooks Davis    atf_check -s exit:0 -o ignore -e empty kyua test -r foo1.db
689b0d29bc4SBrooks Davis   test -f foo1.db || atf_fail "-s did not work"
690b0d29bc4SBrooks Davis    atf_check -s exit:0 -o ignore -e empty kyua test --results-file=foo2.db
691b0d29bc4SBrooks Davis    test -f foo2.db || atf_fail "--results-file did not work"
692b0d29bc4SBrooks Davis    test ! -f .kyua/store.db || atf_fail "Default database created"
693b0d29bc4SBrooks Davis}
694b0d29bc4SBrooks Davis
695b0d29bc4SBrooks Davis
696b0d29bc4SBrooks Davisutils_test_case results_file__fail
697b0d29bc4SBrooks Davisresults_file__fail_body() {
698b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
699b0d29bc4SBrooks Davissyntax(2)
700b0d29bc4SBrooks Davisatf_test_program{name="config1", test_suite="suite1"}
701b0d29bc4SBrooks DavisEOF
702b0d29bc4SBrooks Davis    utils_cp_helper config config1
703b0d29bc4SBrooks Davis
704b0d29bc4SBrooks Davis    atf_check -s exit:3 -o empty -e match:"Invalid.*--results-file" \
705b0d29bc4SBrooks Davis        kyua test --results-file=
706b0d29bc4SBrooks Davis}
707b0d29bc4SBrooks Davis
708b0d29bc4SBrooks Davis
709b0d29bc4SBrooks Davisutils_test_case results_file__reuse
710b0d29bc4SBrooks Davisresults_file__reuse_body() {
711b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
712b0d29bc4SBrooks Davis
713b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
714b0d29bc4SBrooks Davissyntax(2)
715b0d29bc4SBrooks Davisatf_test_program{name="simple_all_pass", test_suite="integration"}
716b0d29bc4SBrooks DavisEOF
717b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass .
718b0d29bc4SBrooks Davis    atf_check -s exit:0 -o ignore -e empty kyua test -r results.db
719b0d29bc4SBrooks Davis
720b0d29bc4SBrooks Davis    atf_check -s exit:2 -o empty -e match:"results.db already exists" \
721b0d29bc4SBrooks Davis        kyua test --results-file="results.db"
722b0d29bc4SBrooks Davis}
723b0d29bc4SBrooks Davis
724b0d29bc4SBrooks Davis
725b0d29bc4SBrooks Davisutils_test_case build_root_flag
726b0d29bc4SBrooks Davisbuild_root_flag_body() {
727b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
728b0d29bc4SBrooks Davis
729b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
730b0d29bc4SBrooks Davissyntax(2)
731b0d29bc4SBrooks Davistest_suite("integration")
732b0d29bc4SBrooks Davisatf_test_program{name="first"}
733b0d29bc4SBrooks Davisinclude("subdir/Kyuafile")
734b0d29bc4SBrooks DavisEOF
735b0d29bc4SBrooks Davis
736b0d29bc4SBrooks Davis    mkdir subdir
737b0d29bc4SBrooks Davis    cat >subdir/Kyuafile <<EOF
738b0d29bc4SBrooks Davissyntax(2)
739b0d29bc4SBrooks Davistest_suite("integration")
740b0d29bc4SBrooks Davisatf_test_program{name="second"}
741b0d29bc4SBrooks Davisatf_test_program{name="third"}
742b0d29bc4SBrooks DavisEOF
743b0d29bc4SBrooks Davis
744b0d29bc4SBrooks Davis    cat >expout <<EOF
745b0d29bc4SBrooks Davisfirst:pass  ->  passed  [S.UUUs]
746b0d29bc4SBrooks Davisfirst:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
747b0d29bc4SBrooks Davissubdir/second:pass  ->  passed  [S.UUUs]
748b0d29bc4SBrooks Davissubdir/second:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
749b0d29bc4SBrooks Davissubdir/third:pass  ->  passed  [S.UUUs]
750b0d29bc4SBrooks Davissubdir/third:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
751b0d29bc4SBrooks Davis
752b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
753b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
754b0d29bc4SBrooks Davis
75599689201SIgor Ostapenko3/6 passed (0 broken, 0 failed, 3 skipped)
756b0d29bc4SBrooks DavisEOF
757b0d29bc4SBrooks Davis
758b0d29bc4SBrooks Davis    mkdir build
759b0d29bc4SBrooks Davis    mkdir build/subdir
760b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass build/first
761b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass build/subdir/second
762b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass build/subdir/third
763b0d29bc4SBrooks Davis
764b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua test --build-root=build
765b0d29bc4SBrooks Davis}
766b0d29bc4SBrooks Davis
767b0d29bc4SBrooks Davis
768b0d29bc4SBrooks Davisutils_test_case kyuafile_flag__no_args
769b0d29bc4SBrooks Daviskyuafile_flag__no_args_body() {
770b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
771b0d29bc4SBrooks Davis
772b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
773b0d29bc4SBrooks DavisThis file is bogus but it is not loaded.
774b0d29bc4SBrooks DavisEOF
775b0d29bc4SBrooks Davis
776b0d29bc4SBrooks Davis    cat >myfile <<EOF
777b0d29bc4SBrooks Davissyntax(2)
778b0d29bc4SBrooks Davistest_suite("integration")
779b0d29bc4SBrooks Davisatf_test_program{name="sometest"}
780b0d29bc4SBrooks DavisEOF
781b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass sometest
782b0d29bc4SBrooks Davis
783b0d29bc4SBrooks Davis    cat >expout <<EOF
784b0d29bc4SBrooks Davissometest:pass  ->  passed  [S.UUUs]
785b0d29bc4SBrooks Davissometest:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
786b0d29bc4SBrooks Davis
787b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
788b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
789b0d29bc4SBrooks Davis
79099689201SIgor Ostapenko1/2 passed (0 broken, 0 failed, 1 skipped)
791b0d29bc4SBrooks DavisEOF
792b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua test -k myfile
793b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua test --kyuafile=myfile
794b0d29bc4SBrooks Davis}
795b0d29bc4SBrooks Davis
796b0d29bc4SBrooks Davis
797b0d29bc4SBrooks Davisutils_test_case kyuafile_flag__some_args
798b0d29bc4SBrooks Daviskyuafile_flag__some_args_body() {
799b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
800b0d29bc4SBrooks Davis
801b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
802b0d29bc4SBrooks DavisThis file is bogus but it is not loaded.
803b0d29bc4SBrooks DavisEOF
804b0d29bc4SBrooks Davis
805b0d29bc4SBrooks Davis    cat >myfile <<EOF
806b0d29bc4SBrooks Davissyntax(2)
807b0d29bc4SBrooks Davistest_suite("hello-world")
808b0d29bc4SBrooks Davisatf_test_program{name="sometest"}
809b0d29bc4SBrooks DavisEOF
810b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass sometest
811b0d29bc4SBrooks Davis
812b0d29bc4SBrooks Davis    cat >expout <<EOF
813b0d29bc4SBrooks Davissometest:pass  ->  passed  [S.UUUs]
814b0d29bc4SBrooks Davissometest:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
815b0d29bc4SBrooks Davis
816b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
817b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
818b0d29bc4SBrooks Davis
81999689201SIgor Ostapenko1/2 passed (0 broken, 0 failed, 1 skipped)
820b0d29bc4SBrooks DavisEOF
821b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua test -k myfile sometest
822b0d29bc4SBrooks Davis    cat >expout <<EOF
823b0d29bc4SBrooks Davissometest:pass  ->  passed  [S.UUUs]
824b0d29bc4SBrooks Davissometest:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
825b0d29bc4SBrooks Davis
826b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
827b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
828b0d29bc4SBrooks Davis
82999689201SIgor Ostapenko1/2 passed (0 broken, 0 failed, 1 skipped)
830b0d29bc4SBrooks DavisEOF
831b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua test --kyuafile=myfile \
832b0d29bc4SBrooks Davis        sometest
833b0d29bc4SBrooks Davis}
834b0d29bc4SBrooks Davis
835b0d29bc4SBrooks Davis
836b0d29bc4SBrooks Davisutils_test_case interrupt
837b0d29bc4SBrooks Davisinterrupt_body() {
838b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
839b0d29bc4SBrooks Davissyntax(2)
840b0d29bc4SBrooks Davistest_suite("integration")
841b0d29bc4SBrooks Davisatf_test_program{name="interrupts"}
842b0d29bc4SBrooks DavisEOF
843b0d29bc4SBrooks Davis    utils_cp_helper interrupts .
844b0d29bc4SBrooks Davis
845b0d29bc4SBrooks Davis    kyua \
846b0d29bc4SBrooks Davis        -v test_suites.integration.body-cookie="$(pwd)/body" \
847b0d29bc4SBrooks Davis        -v test_suites.integration.cleanup-cookie="$(pwd)/cleanup" \
848b0d29bc4SBrooks Davis        test >stdout 2>stderr &
849b0d29bc4SBrooks Davis    pid=${!}
850b0d29bc4SBrooks Davis    echo "Kyua subprocess is PID ${pid}"
851b0d29bc4SBrooks Davis
852b0d29bc4SBrooks Davis    while [ ! -f body ]; do
853b0d29bc4SBrooks Davis        echo "Waiting for body to start"
854b0d29bc4SBrooks Davis        sleep 1
855b0d29bc4SBrooks Davis    done
856b0d29bc4SBrooks Davis    echo "Body started"
857b0d29bc4SBrooks Davis    sleep 1
858b0d29bc4SBrooks Davis
859b0d29bc4SBrooks Davis    echo "Sending INT signal to ${pid}"
860b0d29bc4SBrooks Davis    kill -INT ${pid}
861b0d29bc4SBrooks Davis    echo "Waiting for process ${pid} to exit"
862b0d29bc4SBrooks Davis    wait ${pid}
863b0d29bc4SBrooks Davis    ret=${?}
864b0d29bc4SBrooks Davis    sed -e 's,^,kyua stdout:,' stdout
865b0d29bc4SBrooks Davis    sed -e 's,^,kyua stderr:,' stderr
866b0d29bc4SBrooks Davis    echo "Process ${pid} exited"
867b0d29bc4SBrooks Davis    [ ${ret} -ne 0 ] || atf_fail 'No error code reported'
868b0d29bc4SBrooks Davis
869b0d29bc4SBrooks Davis    [ -f cleanup ] || atf_fail 'Cleanup part not executed after signal'
870b0d29bc4SBrooks Davis    atf_expect_pass
871b0d29bc4SBrooks Davis
872b0d29bc4SBrooks Davis    atf_check -s exit:0 -o ignore -e empty grep 'Signal caught' stderr
873b0d29bc4SBrooks Davis    atf_check -s exit:0 -o ignore -e empty \
874b0d29bc4SBrooks Davis        grep 'kyua: E: Interrupted by signal' stderr
875b0d29bc4SBrooks Davis}
876b0d29bc4SBrooks Davis
877b0d29bc4SBrooks Davis
878b0d29bc4SBrooks Davisutils_test_case exclusive_tests
879b0d29bc4SBrooks Davisexclusive_tests_body() {
880b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
881b0d29bc4SBrooks Davissyntax(2)
882b0d29bc4SBrooks Davistest_suite("integration")
883b0d29bc4SBrooks DavisEOF
884b0d29bc4SBrooks Davis    for i in $(seq 100); do
885b0d29bc4SBrooks Davis        echo 'plain_test_program{name="race", is_exclusive=true}' >>Kyuafile
886b0d29bc4SBrooks Davis    done
887b0d29bc4SBrooks Davis    utils_cp_helper race .
888b0d29bc4SBrooks Davis
889b0d29bc4SBrooks Davis    atf_check \
890b0d29bc4SBrooks Davis        -s exit:0 \
891b0d29bc4SBrooks Davis        -o match:"100/100 passed" \
892b0d29bc4SBrooks Davis        kyua \
893b0d29bc4SBrooks Davis        -v parallelism=20 \
894b0d29bc4SBrooks Davis        -v test_suites.integration.shared_file="$(pwd)/shared_file" \
895b0d29bc4SBrooks Davis        test
896b0d29bc4SBrooks Davis}
897b0d29bc4SBrooks Davis
898b0d29bc4SBrooks Davis
899b0d29bc4SBrooks Davisutils_test_case no_test_program_match
900b0d29bc4SBrooks Davisno_test_program_match_body() {
901b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
902b0d29bc4SBrooks Davis
903b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
904b0d29bc4SBrooks Davissyntax(2)
905b0d29bc4SBrooks Davistest_suite("integration")
906b0d29bc4SBrooks Davisatf_test_program{name="first"}
907b0d29bc4SBrooks DavisEOF
908b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass first
909b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass second
910b0d29bc4SBrooks Davis
911b0d29bc4SBrooks Davis    cat >expout <<EOF
912b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
913b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
914b0d29bc4SBrooks DavisEOF
915b0d29bc4SBrooks Davis    cat >experr <<EOF
916b0d29bc4SBrooks Daviskyua: W: No test cases matched by the filter 'second'.
917b0d29bc4SBrooks DavisEOF
918b0d29bc4SBrooks Davis    atf_check -s exit:1 -o file:expout -e file:experr kyua test second
919b0d29bc4SBrooks Davis}
920b0d29bc4SBrooks Davis
921b0d29bc4SBrooks Davis
922b0d29bc4SBrooks Davisutils_test_case no_test_case_match
923b0d29bc4SBrooks Davisno_test_case_match_body() {
924b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
925b0d29bc4SBrooks Davis
926b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
927b0d29bc4SBrooks Davissyntax(2)
928b0d29bc4SBrooks Davistest_suite("integration")
929b0d29bc4SBrooks Davisatf_test_program{name="first"}
930b0d29bc4SBrooks DavisEOF
931b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass first
932b0d29bc4SBrooks Davis
933b0d29bc4SBrooks Davis    cat >expout <<EOF
934b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
935b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
936b0d29bc4SBrooks DavisEOF
937b0d29bc4SBrooks Davis    cat >experr <<EOF
938b0d29bc4SBrooks Daviskyua: W: No test cases matched by the filter 'first:foobar'.
939b0d29bc4SBrooks DavisEOF
940b0d29bc4SBrooks Davis    atf_check -s exit:1 -o file:expout -e file:experr kyua test first:foobar
941b0d29bc4SBrooks Davis}
942b0d29bc4SBrooks Davis
943b0d29bc4SBrooks Davis
944b0d29bc4SBrooks Davisutils_test_case missing_kyuafile__no_args
945b0d29bc4SBrooks Davismissing_kyuafile__no_args_body() {
946b0d29bc4SBrooks Davis    cat >experr <<EOF
947b0d29bc4SBrooks Daviskyua: E: Load of 'Kyuafile' failed: File 'Kyuafile' not found.
948b0d29bc4SBrooks DavisEOF
949b0d29bc4SBrooks Davis    atf_check -s exit:2 -o empty -e file:experr kyua test
950b0d29bc4SBrooks Davis}
951b0d29bc4SBrooks Davis
952b0d29bc4SBrooks Davis
953b0d29bc4SBrooks Davisutils_test_case missing_kyuafile__test_program
954b0d29bc4SBrooks Davismissing_kyuafile__test_program_body() {
955b0d29bc4SBrooks Davis    mkdir subdir
956b0d29bc4SBrooks Davis    cat >subdir/Kyuafile <<EOF
957b0d29bc4SBrooks Davissyntax(2)
958b0d29bc4SBrooks Davistest_suite("integration")
959b0d29bc4SBrooks Davisatf_test_program{name="unused"}
960b0d29bc4SBrooks DavisEOF
961b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass subdir/unused
962b0d29bc4SBrooks Davis
963b0d29bc4SBrooks Davis    cat >experr <<EOF
964b0d29bc4SBrooks Daviskyua: E: Load of 'Kyuafile' failed: File 'Kyuafile' not found.
965b0d29bc4SBrooks DavisEOF
966b0d29bc4SBrooks Davis    atf_check -s exit:2 -o empty -e file:experr kyua test subdir/unused
967b0d29bc4SBrooks Davis}
968b0d29bc4SBrooks Davis
969b0d29bc4SBrooks Davis
970b0d29bc4SBrooks Davisutils_test_case missing_kyuafile__subdir
971b0d29bc4SBrooks Davismissing_kyuafile__subdir_body() {
972b0d29bc4SBrooks Davis    mkdir subdir
973b0d29bc4SBrooks Davis    cat >subdir/Kyuafile <<EOF
974b0d29bc4SBrooks Davissyntax(2)
975b0d29bc4SBrooks Davistest_suite("integration")
976b0d29bc4SBrooks Davisatf_test_program{name="unused"}
977b0d29bc4SBrooks DavisEOF
978b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass subdir/unused
979b0d29bc4SBrooks Davis
980b0d29bc4SBrooks Davis    cat >experr <<EOF
981b0d29bc4SBrooks Daviskyua: E: Load of 'Kyuafile' failed: File 'Kyuafile' not found.
982b0d29bc4SBrooks DavisEOF
983b0d29bc4SBrooks Davis    atf_check -s exit:2 -o empty -e file:experr kyua test subdir
984b0d29bc4SBrooks Davis}
985b0d29bc4SBrooks Davis
986b0d29bc4SBrooks Davis
987b0d29bc4SBrooks Davisutils_test_case bogus_config
988b0d29bc4SBrooks Davisbogus_config_body() {
989b0d29bc4SBrooks Davis    mkdir .kyua
990b0d29bc4SBrooks Davis    cat >"${HOME}/.kyua/kyua.conf" <<EOF
991b0d29bc4SBrooks DavisHello, world.
992b0d29bc4SBrooks DavisEOF
993b0d29bc4SBrooks Davis
994b0d29bc4SBrooks Davis    file_re='.*\.kyua/kyua.conf'
995b0d29bc4SBrooks Davis    atf_check -s exit:2 -o empty \
996b0d29bc4SBrooks Davis        -e match:"^kyua: E: Load of '${file_re}' failed: Failed to load Lua" \
997b0d29bc4SBrooks Davis        kyua test
998b0d29bc4SBrooks Davis}
999b0d29bc4SBrooks Davis
1000b0d29bc4SBrooks Davis
1001b0d29bc4SBrooks Davisutils_test_case bogus_kyuafile
1002b0d29bc4SBrooks Davisbogus_kyuafile_body() {
1003b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
1004b0d29bc4SBrooks DavisHello, world.
1005b0d29bc4SBrooks DavisEOF
1006b0d29bc4SBrooks Davis    atf_check -s exit:2 -o empty \
1007b0d29bc4SBrooks Davis        -e match:"Load of 'Kyuafile' failed: .* Kyuafile:2:" kyua list
1008b0d29bc4SBrooks Davis}
1009b0d29bc4SBrooks Davis
1010b0d29bc4SBrooks Davis
1011b0d29bc4SBrooks Davisutils_test_case bogus_test_program
1012b0d29bc4SBrooks Davisbogus_test_program_body() {
1013b0d29bc4SBrooks Davis    utils_install_stable_test_wrapper
1014b0d29bc4SBrooks Davis
1015b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
1016b0d29bc4SBrooks Davissyntax(2)
1017b0d29bc4SBrooks Davistest_suite("integration")
1018b0d29bc4SBrooks Davisatf_test_program{name="crash_on_list"}
1019b0d29bc4SBrooks Davisatf_test_program{name="non_executable"}
1020b0d29bc4SBrooks DavisEOF
1021b0d29bc4SBrooks Davis    utils_cp_helper bad_test_program crash_on_list
1022b0d29bc4SBrooks Davis    echo 'I am not executable' >non_executable
1023b0d29bc4SBrooks Davis
1024b0d29bc4SBrooks Davis# CHECK_STYLE_DISABLE
1025b0d29bc4SBrooks Davis    cat >expout <<EOF
1026b0d29bc4SBrooks Daviscrash_on_list:__test_cases_list__  ->  broken: Invalid header for test case list; expecting Content-Type for application/X-atf-tp version 1, got ''  [S.UUUs]
1027b0d29bc4SBrooks Davisnon_executable:__test_cases_list__  ->  broken: Permission denied to run test program  [S.UUUs]
1028b0d29bc4SBrooks Davis
1029b0d29bc4SBrooks DavisResults file id is $(utils_results_id)
1030b0d29bc4SBrooks DavisResults saved to $(utils_results_file)
1031b0d29bc4SBrooks Davis
103299689201SIgor Ostapenko0/2 passed (2 broken, 0 failed, 0 skipped)
1033b0d29bc4SBrooks DavisEOF
1034b0d29bc4SBrooks Davis# CHECK_STYLE_ENABLE
1035b0d29bc4SBrooks Davis    atf_check -s exit:1 -o file:expout -e empty kyua test
1036b0d29bc4SBrooks Davis}
1037b0d29bc4SBrooks Davis
1038b0d29bc4SBrooks Davis
1039b0d29bc4SBrooks Davisutils_test_case missing_test_program
1040b0d29bc4SBrooks Davismissing_test_program_body() {
1041b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
1042b0d29bc4SBrooks Davissyntax(2)
1043b0d29bc4SBrooks Davisinclude("subdir/Kyuafile")
1044b0d29bc4SBrooks DavisEOF
1045b0d29bc4SBrooks Davis    mkdir subdir
1046b0d29bc4SBrooks Davis    cat >subdir/Kyuafile <<EOF
1047b0d29bc4SBrooks Davissyntax(2)
1048b0d29bc4SBrooks Davistest_suite("integration")
1049b0d29bc4SBrooks Davisatf_test_program{name="ok"}
1050b0d29bc4SBrooks Davisatf_test_program{name="i-am-missing"}
1051b0d29bc4SBrooks DavisEOF
1052b0d29bc4SBrooks Davis    echo 'I should not be touched because the Kyuafile is bogus' >subdir/ok
1053b0d29bc4SBrooks Davis
1054b0d29bc4SBrooks Davis# CHECK_STYLE_DISABLE
1055b0d29bc4SBrooks Davis    cat >experr <<EOF
1056b0d29bc4SBrooks Daviskyua: E: Load of 'Kyuafile' failed: .*Non-existent test program 'subdir/i-am-missing'.
1057b0d29bc4SBrooks DavisEOF
1058b0d29bc4SBrooks Davis# CHECK_STYLE_ENABLE
1059b0d29bc4SBrooks Davis    atf_check -s exit:2 -o empty -e "match:$(cat experr)" kyua list
1060b0d29bc4SBrooks Davis}
1061b0d29bc4SBrooks Davis
1062b0d29bc4SBrooks Davis
1063b0d29bc4SBrooks Davisatf_init_test_cases() {
1064b0d29bc4SBrooks Davis    atf_add_test_case one_test_program__all_pass
1065b0d29bc4SBrooks Davis    atf_add_test_case one_test_program__some_fail
1066b0d29bc4SBrooks Davis    atf_add_test_case many_test_programs__all_pass
1067b0d29bc4SBrooks Davis    atf_add_test_case many_test_programs__some_fail
1068b0d29bc4SBrooks Davis    atf_add_test_case expect__all_pass
1069b0d29bc4SBrooks Davis    atf_add_test_case expect__some_fail
1070b0d29bc4SBrooks Davis    atf_add_test_case premature_exit
1071b0d29bc4SBrooks Davis
1072b0d29bc4SBrooks Davis    atf_add_test_case no_args
1073b0d29bc4SBrooks Davis    atf_add_test_case one_arg__subdir
1074b0d29bc4SBrooks Davis    atf_add_test_case one_arg__test_case
1075b0d29bc4SBrooks Davis    atf_add_test_case one_arg__test_program
1076b0d29bc4SBrooks Davis    atf_add_test_case one_arg__invalid
1077b0d29bc4SBrooks Davis    atf_add_test_case many_args__ok
1078b0d29bc4SBrooks Davis    atf_add_test_case many_args__invalid
1079b0d29bc4SBrooks Davis    atf_add_test_case many_args__no_match__all
1080b0d29bc4SBrooks Davis    atf_add_test_case many_args__no_match__some
1081b0d29bc4SBrooks Davis
1082b0d29bc4SBrooks Davis    atf_add_test_case args_are_relative
1083b0d29bc4SBrooks Davis
1084b0d29bc4SBrooks Davis    atf_add_test_case only_load_used_test_programs
1085b0d29bc4SBrooks Davis
1086b0d29bc4SBrooks Davis    atf_add_test_case config_behavior
1087*51a8eb64SIgor Ostapenko    atf_add_test_case config_unprivileged_user
1088b0d29bc4SBrooks Davis
1089b0d29bc4SBrooks Davis    atf_add_test_case store_contents
1090b0d29bc4SBrooks Davis    atf_add_test_case results_file__ok
1091b0d29bc4SBrooks Davis    atf_add_test_case results_file__fail
1092b0d29bc4SBrooks Davis    atf_add_test_case results_file__reuse
1093b0d29bc4SBrooks Davis
1094b0d29bc4SBrooks Davis    atf_add_test_case build_root_flag
1095b0d29bc4SBrooks Davis
1096b0d29bc4SBrooks Davis    atf_add_test_case kyuafile_flag__no_args
1097b0d29bc4SBrooks Davis    atf_add_test_case kyuafile_flag__some_args
1098b0d29bc4SBrooks Davis
1099b0d29bc4SBrooks Davis    atf_add_test_case interrupt
1100b0d29bc4SBrooks Davis
1101b0d29bc4SBrooks Davis    atf_add_test_case exclusive_tests
1102b0d29bc4SBrooks Davis
1103b0d29bc4SBrooks Davis    atf_add_test_case no_test_program_match
1104b0d29bc4SBrooks Davis    atf_add_test_case no_test_case_match
1105b0d29bc4SBrooks Davis
1106b0d29bc4SBrooks Davis    atf_add_test_case missing_kyuafile__no_args
1107b0d29bc4SBrooks Davis    atf_add_test_case missing_kyuafile__test_program
1108b0d29bc4SBrooks Davis    atf_add_test_case missing_kyuafile__subdir
1109b0d29bc4SBrooks Davis
1110b0d29bc4SBrooks Davis    atf_add_test_case bogus_config
1111b0d29bc4SBrooks Davis    atf_add_test_case bogus_kyuafile
1112b0d29bc4SBrooks Davis    atf_add_test_case bogus_test_program
1113b0d29bc4SBrooks Davis    atf_add_test_case missing_test_program
1114b0d29bc4SBrooks Davis}
1115