xref: /freebsd/contrib/kyua/integration/cmd_list_test.sh (revision 6b13d60bf49ee40626d7e3a5d5a80519f0067307)
1*b0d29bc4SBrooks Davis# Copyright 2011 The Kyua Authors.
2*b0d29bc4SBrooks Davis# All rights reserved.
3*b0d29bc4SBrooks Davis#
4*b0d29bc4SBrooks Davis# Redistribution and use in source and binary forms, with or without
5*b0d29bc4SBrooks Davis# modification, are permitted provided that the following conditions are
6*b0d29bc4SBrooks Davis# met:
7*b0d29bc4SBrooks Davis#
8*b0d29bc4SBrooks Davis# * Redistributions of source code must retain the above copyright
9*b0d29bc4SBrooks Davis#   notice, this list of conditions and the following disclaimer.
10*b0d29bc4SBrooks Davis# * Redistributions in binary form must reproduce the above copyright
11*b0d29bc4SBrooks Davis#   notice, this list of conditions and the following disclaimer in the
12*b0d29bc4SBrooks Davis#   documentation and/or other materials provided with the distribution.
13*b0d29bc4SBrooks Davis# * Neither the name of Google Inc. nor the names of its contributors
14*b0d29bc4SBrooks Davis#   may be used to endorse or promote products derived from this software
15*b0d29bc4SBrooks Davis#   without specific prior written permission.
16*b0d29bc4SBrooks Davis#
17*b0d29bc4SBrooks Davis# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18*b0d29bc4SBrooks Davis# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19*b0d29bc4SBrooks Davis# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20*b0d29bc4SBrooks Davis# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21*b0d29bc4SBrooks Davis# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22*b0d29bc4SBrooks Davis# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23*b0d29bc4SBrooks Davis# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24*b0d29bc4SBrooks Davis# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25*b0d29bc4SBrooks Davis# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26*b0d29bc4SBrooks Davis# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27*b0d29bc4SBrooks Davis# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*b0d29bc4SBrooks Davis
29*b0d29bc4SBrooks Davis
30*b0d29bc4SBrooks Davisutils_test_case no_args
31*b0d29bc4SBrooks Davisno_args_body() {
32*b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
33*b0d29bc4SBrooks Davissyntax(2)
34*b0d29bc4SBrooks Davistest_suite("integration")
35*b0d29bc4SBrooks Davisatf_test_program{name="metadata"}
36*b0d29bc4SBrooks Davisatf_test_program{name="simple_all_pass"}
37*b0d29bc4SBrooks Davisinclude("subdir/Kyuafile")
38*b0d29bc4SBrooks DavisEOF
39*b0d29bc4SBrooks Davis    utils_cp_helper metadata .
40*b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass .
41*b0d29bc4SBrooks Davis
42*b0d29bc4SBrooks Davis    mkdir subdir
43*b0d29bc4SBrooks Davis    cat >subdir/Kyuafile <<EOF
44*b0d29bc4SBrooks Davissyntax(2)
45*b0d29bc4SBrooks Davistest_suite("integration2")
46*b0d29bc4SBrooks Davisatf_test_program{name="simple_some_fail"}
47*b0d29bc4SBrooks DavisEOF
48*b0d29bc4SBrooks Davis    utils_cp_helper simple_some_fail subdir
49*b0d29bc4SBrooks Davis
50*b0d29bc4SBrooks Davis    cat >expout <<EOF
51*b0d29bc4SBrooks Davismetadata:many_properties
52*b0d29bc4SBrooks Davismetadata:no_properties
53*b0d29bc4SBrooks Davismetadata:one_property
54*b0d29bc4SBrooks Davismetadata:with_cleanup
55*b0d29bc4SBrooks Davissimple_all_pass:pass
56*b0d29bc4SBrooks Davissimple_all_pass:skip
57*b0d29bc4SBrooks Davissubdir/simple_some_fail:fail
58*b0d29bc4SBrooks Davissubdir/simple_some_fail:pass
59*b0d29bc4SBrooks DavisEOF
60*b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua list
61*b0d29bc4SBrooks Davis}
62*b0d29bc4SBrooks Davis
63*b0d29bc4SBrooks Davis
64*b0d29bc4SBrooks Davisutils_test_case one_arg__subdir
65*b0d29bc4SBrooks Davisone_arg__subdir_body() {
66*b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
67*b0d29bc4SBrooks Davissyntax(2)
68*b0d29bc4SBrooks Davistest_suite("top-level")
69*b0d29bc4SBrooks Davisinclude("subdir/Kyuafile")
70*b0d29bc4SBrooks DavisEOF
71*b0d29bc4SBrooks Davis
72*b0d29bc4SBrooks Davis    mkdir subdir
73*b0d29bc4SBrooks Davis    cat >subdir/Kyuafile <<EOF
74*b0d29bc4SBrooks Davissyntax(2)
75*b0d29bc4SBrooks Davistest_suite("in-subdir")
76*b0d29bc4SBrooks Davisatf_test_program{name="simple_all_pass"}
77*b0d29bc4SBrooks DavisEOF
78*b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass subdir
79*b0d29bc4SBrooks Davis
80*b0d29bc4SBrooks Davis    cat >expout <<EOF
81*b0d29bc4SBrooks Davissubdir/simple_all_pass:pass
82*b0d29bc4SBrooks Davissubdir/simple_all_pass:skip
83*b0d29bc4SBrooks DavisEOF
84*b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua list subdir
85*b0d29bc4SBrooks Davis}
86*b0d29bc4SBrooks Davis
87*b0d29bc4SBrooks Davis
88*b0d29bc4SBrooks Davisutils_test_case one_arg__test_case
89*b0d29bc4SBrooks Davisone_arg__test_case_body() {
90*b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
91*b0d29bc4SBrooks Davissyntax(2)
92*b0d29bc4SBrooks Davistest_suite("top-level")
93*b0d29bc4SBrooks Davisatf_test_program{name="first"}
94*b0d29bc4SBrooks Davisatf_test_program{name="second"}
95*b0d29bc4SBrooks DavisEOF
96*b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass first
97*b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass second
98*b0d29bc4SBrooks Davis
99*b0d29bc4SBrooks Davis    cat >expout <<EOF
100*b0d29bc4SBrooks Davisfirst:skip
101*b0d29bc4SBrooks DavisEOF
102*b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua list first:skip
103*b0d29bc4SBrooks Davis}
104*b0d29bc4SBrooks Davis
105*b0d29bc4SBrooks Davis
106*b0d29bc4SBrooks Davisutils_test_case one_arg__test_program
107*b0d29bc4SBrooks Davisone_arg__test_program_body() {
108*b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
109*b0d29bc4SBrooks Davissyntax(2)
110*b0d29bc4SBrooks Davistest_suite("top-level")
111*b0d29bc4SBrooks Davisatf_test_program{name="first"}
112*b0d29bc4SBrooks Davisatf_test_program{name="second"}
113*b0d29bc4SBrooks DavisEOF
114*b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass first
115*b0d29bc4SBrooks Davis    utils_cp_helper simple_some_fail second
116*b0d29bc4SBrooks Davis
117*b0d29bc4SBrooks Davis    cat >expout <<EOF
118*b0d29bc4SBrooks Davissecond:fail
119*b0d29bc4SBrooks Davissecond:pass
120*b0d29bc4SBrooks DavisEOF
121*b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua list second
122*b0d29bc4SBrooks Davis}
123*b0d29bc4SBrooks Davis
124*b0d29bc4SBrooks Davis
125*b0d29bc4SBrooks Davisutils_test_case one_arg__invalid
126*b0d29bc4SBrooks Davisone_arg__invalid_body() {
127*b0d29bc4SBrooks Daviscat >experr <<EOF
128*b0d29bc4SBrooks Daviskyua: E: Test case component in 'foo:' is empty.
129*b0d29bc4SBrooks DavisEOF
130*b0d29bc4SBrooks Davis    atf_check -s exit:2 -o empty -e file:experr kyua list foo:
131*b0d29bc4SBrooks Davis
132*b0d29bc4SBrooks Daviscat >experr <<EOF
133*b0d29bc4SBrooks Daviskyua: E: Program name '/a/b' must be relative to the test suite, not absolute.
134*b0d29bc4SBrooks DavisEOF
135*b0d29bc4SBrooks Davis    atf_check -s exit:2 -o empty -e file:experr kyua list /a/b
136*b0d29bc4SBrooks Davis}
137*b0d29bc4SBrooks Davis
138*b0d29bc4SBrooks Davis
139*b0d29bc4SBrooks Davisutils_test_case many_args__ok
140*b0d29bc4SBrooks Davismany_args__ok_body() {
141*b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
142*b0d29bc4SBrooks Davissyntax(2)
143*b0d29bc4SBrooks Davistest_suite("top-level")
144*b0d29bc4SBrooks Davisinclude("subdir/Kyuafile")
145*b0d29bc4SBrooks Davisatf_test_program{name="first"}
146*b0d29bc4SBrooks DavisEOF
147*b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass first
148*b0d29bc4SBrooks Davis
149*b0d29bc4SBrooks Davis    mkdir subdir
150*b0d29bc4SBrooks Davis    cat >subdir/Kyuafile <<EOF
151*b0d29bc4SBrooks Davissyntax(2)
152*b0d29bc4SBrooks Davistest_suite("in-subdir")
153*b0d29bc4SBrooks Davisatf_test_program{name="second"}
154*b0d29bc4SBrooks DavisEOF
155*b0d29bc4SBrooks Davis    utils_cp_helper simple_some_fail subdir/second
156*b0d29bc4SBrooks Davis
157*b0d29bc4SBrooks Davis    cat >expout <<EOF
158*b0d29bc4SBrooks Davissubdir/second:fail (in-subdir)
159*b0d29bc4SBrooks Davissubdir/second:pass (in-subdir)
160*b0d29bc4SBrooks Davisfirst:pass (top-level)
161*b0d29bc4SBrooks DavisEOF
162*b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua list -v subdir first:pass
163*b0d29bc4SBrooks Davis}
164*b0d29bc4SBrooks Davis
165*b0d29bc4SBrooks Davis
166*b0d29bc4SBrooks Davisutils_test_case many_args__invalid
167*b0d29bc4SBrooks Davismany_args__invalid_body() {
168*b0d29bc4SBrooks Daviscat >experr <<EOF
169*b0d29bc4SBrooks Daviskyua: E: Program name component in ':badbad' is empty.
170*b0d29bc4SBrooks DavisEOF
171*b0d29bc4SBrooks Davis    atf_check -s exit:2 -o empty -e file:experr kyua list this-is-ok :badbad
172*b0d29bc4SBrooks Davis
173*b0d29bc4SBrooks Daviscat >experr <<EOF
174*b0d29bc4SBrooks Daviskyua: E: Program name '/foo' must be relative to the test suite, not absolute.
175*b0d29bc4SBrooks DavisEOF
176*b0d29bc4SBrooks Davis    atf_check -s exit:2 -o empty -e file:experr kyua list this-is-ok /foo
177*b0d29bc4SBrooks Davis}
178*b0d29bc4SBrooks Davis
179*b0d29bc4SBrooks Davis
180*b0d29bc4SBrooks Davisutils_test_case many_args__no_match__all
181*b0d29bc4SBrooks Davismany_args__no_match__all_body() {
182*b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
183*b0d29bc4SBrooks Davissyntax(2)
184*b0d29bc4SBrooks Davistest_suite("top-level")
185*b0d29bc4SBrooks Davisatf_test_program{name="first"}
186*b0d29bc4SBrooks Davisatf_test_program{name="second"}
187*b0d29bc4SBrooks DavisEOF
188*b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass first
189*b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass second
190*b0d29bc4SBrooks Davis
191*b0d29bc4SBrooks Davis    cat >experr <<EOF
192*b0d29bc4SBrooks Daviskyua: W: No test cases matched by the filter 'first1'.
193*b0d29bc4SBrooks DavisEOF
194*b0d29bc4SBrooks Davis    atf_check -s exit:1 -o empty -e file:experr kyua list first1
195*b0d29bc4SBrooks Davis}
196*b0d29bc4SBrooks Davis
197*b0d29bc4SBrooks Davis
198*b0d29bc4SBrooks Davisutils_test_case many_args__no_match__some
199*b0d29bc4SBrooks Davismany_args__no_match__some_body() {
200*b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
201*b0d29bc4SBrooks Davissyntax(2)
202*b0d29bc4SBrooks Davistest_suite("top-level")
203*b0d29bc4SBrooks Davisatf_test_program{name="first"}
204*b0d29bc4SBrooks Davisatf_test_program{name="second"}
205*b0d29bc4SBrooks Davisatf_test_program{name="third"}
206*b0d29bc4SBrooks DavisEOF
207*b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass first
208*b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass second
209*b0d29bc4SBrooks Davis    utils_cp_helper simple_some_fail third
210*b0d29bc4SBrooks Davis
211*b0d29bc4SBrooks Davis    cat >expout <<EOF
212*b0d29bc4SBrooks Davisfirst:pass
213*b0d29bc4SBrooks Davisfirst:skip
214*b0d29bc4SBrooks Davisthird:fail
215*b0d29bc4SBrooks Davisthird:pass
216*b0d29bc4SBrooks DavisEOF
217*b0d29bc4SBrooks Davis
218*b0d29bc4SBrooks Davis    cat >experr <<EOF
219*b0d29bc4SBrooks Daviskyua: W: No test cases matched by the filter 'fifth'.
220*b0d29bc4SBrooks Daviskyua: W: No test cases matched by the filter 'fourth'.
221*b0d29bc4SBrooks DavisEOF
222*b0d29bc4SBrooks Davis    atf_check -s exit:1 -o file:expout -e file:experr kyua list first fourth \
223*b0d29bc4SBrooks Davis        third fifth
224*b0d29bc4SBrooks Davis}
225*b0d29bc4SBrooks Davis
226*b0d29bc4SBrooks Davis
227*b0d29bc4SBrooks Davisutils_test_case args_are_relative
228*b0d29bc4SBrooks Davisargs_are_relative_body() {
229*b0d29bc4SBrooks Davis    mkdir root
230*b0d29bc4SBrooks Davis    cat >root/Kyuafile <<EOF
231*b0d29bc4SBrooks Davissyntax(2)
232*b0d29bc4SBrooks Davistest_suite("integration-1")
233*b0d29bc4SBrooks Davisatf_test_program{name="first"}
234*b0d29bc4SBrooks Davisatf_test_program{name="second"}
235*b0d29bc4SBrooks Davisinclude("subdir/Kyuafile")
236*b0d29bc4SBrooks DavisEOF
237*b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass root/first
238*b0d29bc4SBrooks Davis    utils_cp_helper simple_some_fail root/second
239*b0d29bc4SBrooks Davis
240*b0d29bc4SBrooks Davis    mkdir root/subdir
241*b0d29bc4SBrooks Davis    cat >root/subdir/Kyuafile <<EOF
242*b0d29bc4SBrooks Davissyntax(2)
243*b0d29bc4SBrooks Davistest_suite("integration-2")
244*b0d29bc4SBrooks Davisatf_test_program{name="third"}
245*b0d29bc4SBrooks Davisatf_test_program{name="fourth"}
246*b0d29bc4SBrooks DavisEOF
247*b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass root/subdir/third
248*b0d29bc4SBrooks Davis    utils_cp_helper simple_some_fail root/subdir/fourth
249*b0d29bc4SBrooks Davis
250*b0d29bc4SBrooks Davis    cat >expout <<EOF
251*b0d29bc4SBrooks Davisfirst:pass (integration-1)
252*b0d29bc4SBrooks Davisfirst:skip (integration-1)
253*b0d29bc4SBrooks Davissubdir/fourth:fail (integration-2)
254*b0d29bc4SBrooks DavisEOF
255*b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua list \
256*b0d29bc4SBrooks Davis        -v -k "$(pwd)/root/Kyuafile" first subdir/fourth:fail
257*b0d29bc4SBrooks Davis}
258*b0d29bc4SBrooks Davis
259*b0d29bc4SBrooks Davis
260*b0d29bc4SBrooks Davisutils_test_case only_load_used_test_programs
261*b0d29bc4SBrooks Davisonly_load_used_test_programs_body() {
262*b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
263*b0d29bc4SBrooks Davissyntax(2)
264*b0d29bc4SBrooks Davistest_suite("integration")
265*b0d29bc4SBrooks Davisatf_test_program{name="first"}
266*b0d29bc4SBrooks Davisatf_test_program{name="second"}
267*b0d29bc4SBrooks DavisEOF
268*b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass first
269*b0d29bc4SBrooks Davis    utils_cp_helper bad_test_program second
270*b0d29bc4SBrooks Davis
271*b0d29bc4SBrooks Davis    cat >expout <<EOF
272*b0d29bc4SBrooks Davisfirst:pass
273*b0d29bc4SBrooks Davisfirst:skip
274*b0d29bc4SBrooks DavisEOF
275*b0d29bc4SBrooks Davis    CREATE_COOKIE="$(pwd)/cookie"; export CREATE_COOKIE
276*b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua list first
277*b0d29bc4SBrooks Davis    if [ -f "${CREATE_COOKIE}" ]; then
278*b0d29bc4SBrooks Davis        atf_fail "An unmatched test case has been executed, which harms" \
279*b0d29bc4SBrooks Davis            "performance"
280*b0d29bc4SBrooks Davis    fi
281*b0d29bc4SBrooks Davis}
282*b0d29bc4SBrooks Davis
283*b0d29bc4SBrooks Davis
284*b0d29bc4SBrooks Davisutils_test_case config_behavior
285*b0d29bc4SBrooks Davisconfig_behavior_body() {
286*b0d29bc4SBrooks Davis    cat >"my-config" <<EOF
287*b0d29bc4SBrooks Davissyntax(2)
288*b0d29bc4SBrooks Davistest_suites.suite1["the-variable"] = "value1"
289*b0d29bc4SBrooks DavisEOF
290*b0d29bc4SBrooks Davis
291*b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
292*b0d29bc4SBrooks Davissyntax(2)
293*b0d29bc4SBrooks Davisatf_test_program{name="config1", test_suite="suite1"}
294*b0d29bc4SBrooks DavisEOF
295*b0d29bc4SBrooks Davis    utils_cp_helper config config1
296*b0d29bc4SBrooks Davis
297*b0d29bc4SBrooks Davis    CONFIG_VAR_FILE="$(pwd)/cookie"; export CONFIG_VAR_FILE
298*b0d29bc4SBrooks Davis    if [ -f "${CONFIG_VAR_FILE}" ]; then
299*b0d29bc4SBrooks Davis        atf_fail "Cookie file already created; test case list may have gotten" \
300*b0d29bc4SBrooks Davis            "a bad configuration"
301*b0d29bc4SBrooks Davis    fi
302*b0d29bc4SBrooks Davis    atf_check -s exit:0 -o ignore -e empty kyua -c my-config list
303*b0d29bc4SBrooks Davis    [ -f "${CONFIG_VAR_FILE}" ] || \
304*b0d29bc4SBrooks Davis        atf_fail "Cookie file not created; test case list did not get" \
305*b0d29bc4SBrooks Davis            "configuration variables"
306*b0d29bc4SBrooks Davis    value="$(cat "${CONFIG_VAR_FILE}")"
307*b0d29bc4SBrooks Davis    [ "${value}" = "value1" ] || \
308*b0d29bc4SBrooks Davis        atf_fail "Invalid value (${value}) in cookie file; test case list did" \
309*b0d29bc4SBrooks Davis            "not get the correct configuration variables"
310*b0d29bc4SBrooks Davis}
311*b0d29bc4SBrooks Davis
312*b0d29bc4SBrooks Davis
313*b0d29bc4SBrooks Davisutils_test_case build_root_flag
314*b0d29bc4SBrooks Davisbuild_root_flag_body() {
315*b0d29bc4SBrooks Davis    mkdir subdir
316*b0d29bc4SBrooks Davis    mkdir build
317*b0d29bc4SBrooks Davis    mkdir build/subdir
318*b0d29bc4SBrooks Davis
319*b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
320*b0d29bc4SBrooks Davissyntax(2)
321*b0d29bc4SBrooks Davistest_suite("top-level")
322*b0d29bc4SBrooks Davisinclude("subdir/Kyuafile")
323*b0d29bc4SBrooks Davisatf_test_program{name="first"}
324*b0d29bc4SBrooks DavisEOF
325*b0d29bc4SBrooks Davis    echo 'invalid' >first
326*b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass build/first
327*b0d29bc4SBrooks Davis
328*b0d29bc4SBrooks Davis    cat >subdir/Kyuafile <<EOF
329*b0d29bc4SBrooks Davissyntax(2)
330*b0d29bc4SBrooks Davistest_suite("in-subdir")
331*b0d29bc4SBrooks Davisatf_test_program{name="second"}
332*b0d29bc4SBrooks DavisEOF
333*b0d29bc4SBrooks Davis    echo 'invalid' >subdir/second
334*b0d29bc4SBrooks Davis    utils_cp_helper simple_some_fail build/subdir/second
335*b0d29bc4SBrooks Davis
336*b0d29bc4SBrooks Davis    cat >expout <<EOF
337*b0d29bc4SBrooks Davissubdir/second:fail
338*b0d29bc4SBrooks Davissubdir/second:pass
339*b0d29bc4SBrooks Davisfirst:pass
340*b0d29bc4SBrooks DavisEOF
341*b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua list --build-root=build \
342*b0d29bc4SBrooks Davis        subdir first:pass
343*b0d29bc4SBrooks Davis}
344*b0d29bc4SBrooks Davis
345*b0d29bc4SBrooks Davis
346*b0d29bc4SBrooks Davisutils_test_case kyuafile_flag__no_args
347*b0d29bc4SBrooks Daviskyuafile_flag__no_args_body() {
348*b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
349*b0d29bc4SBrooks DavisThis file is bogus but it is not loaded.
350*b0d29bc4SBrooks DavisEOF
351*b0d29bc4SBrooks Davis
352*b0d29bc4SBrooks Davis    cat >myfile <<EOF
353*b0d29bc4SBrooks Davissyntax(2)
354*b0d29bc4SBrooks Davistest_suite("integration")
355*b0d29bc4SBrooks Davisatf_test_program{name="sometest"}
356*b0d29bc4SBrooks DavisEOF
357*b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass sometest
358*b0d29bc4SBrooks Davis
359*b0d29bc4SBrooks Davis    cat >expout <<EOF
360*b0d29bc4SBrooks Davissometest:pass
361*b0d29bc4SBrooks Davissometest:skip
362*b0d29bc4SBrooks DavisEOF
363*b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua list -k myfile
364*b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua list --kyuafile=myfile
365*b0d29bc4SBrooks Davis}
366*b0d29bc4SBrooks Davis
367*b0d29bc4SBrooks Davis
368*b0d29bc4SBrooks Davisutils_test_case kyuafile_flag__some_args
369*b0d29bc4SBrooks Daviskyuafile_flag__some_args_body() {
370*b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
371*b0d29bc4SBrooks DavisThis file is bogus but it is not loaded.
372*b0d29bc4SBrooks DavisEOF
373*b0d29bc4SBrooks Davis
374*b0d29bc4SBrooks Davis    cat >myfile <<EOF
375*b0d29bc4SBrooks Davissyntax(2)
376*b0d29bc4SBrooks Davistest_suite("hello-world")
377*b0d29bc4SBrooks Davisatf_test_program{name="sometest"}
378*b0d29bc4SBrooks DavisEOF
379*b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass sometest
380*b0d29bc4SBrooks Davis
381*b0d29bc4SBrooks Davis    cat >expout <<EOF
382*b0d29bc4SBrooks Davissometest:pass (hello-world)
383*b0d29bc4SBrooks Davissometest:skip (hello-world)
384*b0d29bc4SBrooks DavisEOF
385*b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua list -v -k myfile sometest
386*b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua list -v --kyuafile=myfile \
387*b0d29bc4SBrooks Davis        sometest
388*b0d29bc4SBrooks Davis}
389*b0d29bc4SBrooks Davis
390*b0d29bc4SBrooks Davis
391*b0d29bc4SBrooks Davisutils_test_case verbose_flag
392*b0d29bc4SBrooks Davisverbose_flag_body() {
393*b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
394*b0d29bc4SBrooks Davissyntax(2)
395*b0d29bc4SBrooks Davistest_suite("integration-suite-1")
396*b0d29bc4SBrooks Davisatf_test_program{name="simple_all_pass"}
397*b0d29bc4SBrooks Davisplain_test_program{name="i_am_plain", timeout=654}
398*b0d29bc4SBrooks Davisinclude("subdir/Kyuafile")
399*b0d29bc4SBrooks DavisEOF
400*b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass .
401*b0d29bc4SBrooks Davis    touch i_am_plain
402*b0d29bc4SBrooks Davis
403*b0d29bc4SBrooks Davis    mkdir subdir
404*b0d29bc4SBrooks Davis    cat >subdir/Kyuafile <<EOF
405*b0d29bc4SBrooks Davissyntax(2)
406*b0d29bc4SBrooks Davistest_suite("integration-suite-2")
407*b0d29bc4SBrooks Davisatf_test_program{name="metadata"}
408*b0d29bc4SBrooks DavisEOF
409*b0d29bc4SBrooks Davis    utils_cp_helper metadata subdir
410*b0d29bc4SBrooks Davis
411*b0d29bc4SBrooks Davis    cat >expout <<EOF
412*b0d29bc4SBrooks Davissimple_all_pass:pass (integration-suite-1)
413*b0d29bc4SBrooks Davissimple_all_pass:skip (integration-suite-1)
414*b0d29bc4SBrooks Davisi_am_plain:main (integration-suite-1)
415*b0d29bc4SBrooks Davis    timeout = 654
416*b0d29bc4SBrooks Davissubdir/metadata:many_properties (integration-suite-2)
417*b0d29bc4SBrooks Davis    allowed_architectures = some-architecture
418*b0d29bc4SBrooks Davis    allowed_platforms = some-platform
419*b0d29bc4SBrooks Davis    custom.no-meaning = I am a custom variable
420*b0d29bc4SBrooks Davis    description =     A description with some padding
421*b0d29bc4SBrooks Davis    required_configs = var1 var2 var3
422*b0d29bc4SBrooks Davis    required_files = /my/file1 /some/other/file
423*b0d29bc4SBrooks Davis    required_programs = /nonexistent/bin3 bin1 bin2
424*b0d29bc4SBrooks Davis    required_user = root
425*b0d29bc4SBrooks Davissubdir/metadata:no_properties (integration-suite-2)
426*b0d29bc4SBrooks Davissubdir/metadata:one_property (integration-suite-2)
427*b0d29bc4SBrooks Davis    description = Does nothing but has one metadata property
428*b0d29bc4SBrooks Davissubdir/metadata:with_cleanup (integration-suite-2)
429*b0d29bc4SBrooks Davis    has_cleanup = true
430*b0d29bc4SBrooks Davis    timeout = 250
431*b0d29bc4SBrooks DavisEOF
432*b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua list -v
433*b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua list --verbose
434*b0d29bc4SBrooks Davis}
435*b0d29bc4SBrooks Davis
436*b0d29bc4SBrooks Davis
437*b0d29bc4SBrooks Davisutils_test_case no_test_program_match
438*b0d29bc4SBrooks Davisno_test_program_match_body() {
439*b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
440*b0d29bc4SBrooks Davissyntax(2)
441*b0d29bc4SBrooks Davistest_suite("integration")
442*b0d29bc4SBrooks Davisatf_test_program{name="first"}
443*b0d29bc4SBrooks DavisEOF
444*b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass first
445*b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass second
446*b0d29bc4SBrooks Davis
447*b0d29bc4SBrooks Davis    cat >experr <<EOF
448*b0d29bc4SBrooks Daviskyua: W: No test cases matched by the filter 'second'.
449*b0d29bc4SBrooks DavisEOF
450*b0d29bc4SBrooks Davis    atf_check -s exit:1 -o empty -e file:experr kyua list second
451*b0d29bc4SBrooks Davis}
452*b0d29bc4SBrooks Davis
453*b0d29bc4SBrooks Davis
454*b0d29bc4SBrooks Davisutils_test_case no_test_case_match
455*b0d29bc4SBrooks Davisno_test_case_match_body() {
456*b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
457*b0d29bc4SBrooks Davissyntax(2)
458*b0d29bc4SBrooks Davistest_suite("integration")
459*b0d29bc4SBrooks Davisatf_test_program{name="first"}
460*b0d29bc4SBrooks DavisEOF
461*b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass first
462*b0d29bc4SBrooks Davis
463*b0d29bc4SBrooks Davis    cat >experr <<EOF
464*b0d29bc4SBrooks Daviskyua: W: No test cases matched by the filter 'first:foobar'.
465*b0d29bc4SBrooks DavisEOF
466*b0d29bc4SBrooks Davis    atf_check -s exit:1 -o empty -e file:experr kyua list first:foobar
467*b0d29bc4SBrooks Davis}
468*b0d29bc4SBrooks Davis
469*b0d29bc4SBrooks Davis
470*b0d29bc4SBrooks Davisutils_test_case missing_kyuafile__no_args
471*b0d29bc4SBrooks Davismissing_kyuafile__no_args_body() {
472*b0d29bc4SBrooks Davis    cat >experr <<EOF
473*b0d29bc4SBrooks Daviskyua: E: Load of 'Kyuafile' failed: File 'Kyuafile' not found.
474*b0d29bc4SBrooks DavisEOF
475*b0d29bc4SBrooks Davis    atf_check -s exit:2 -o empty -e file:experr kyua list
476*b0d29bc4SBrooks Davis}
477*b0d29bc4SBrooks Davis
478*b0d29bc4SBrooks Davis
479*b0d29bc4SBrooks Davisutils_test_case missing_kyuafile__test_program
480*b0d29bc4SBrooks Davismissing_kyuafile__test_program_body() {
481*b0d29bc4SBrooks Davis    mkdir subdir
482*b0d29bc4SBrooks Davis    cat >subdir/Kyuafile <<EOF
483*b0d29bc4SBrooks Davissyntax(2)
484*b0d29bc4SBrooks Davistest_suite("integration")
485*b0d29bc4SBrooks Davisatf_test_program{name="unused"}
486*b0d29bc4SBrooks DavisEOF
487*b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass subdir/unused
488*b0d29bc4SBrooks Davis
489*b0d29bc4SBrooks Davis    cat >experr <<EOF
490*b0d29bc4SBrooks Daviskyua: E: Load of 'Kyuafile' failed: File 'Kyuafile' not found.
491*b0d29bc4SBrooks DavisEOF
492*b0d29bc4SBrooks Davis    atf_check -s exit:2 -o empty -e file:experr kyua list subdir/unused
493*b0d29bc4SBrooks Davis}
494*b0d29bc4SBrooks Davis
495*b0d29bc4SBrooks Davis
496*b0d29bc4SBrooks Davisutils_test_case missing_kyuafile__subdir
497*b0d29bc4SBrooks Davismissing_kyuafile__subdir_body() {
498*b0d29bc4SBrooks Davis    mkdir subdir
499*b0d29bc4SBrooks Davis    cat >subdir/Kyuafile <<EOF
500*b0d29bc4SBrooks Davissyntax(2)
501*b0d29bc4SBrooks Davistest_suite("integration")
502*b0d29bc4SBrooks Davisatf_test_program{name="unused"}
503*b0d29bc4SBrooks DavisEOF
504*b0d29bc4SBrooks Davis    utils_cp_helper simple_all_pass subdir/unused
505*b0d29bc4SBrooks Davis
506*b0d29bc4SBrooks Davis    cat >experr <<EOF
507*b0d29bc4SBrooks Daviskyua: E: Load of 'Kyuafile' failed: File 'Kyuafile' not found.
508*b0d29bc4SBrooks DavisEOF
509*b0d29bc4SBrooks Davis    atf_check -s exit:2 -o empty -e file:experr kyua list subdir
510*b0d29bc4SBrooks Davis}
511*b0d29bc4SBrooks Davis
512*b0d29bc4SBrooks Davis
513*b0d29bc4SBrooks Davisutils_test_case bogus_kyuafile
514*b0d29bc4SBrooks Davisbogus_kyuafile_body() {
515*b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
516*b0d29bc4SBrooks DavisHello, world.
517*b0d29bc4SBrooks DavisEOF
518*b0d29bc4SBrooks Davis    atf_check -s exit:2 -o empty \
519*b0d29bc4SBrooks Davis        -e match:"Load of 'Kyuafile' failed: .* Kyuafile:2:" kyua list
520*b0d29bc4SBrooks Davis}
521*b0d29bc4SBrooks Davis
522*b0d29bc4SBrooks Davis
523*b0d29bc4SBrooks Davisutils_test_case bogus_test_program
524*b0d29bc4SBrooks Davisbogus_test_program_body() {
525*b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
526*b0d29bc4SBrooks Davissyntax(2)
527*b0d29bc4SBrooks Davistest_suite("integration")
528*b0d29bc4SBrooks Davisatf_test_program{name="crash_on_list"}
529*b0d29bc4SBrooks Davisatf_test_program{name="non_executable"}
530*b0d29bc4SBrooks DavisEOF
531*b0d29bc4SBrooks Davis    utils_cp_helper bad_test_program crash_on_list
532*b0d29bc4SBrooks Davis    echo 'I am not executable' >non_executable
533*b0d29bc4SBrooks Davis
534*b0d29bc4SBrooks Davis    cat >expout <<EOF
535*b0d29bc4SBrooks Daviscrash_on_list:__test_cases_list__
536*b0d29bc4SBrooks Davisnon_executable:__test_cases_list__
537*b0d29bc4SBrooks DavisEOF
538*b0d29bc4SBrooks Davis    atf_check -s exit:0 -o file:expout -e empty kyua list
539*b0d29bc4SBrooks Davis}
540*b0d29bc4SBrooks Davis
541*b0d29bc4SBrooks Davis
542*b0d29bc4SBrooks Davisutils_test_case missing_test_program
543*b0d29bc4SBrooks Davismissing_test_program_body() {
544*b0d29bc4SBrooks Davis    cat >Kyuafile <<EOF
545*b0d29bc4SBrooks Davissyntax(2)
546*b0d29bc4SBrooks Davisinclude("subdir/Kyuafile")
547*b0d29bc4SBrooks DavisEOF
548*b0d29bc4SBrooks Davis    mkdir subdir
549*b0d29bc4SBrooks Davis    cat >subdir/Kyuafile <<EOF
550*b0d29bc4SBrooks Davissyntax(2)
551*b0d29bc4SBrooks Davistest_suite("integration")
552*b0d29bc4SBrooks Davisatf_test_program{name="ok"}
553*b0d29bc4SBrooks Davisatf_test_program{name="i-am-missing"}
554*b0d29bc4SBrooks DavisEOF
555*b0d29bc4SBrooks Davis    echo 'I should not be touched because the Kyuafile is bogus' >subdir/ok
556*b0d29bc4SBrooks Davis
557*b0d29bc4SBrooks Davis# CHECK_STYLE_DISABLE
558*b0d29bc4SBrooks Davis    cat >experr <<EOF
559*b0d29bc4SBrooks Daviskyua: E: Load of 'Kyuafile' failed: .*Non-existent test program 'subdir/i-am-missing'.
560*b0d29bc4SBrooks DavisEOF
561*b0d29bc4SBrooks Davis# CHECK_STYLE_ENABLE
562*b0d29bc4SBrooks Davis    atf_check -s exit:2 -o empty -e "match:$(cat experr)" kyua list
563*b0d29bc4SBrooks Davis}
564*b0d29bc4SBrooks Davis
565*b0d29bc4SBrooks Davis
566*b0d29bc4SBrooks Davisatf_init_test_cases() {
567*b0d29bc4SBrooks Davis    atf_add_test_case no_args
568*b0d29bc4SBrooks Davis    atf_add_test_case one_arg__subdir
569*b0d29bc4SBrooks Davis    atf_add_test_case one_arg__test_case
570*b0d29bc4SBrooks Davis    atf_add_test_case one_arg__test_program
571*b0d29bc4SBrooks Davis    atf_add_test_case one_arg__invalid
572*b0d29bc4SBrooks Davis    atf_add_test_case many_args__ok
573*b0d29bc4SBrooks Davis    atf_add_test_case many_args__invalid
574*b0d29bc4SBrooks Davis    atf_add_test_case many_args__no_match__all
575*b0d29bc4SBrooks Davis    atf_add_test_case many_args__no_match__some
576*b0d29bc4SBrooks Davis
577*b0d29bc4SBrooks Davis    atf_add_test_case args_are_relative
578*b0d29bc4SBrooks Davis
579*b0d29bc4SBrooks Davis    atf_add_test_case only_load_used_test_programs
580*b0d29bc4SBrooks Davis
581*b0d29bc4SBrooks Davis    atf_add_test_case config_behavior
582*b0d29bc4SBrooks Davis
583*b0d29bc4SBrooks Davis    atf_add_test_case build_root_flag
584*b0d29bc4SBrooks Davis
585*b0d29bc4SBrooks Davis    atf_add_test_case kyuafile_flag__no_args
586*b0d29bc4SBrooks Davis    atf_add_test_case kyuafile_flag__some_args
587*b0d29bc4SBrooks Davis
588*b0d29bc4SBrooks Davis    atf_add_test_case verbose_flag
589*b0d29bc4SBrooks Davis
590*b0d29bc4SBrooks Davis    atf_add_test_case no_test_program_match
591*b0d29bc4SBrooks Davis    atf_add_test_case no_test_case_match
592*b0d29bc4SBrooks Davis
593*b0d29bc4SBrooks Davis    atf_add_test_case missing_kyuafile__no_args
594*b0d29bc4SBrooks Davis    atf_add_test_case missing_kyuafile__test_program
595*b0d29bc4SBrooks Davis    atf_add_test_case missing_kyuafile__subdir
596*b0d29bc4SBrooks Davis
597*b0d29bc4SBrooks Davis    atf_add_test_case bogus_kyuafile
598*b0d29bc4SBrooks Davis    atf_add_test_case bogus_test_program
599*b0d29bc4SBrooks Davis    atf_add_test_case missing_test_program
600*b0d29bc4SBrooks Davis}
601