xref: /netbsd-src/external/bsd/kyua-cli/dist/integration/cmd_test_test.sh (revision f39f9c9b2b3d39fa4e71f38ebea4c5d12192a641)
16b3a42afSjmmv# Copyright 2011 Google Inc.
26b3a42afSjmmv# All rights reserved.
36b3a42afSjmmv#
46b3a42afSjmmv# Redistribution and use in source and binary forms, with or without
56b3a42afSjmmv# modification, are permitted provided that the following conditions are
66b3a42afSjmmv# met:
76b3a42afSjmmv#
86b3a42afSjmmv# * Redistributions of source code must retain the above copyright
96b3a42afSjmmv#   notice, this list of conditions and the following disclaimer.
106b3a42afSjmmv# * Redistributions in binary form must reproduce the above copyright
116b3a42afSjmmv#   notice, this list of conditions and the following disclaimer in the
126b3a42afSjmmv#   documentation and/or other materials provided with the distribution.
136b3a42afSjmmv# * Neither the name of Google Inc. nor the names of its contributors
146b3a42afSjmmv#   may be used to endorse or promote products derived from this software
156b3a42afSjmmv#   without specific prior written permission.
166b3a42afSjmmv#
176b3a42afSjmmv# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
186b3a42afSjmmv# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
196b3a42afSjmmv# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
206b3a42afSjmmv# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
216b3a42afSjmmv# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
226b3a42afSjmmv# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
236b3a42afSjmmv# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
246b3a42afSjmmv# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
256b3a42afSjmmv# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
266b3a42afSjmmv# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
276b3a42afSjmmv# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
286b3a42afSjmmv
296b3a42afSjmmv
306b3a42afSjmmvutils_test_case one_test_program__all_pass
316b3a42afSjmmvone_test_program__all_pass_body() {
326b3a42afSjmmv    utils_install_timestamp_wrapper
336b3a42afSjmmv
346b3a42afSjmmv    cat >Kyuafile <<EOF
356b3a42afSjmmvsyntax(2)
366b3a42afSjmmvtest_suite("integration")
376b3a42afSjmmvatf_test_program{name="simple_all_pass"}
386b3a42afSjmmvEOF
396b3a42afSjmmv
406b3a42afSjmmv    cat >expout <<EOF
416b3a42afSjmmvsimple_all_pass:pass  ->  passed  [S.UUUs]
426b3a42afSjmmvsimple_all_pass:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
436b3a42afSjmmv
446b3a42afSjmmv2/2 passed (0 failed)
456b3a42afSjmmvCommitted action 1
466b3a42afSjmmvEOF
476b3a42afSjmmv
486b3a42afSjmmv    utils_cp_helper simple_all_pass .
496b3a42afSjmmv    atf_check -s exit:0 -o file:expout -e empty kyua test
506b3a42afSjmmv}
516b3a42afSjmmv
526b3a42afSjmmv
536b3a42afSjmmvutils_test_case one_test_program__some_fail
546b3a42afSjmmvone_test_program__some_fail_body() {
556b3a42afSjmmv    utils_install_timestamp_wrapper
566b3a42afSjmmv
576b3a42afSjmmv    cat >Kyuafile <<EOF
586b3a42afSjmmvsyntax(2)
596b3a42afSjmmvtest_suite("integration")
606b3a42afSjmmvatf_test_program{name="simple_some_fail"}
616b3a42afSjmmvEOF
626b3a42afSjmmv
636b3a42afSjmmv    cat >expout <<EOF
646b3a42afSjmmvsimple_some_fail:fail  ->  failed: This fails on purpose  [S.UUUs]
656b3a42afSjmmvsimple_some_fail:pass  ->  passed  [S.UUUs]
666b3a42afSjmmv
676b3a42afSjmmv1/2 passed (1 failed)
686b3a42afSjmmvCommitted action 1
696b3a42afSjmmvEOF
706b3a42afSjmmv
716b3a42afSjmmv    utils_cp_helper simple_some_fail .
726b3a42afSjmmv    atf_check -s exit:1 -o file:expout -e empty kyua test
736b3a42afSjmmv}
746b3a42afSjmmv
756b3a42afSjmmv
766b3a42afSjmmvutils_test_case many_test_programs__all_pass
776b3a42afSjmmvmany_test_programs__all_pass_body() {
786b3a42afSjmmv    utils_install_timestamp_wrapper
796b3a42afSjmmv
806b3a42afSjmmv    cat >Kyuafile <<EOF
816b3a42afSjmmvsyntax(2)
826b3a42afSjmmvtest_suite("integration")
836b3a42afSjmmvatf_test_program{name="first"}
846b3a42afSjmmvatf_test_program{name="second"}
856b3a42afSjmmvatf_test_program{name="third"}
866b3a42afSjmmvplain_test_program{name="fourth", required_files="/non-existent/foo"}
876b3a42afSjmmvEOF
886b3a42afSjmmv
896b3a42afSjmmv    cat >expout <<EOF
906b3a42afSjmmvfirst:pass  ->  passed  [S.UUUs]
916b3a42afSjmmvfirst:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
926b3a42afSjmmvsecond:pass  ->  passed  [S.UUUs]
936b3a42afSjmmvsecond:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
946b3a42afSjmmvthird:pass  ->  passed  [S.UUUs]
956b3a42afSjmmvthird:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
966b3a42afSjmmvfourth:main  ->  skipped: Required file '/non-existent/foo' not found  [S.UUUs]
976b3a42afSjmmv
986b3a42afSjmmv7/7 passed (0 failed)
996b3a42afSjmmvCommitted action 1
1006b3a42afSjmmvEOF
1016b3a42afSjmmv
1026b3a42afSjmmv    utils_cp_helper simple_all_pass first
1036b3a42afSjmmv    utils_cp_helper simple_all_pass second
1046b3a42afSjmmv    utils_cp_helper simple_all_pass third
1056b3a42afSjmmv    echo "not executed" >fourth; chmod +x fourth
1066b3a42afSjmmv    atf_check -s exit:0 -o file:expout -e empty kyua test
1076b3a42afSjmmv}
1086b3a42afSjmmv
1096b3a42afSjmmv
1106b3a42afSjmmvutils_test_case many_test_programs__some_fail
1116b3a42afSjmmvmany_test_programs__some_fail_body() {
1126b3a42afSjmmv    utils_install_timestamp_wrapper
1136b3a42afSjmmv
1146b3a42afSjmmv    cat >Kyuafile <<EOF
1156b3a42afSjmmvsyntax(2)
1166b3a42afSjmmvtest_suite("integration")
1176b3a42afSjmmvatf_test_program{name="first"}
1186b3a42afSjmmvatf_test_program{name="second"}
1196b3a42afSjmmvatf_test_program{name="third"}
1206b3a42afSjmmvplain_test_program{name="fourth"}
1216b3a42afSjmmvEOF
1226b3a42afSjmmv
1236b3a42afSjmmv    cat >expout <<EOF
1246b3a42afSjmmvfirst:fail  ->  failed: This fails on purpose  [S.UUUs]
1256b3a42afSjmmvfirst:pass  ->  passed  [S.UUUs]
1266b3a42afSjmmvsecond:fail  ->  failed: This fails on purpose  [S.UUUs]
1276b3a42afSjmmvsecond:pass  ->  passed  [S.UUUs]
1286b3a42afSjmmvthird:pass  ->  passed  [S.UUUs]
1296b3a42afSjmmvthird:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
1306b3a42afSjmmvfourth:main  ->  failed: Returned non-success exit status 76  [S.UUUs]
1316b3a42afSjmmv
1326b3a42afSjmmv4/7 passed (3 failed)
1336b3a42afSjmmvCommitted action 1
1346b3a42afSjmmvEOF
1356b3a42afSjmmv
1366b3a42afSjmmv    utils_cp_helper simple_some_fail first
1376b3a42afSjmmv    utils_cp_helper simple_some_fail second
1386b3a42afSjmmv    utils_cp_helper simple_all_pass third
1396b3a42afSjmmv    echo '#! /bin/sh' >fourth
1406b3a42afSjmmv    echo 'exit 76' >>fourth
1416b3a42afSjmmv    chmod +x fourth
1426b3a42afSjmmv    atf_check -s exit:1 -o file:expout -e empty kyua test
1436b3a42afSjmmv}
1446b3a42afSjmmv
1456b3a42afSjmmv
1466b3a42afSjmmvutils_test_case expect__all_pass
1476b3a42afSjmmvexpect__all_pass_body() {
1486b3a42afSjmmv    utils_install_timestamp_wrapper
1496b3a42afSjmmv
1506b3a42afSjmmv    cat >Kyuafile <<EOF
1516b3a42afSjmmvsyntax(2)
1526b3a42afSjmmvtest_suite("integration")
1536b3a42afSjmmvatf_test_program{name="expect_all_pass"}
1546b3a42afSjmmvEOF
1556b3a42afSjmmv
1566b3a42afSjmmv    cat >expout <<EOF
1576b3a42afSjmmvexpect_all_pass:die  ->  expected_failure: This is the reason for death  [S.UUUs]
1586b3a42afSjmmvexpect_all_pass:exit  ->  expected_failure: Exiting with correct code  [S.UUUs]
1596b3a42afSjmmvexpect_all_pass:failure  ->  expected_failure: Oh no: Forced failure  [S.UUUs]
1606b3a42afSjmmvexpect_all_pass:signal  ->  expected_failure: Exiting with correct signal  [S.UUUs]
1616b3a42afSjmmvexpect_all_pass:timeout  ->  expected_failure: This times out  [S.UUUs]
1626b3a42afSjmmv
1636b3a42afSjmmv5/5 passed (0 failed)
1646b3a42afSjmmvCommitted action 1
1656b3a42afSjmmvEOF
1666b3a42afSjmmv
1676b3a42afSjmmv    utils_cp_helper expect_all_pass .
1686b3a42afSjmmv    atf_check -s exit:0 -o file:expout -e empty kyua test
1696b3a42afSjmmv}
1706b3a42afSjmmv
1716b3a42afSjmmv
1726b3a42afSjmmvutils_test_case expect__some_fail
1736b3a42afSjmmvexpect__some_fail_body() {
1746b3a42afSjmmv    utils_install_timestamp_wrapper
1756b3a42afSjmmv
1766b3a42afSjmmv    cat >Kyuafile <<EOF
1776b3a42afSjmmvsyntax(2)
1786b3a42afSjmmvtest_suite("integration")
1796b3a42afSjmmvatf_test_program{name="expect_some_fail"}
1806b3a42afSjmmvEOF
1816b3a42afSjmmv
1826b3a42afSjmmv    cat >expout <<EOF
1836b3a42afSjmmvexpect_some_fail:die  ->  failed: Test case was expected to terminate abruptly but it continued execution  [S.UUUs]
1846b3a42afSjmmvexpect_some_fail:exit  ->  failed: Test case expected to exit with code 12 but got code 34  [S.UUUs]
1856b3a42afSjmmvexpect_some_fail:failure  ->  failed: Test case was expecting a failure but none were raised  [S.UUUs]
1866b3a42afSjmmvexpect_some_fail:pass  ->  passed  [S.UUUs]
1876b3a42afSjmmvexpect_some_fail:signal  ->  failed: Test case expected to receive signal 15 but got 9  [S.UUUs]
1886b3a42afSjmmvexpect_some_fail:timeout  ->  failed: Test case was expected to hang but it continued execution  [S.UUUs]
1896b3a42afSjmmv
1906b3a42afSjmmv1/6 passed (5 failed)
1916b3a42afSjmmvCommitted action 1
1926b3a42afSjmmvEOF
1936b3a42afSjmmv
1946b3a42afSjmmv    utils_cp_helper expect_some_fail .
1956b3a42afSjmmv    atf_check -s exit:1 -o file:expout -e empty kyua test
1966b3a42afSjmmv}
1976b3a42afSjmmv
1986b3a42afSjmmv
1996b3a42afSjmmvutils_test_case premature_exit
2006b3a42afSjmmvpremature_exit_body() {
2016b3a42afSjmmv    utils_install_timestamp_wrapper
2026b3a42afSjmmv
2036b3a42afSjmmv    cat >Kyuafile <<EOF
2046b3a42afSjmmvsyntax(2)
2056b3a42afSjmmvtest_suite("integration")
2066b3a42afSjmmvatf_test_program{name="bogus_test_cases"}
2076b3a42afSjmmvEOF
2086b3a42afSjmmv
2096b3a42afSjmmv    cat >expout <<EOF
2106b3a42afSjmmvbogus_test_cases:die  ->  broken: Premature exit; test case received signal 9  [S.UUUs]
2116b3a42afSjmmvbogus_test_cases:exit  ->  broken: Premature exit; test case exited with code 0  [S.UUUs]
2126b3a42afSjmmvbogus_test_cases:pass  ->  passed  [S.UUUs]
2136b3a42afSjmmv
2146b3a42afSjmmv1/3 passed (2 failed)
2156b3a42afSjmmvCommitted action 1
2166b3a42afSjmmvEOF
2176b3a42afSjmmv
2186b3a42afSjmmv    utils_cp_helper bogus_test_cases .
2196b3a42afSjmmv    atf_check -s exit:1 -o file:expout -e empty kyua test
2206b3a42afSjmmv}
2216b3a42afSjmmv
2226b3a42afSjmmv
2236b3a42afSjmmvutils_test_case no_args
2246b3a42afSjmmvno_args_body() {
2256b3a42afSjmmv    utils_install_timestamp_wrapper
2266b3a42afSjmmv
2276b3a42afSjmmv    cat >Kyuafile <<EOF
2286b3a42afSjmmvsyntax(2)
2296b3a42afSjmmvtest_suite("integration")
2306b3a42afSjmmvatf_test_program{name="simple_all_pass"}
2316b3a42afSjmmvinclude("subdir/Kyuafile")
2326b3a42afSjmmvEOF
2336b3a42afSjmmv    utils_cp_helper metadata .
2346b3a42afSjmmv    utils_cp_helper simple_all_pass .
2356b3a42afSjmmv
2366b3a42afSjmmv    mkdir subdir
2376b3a42afSjmmv    cat >subdir/Kyuafile <<EOF
2386b3a42afSjmmvsyntax(2)
2396b3a42afSjmmvtest_suite("integration2")
2406b3a42afSjmmvatf_test_program{name="simple_some_fail"}
2416b3a42afSjmmvEOF
2426b3a42afSjmmv    utils_cp_helper simple_some_fail subdir
2436b3a42afSjmmv
2446b3a42afSjmmv    cat >expout <<EOF
2456b3a42afSjmmvsimple_all_pass:pass  ->  passed  [S.UUUs]
2466b3a42afSjmmvsimple_all_pass:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
2476b3a42afSjmmvsubdir/simple_some_fail:fail  ->  failed: This fails on purpose  [S.UUUs]
2486b3a42afSjmmvsubdir/simple_some_fail:pass  ->  passed  [S.UUUs]
2496b3a42afSjmmv
2506b3a42afSjmmv3/4 passed (1 failed)
2516b3a42afSjmmvCommitted action 1
2526b3a42afSjmmvEOF
2536b3a42afSjmmv    atf_check -s exit:1 -o file:expout -e empty kyua test
2546b3a42afSjmmv}
2556b3a42afSjmmv
2566b3a42afSjmmv
2576b3a42afSjmmvutils_test_case one_arg__subdir
2586b3a42afSjmmvone_arg__subdir_body() {
2596b3a42afSjmmv    utils_install_timestamp_wrapper
2606b3a42afSjmmv
2616b3a42afSjmmv    cat >Kyuafile <<EOF
2626b3a42afSjmmvsyntax(2)
2636b3a42afSjmmvtest_suite("top-level")
2646b3a42afSjmmvinclude("subdir/Kyuafile")
2656b3a42afSjmmvEOF
2666b3a42afSjmmv
2676b3a42afSjmmv    mkdir subdir
2686b3a42afSjmmv    cat >subdir/Kyuafile <<EOF
2696b3a42afSjmmvsyntax(2)
2706b3a42afSjmmvtest_suite("in-subdir")
2716b3a42afSjmmvatf_test_program{name="simple_all_pass"}
2726b3a42afSjmmvEOF
2736b3a42afSjmmv    utils_cp_helper simple_all_pass subdir
2746b3a42afSjmmv
2756b3a42afSjmmv    cat >expout <<EOF
2766b3a42afSjmmvsubdir/simple_all_pass:pass  ->  passed  [S.UUUs]
2776b3a42afSjmmvsubdir/simple_all_pass:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
2786b3a42afSjmmv
2796b3a42afSjmmv2/2 passed (0 failed)
2806b3a42afSjmmvCommitted action 1
2816b3a42afSjmmvEOF
2826b3a42afSjmmv    atf_check -s exit:0 -o file:expout -e empty kyua test subdir
2836b3a42afSjmmv}
2846b3a42afSjmmv
2856b3a42afSjmmv
2866b3a42afSjmmvutils_test_case one_arg__test_case
2876b3a42afSjmmvone_arg__test_case_body() {
2886b3a42afSjmmv    utils_install_timestamp_wrapper
2896b3a42afSjmmv
2906b3a42afSjmmv    cat >Kyuafile <<EOF
2916b3a42afSjmmvsyntax(2)
2926b3a42afSjmmvtest_suite("top-level")
2936b3a42afSjmmvatf_test_program{name="first"}
2946b3a42afSjmmvatf_test_program{name="second"}
2956b3a42afSjmmvEOF
2966b3a42afSjmmv    utils_cp_helper simple_all_pass first
2976b3a42afSjmmv    utils_cp_helper simple_all_pass second
2986b3a42afSjmmv
2996b3a42afSjmmv    cat >expout <<EOF
3006b3a42afSjmmvfirst:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
3016b3a42afSjmmv
3026b3a42afSjmmv1/1 passed (0 failed)
3036b3a42afSjmmvCommitted action 1
3046b3a42afSjmmvEOF
3056b3a42afSjmmv    atf_check -s exit:0 -o file:expout -e empty kyua test first:skip
3066b3a42afSjmmv}
3076b3a42afSjmmv
3086b3a42afSjmmv
3096b3a42afSjmmvutils_test_case one_arg__test_program
3106b3a42afSjmmvone_arg__test_program_body() {
3116b3a42afSjmmv    utils_install_timestamp_wrapper
3126b3a42afSjmmv
3136b3a42afSjmmv    cat >Kyuafile <<EOF
3146b3a42afSjmmvsyntax(2)
3156b3a42afSjmmvtest_suite("top-level")
3166b3a42afSjmmvatf_test_program{name="first"}
3176b3a42afSjmmvatf_test_program{name="second"}
3186b3a42afSjmmvEOF
3196b3a42afSjmmv    utils_cp_helper simple_all_pass first
3206b3a42afSjmmv    utils_cp_helper simple_some_fail second
3216b3a42afSjmmv
3226b3a42afSjmmv    cat >expout <<EOF
3236b3a42afSjmmvsecond:fail  ->  failed: This fails on purpose  [S.UUUs]
3246b3a42afSjmmvsecond:pass  ->  passed  [S.UUUs]
3256b3a42afSjmmv
3266b3a42afSjmmv1/2 passed (1 failed)
3276b3a42afSjmmvCommitted action 1
3286b3a42afSjmmvEOF
3296b3a42afSjmmv    atf_check -s exit:1 -o file:expout -e empty kyua test second
3306b3a42afSjmmv}
3316b3a42afSjmmv
3326b3a42afSjmmv
3336b3a42afSjmmvutils_test_case one_arg__invalid
3346b3a42afSjmmvone_arg__invalid_body() {
3356b3a42afSjmmvcat >experr <<EOF
3366b3a42afSjmmvkyua: E: Test case component in 'foo:' is empty.
3376b3a42afSjmmvEOF
3386b3a42afSjmmv    atf_check -s exit:2 -o empty -e file:experr kyua test foo:
3396b3a42afSjmmv
3406b3a42afSjmmvcat >experr <<EOF
3416b3a42afSjmmvkyua: E: Program name '/a/b' must be relative to the test suite, not absolute.
3426b3a42afSjmmvEOF
3436b3a42afSjmmv    atf_check -s exit:2 -o empty -e file:experr kyua test /a/b
3446b3a42afSjmmv}
3456b3a42afSjmmv
3466b3a42afSjmmv
3476b3a42afSjmmvutils_test_case many_args__ok
3486b3a42afSjmmvmany_args__ok_body() {
3496b3a42afSjmmv    utils_install_timestamp_wrapper
3506b3a42afSjmmv
3516b3a42afSjmmv    cat >Kyuafile <<EOF
3526b3a42afSjmmvsyntax(2)
3536b3a42afSjmmvtest_suite("top-level")
3546b3a42afSjmmvinclude("subdir/Kyuafile")
3556b3a42afSjmmvatf_test_program{name="first"}
3566b3a42afSjmmvEOF
3576b3a42afSjmmv    utils_cp_helper simple_all_pass first
3586b3a42afSjmmv
3596b3a42afSjmmv    mkdir subdir
3606b3a42afSjmmv    cat >subdir/Kyuafile <<EOF
3616b3a42afSjmmvsyntax(2)
3626b3a42afSjmmvtest_suite("in-subdir")
3636b3a42afSjmmvatf_test_program{name="second"}
3646b3a42afSjmmvEOF
3656b3a42afSjmmv    utils_cp_helper simple_some_fail subdir/second
3666b3a42afSjmmv
3676b3a42afSjmmv    cat >expout <<EOF
3686b3a42afSjmmvsubdir/second:fail  ->  failed: This fails on purpose  [S.UUUs]
3696b3a42afSjmmvsubdir/second:pass  ->  passed  [S.UUUs]
3706b3a42afSjmmvfirst:pass  ->  passed  [S.UUUs]
3716b3a42afSjmmv
3726b3a42afSjmmv2/3 passed (1 failed)
3736b3a42afSjmmvCommitted action 1
3746b3a42afSjmmvEOF
3756b3a42afSjmmv    atf_check -s exit:1 -o file:expout -e empty kyua test subdir first:pass
3766b3a42afSjmmv}
3776b3a42afSjmmv
3786b3a42afSjmmv
3796b3a42afSjmmvutils_test_case many_args__invalid
3806b3a42afSjmmvmany_args__invalid_body() {
3816b3a42afSjmmvcat >experr <<EOF
3826b3a42afSjmmvkyua: E: Program name component in ':badbad' is empty.
3836b3a42afSjmmvEOF
3846b3a42afSjmmv    atf_check -s exit:2 -o empty -e file:experr kyua test this-is-ok :badbad
3856b3a42afSjmmv
3866b3a42afSjmmvcat >experr <<EOF
3876b3a42afSjmmvkyua: E: Program name '/foo' must be relative to the test suite, not absolute.
3886b3a42afSjmmvEOF
3896b3a42afSjmmv    atf_check -s exit:2 -o empty -e file:experr kyua test this-is-ok /foo
3906b3a42afSjmmv}
3916b3a42afSjmmv
3926b3a42afSjmmv
3936b3a42afSjmmvutils_test_case many_args__no_match__all
3946b3a42afSjmmvmany_args__no_match__all_body() {
3956b3a42afSjmmv    cat >Kyuafile <<EOF
3966b3a42afSjmmvsyntax(2)
3976b3a42afSjmmvtest_suite("top-level")
3986b3a42afSjmmvatf_test_program{name="first"}
3996b3a42afSjmmvatf_test_program{name="second"}
4006b3a42afSjmmvEOF
4016b3a42afSjmmv    utils_cp_helper simple_all_pass first
4026b3a42afSjmmv    utils_cp_helper simple_all_pass second
4036b3a42afSjmmv
4046b3a42afSjmmv    cat >expout <<EOF
4056b3a42afSjmmvCommitted action 1
4066b3a42afSjmmvEOF
4076b3a42afSjmmv    cat >experr <<EOF
4086b3a42afSjmmvkyua: W: No test cases matched by the filter 'first1'.
4096b3a42afSjmmvEOF
4106b3a42afSjmmv    atf_check -s exit:1 -o file:expout -e file:experr kyua test first1
4116b3a42afSjmmv}
4126b3a42afSjmmv
4136b3a42afSjmmv
4146b3a42afSjmmvutils_test_case many_args__no_match__some
4156b3a42afSjmmvmany_args__no_match__some_body() {
4166b3a42afSjmmv    utils_install_timestamp_wrapper
4176b3a42afSjmmv
4186b3a42afSjmmv    cat >Kyuafile <<EOF
4196b3a42afSjmmvsyntax(2)
4206b3a42afSjmmvtest_suite("top-level")
4216b3a42afSjmmvatf_test_program{name="first"}
4226b3a42afSjmmvatf_test_program{name="second"}
4236b3a42afSjmmvatf_test_program{name="third"}
4246b3a42afSjmmvEOF
4256b3a42afSjmmv    utils_cp_helper simple_all_pass first
4266b3a42afSjmmv    utils_cp_helper simple_all_pass second
4276b3a42afSjmmv    utils_cp_helper simple_some_fail third
4286b3a42afSjmmv
4296b3a42afSjmmv    cat >expout <<EOF
4306b3a42afSjmmvfirst:pass  ->  passed  [S.UUUs]
4316b3a42afSjmmvfirst:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
4326b3a42afSjmmvthird:fail  ->  failed: This fails on purpose  [S.UUUs]
4336b3a42afSjmmvthird:pass  ->  passed  [S.UUUs]
4346b3a42afSjmmv
4356b3a42afSjmmv3/4 passed (1 failed)
4366b3a42afSjmmvCommitted action 1
4376b3a42afSjmmvEOF
4386b3a42afSjmmv
4396b3a42afSjmmv    cat >experr <<EOF
4406b3a42afSjmmvkyua: W: No test cases matched by the filter 'fifth'.
4416b3a42afSjmmvkyua: W: No test cases matched by the filter 'fourth'.
4426b3a42afSjmmvEOF
4436b3a42afSjmmv    atf_check -s exit:1 -o file:expout -e file:experr kyua test first fourth \
4446b3a42afSjmmv        third fifth
4456b3a42afSjmmv}
4466b3a42afSjmmv
4476b3a42afSjmmv
4486b3a42afSjmmvutils_test_case args_are_relative
4496b3a42afSjmmvargs_are_relative_body() {
4506b3a42afSjmmv    utils_install_timestamp_wrapper
4516b3a42afSjmmv
4526b3a42afSjmmv    mkdir root
4536b3a42afSjmmv    cat >root/Kyuafile <<EOF
4546b3a42afSjmmvsyntax(2)
4556b3a42afSjmmvtest_suite("integration-1")
4566b3a42afSjmmvatf_test_program{name="first"}
4576b3a42afSjmmvatf_test_program{name="second"}
4586b3a42afSjmmvinclude("subdir/Kyuafile")
4596b3a42afSjmmvEOF
4606b3a42afSjmmv    utils_cp_helper simple_all_pass root/first
4616b3a42afSjmmv    utils_cp_helper simple_some_fail root/second
4626b3a42afSjmmv
4636b3a42afSjmmv    mkdir root/subdir
4646b3a42afSjmmv    cat >root/subdir/Kyuafile <<EOF
4656b3a42afSjmmvsyntax(2)
4666b3a42afSjmmvtest_suite("integration-2")
4676b3a42afSjmmvatf_test_program{name="third"}
4686b3a42afSjmmvatf_test_program{name="fourth"}
4696b3a42afSjmmvEOF
4706b3a42afSjmmv    utils_cp_helper simple_all_pass root/subdir/third
4716b3a42afSjmmv    utils_cp_helper simple_some_fail root/subdir/fourth
4726b3a42afSjmmv
4736b3a42afSjmmv    cat >expout <<EOF
4746b3a42afSjmmvfirst:pass  ->  passed  [S.UUUs]
4756b3a42afSjmmvfirst:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
4766b3a42afSjmmvsubdir/fourth:fail  ->  failed: This fails on purpose  [S.UUUs]
4776b3a42afSjmmv
4786b3a42afSjmmv2/3 passed (1 failed)
4796b3a42afSjmmvCommitted action 1
4806b3a42afSjmmvEOF
4816b3a42afSjmmv    atf_check -s exit:1 -o file:expout -e empty kyua test \
4826b3a42afSjmmv        -k "$(pwd)/root/Kyuafile" first subdir/fourth:fail
4836b3a42afSjmmv}
4846b3a42afSjmmv
4856b3a42afSjmmv
4866b3a42afSjmmvutils_test_case only_load_used_test_programs
4876b3a42afSjmmvonly_load_used_test_programs_body() {
4886b3a42afSjmmv    utils_install_timestamp_wrapper
4896b3a42afSjmmv
4906b3a42afSjmmv    cat >Kyuafile <<EOF
4916b3a42afSjmmvsyntax(2)
4926b3a42afSjmmvtest_suite("integration")
4936b3a42afSjmmvatf_test_program{name="first"}
4946b3a42afSjmmvatf_test_program{name="second"}
4956b3a42afSjmmvEOF
4966b3a42afSjmmv    utils_cp_helper simple_all_pass first
4976b3a42afSjmmv    utils_cp_helper bad_test_program second
4986b3a42afSjmmv
4996b3a42afSjmmv    cat >expout <<EOF
5006b3a42afSjmmvfirst:pass  ->  passed  [S.UUUs]
5016b3a42afSjmmvfirst:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
5026b3a42afSjmmv
5036b3a42afSjmmv2/2 passed (0 failed)
5046b3a42afSjmmvCommitted action 1
5056b3a42afSjmmvEOF
5066b3a42afSjmmv    CREATE_COOKIE="$(pwd)/cookie"; export CREATE_COOKIE
5076b3a42afSjmmv    atf_check -s exit:0 -o file:expout -e empty kyua test first
5086b3a42afSjmmv    if test -f "${CREATE_COOKIE}"; then
5096b3a42afSjmmv        atf_fail "An unmatched test case has been executed, which harms" \
5106b3a42afSjmmv            "performance"
5116b3a42afSjmmv    fi
5126b3a42afSjmmv}
5136b3a42afSjmmv
5146b3a42afSjmmv
5156b3a42afSjmmvutils_test_case config_behavior
5166b3a42afSjmmvconfig_behavior_body() {
5176b3a42afSjmmv    cat >"my-config" <<EOF
5186b3a42afSjmmvsyntax(2)
5196b3a42afSjmmvtest_suites.suite1["X-the-variable"] = "value1"
5206b3a42afSjmmvtest_suites.suite2["X-the-variable"] = "override me"
5216b3a42afSjmmvEOF
5226b3a42afSjmmv
5236b3a42afSjmmv    cat >Kyuafile <<EOF
5246b3a42afSjmmvsyntax(2)
5256b3a42afSjmmvatf_test_program{name="config1", test_suite="suite1"}
5266b3a42afSjmmvatf_test_program{name="config2", test_suite="suite2"}
5276b3a42afSjmmvatf_test_program{name="config3", test_suite="suite3"}
5286b3a42afSjmmvEOF
5296b3a42afSjmmv    utils_cp_helper config config1
5306b3a42afSjmmv    utils_cp_helper config config2
5316b3a42afSjmmv    utils_cp_helper config config3
5326b3a42afSjmmv
5336b3a42afSjmmv    atf_check -s exit:1 -o save:stdout -e empty \
5346b3a42afSjmmv        kyua -c my-config -v test_suites.suite2.X-the-variable=value2 test
5356b3a42afSjmmv    atf_check -s exit:0 -o ignore -e empty \
5366b3a42afSjmmv        grep 'config1:get_variable.*failed' stdout
5376b3a42afSjmmv    atf_check -s exit:0 -o ignore -e empty \
5386b3a42afSjmmv        grep 'config2:get_variable.*passed' stdout
5396b3a42afSjmmv    atf_check -s exit:0 -o ignore -e empty \
5406b3a42afSjmmv        grep 'config3:get_variable.*skipped' stdout
5416b3a42afSjmmv}
5426b3a42afSjmmv
5436b3a42afSjmmv
5446b3a42afSjmmvutils_test_case store_contents
5456b3a42afSjmmvstore_contents_body() {
5466b3a42afSjmmv    utils_install_timestamp_wrapper
5476b3a42afSjmmv
5486b3a42afSjmmv    cat >Kyuafile <<EOF
5496b3a42afSjmmvsyntax(2)
5506b3a42afSjmmvatf_test_program{name="some-program", test_suite="suite1"}
5516b3a42afSjmmvEOF
5526b3a42afSjmmv    utils_cp_helper simple_all_pass some-program
5536b3a42afSjmmv    cat >expout <<EOF
5546b3a42afSjmmvsome-program:pass  ->  passed  [S.UUUs]
5556b3a42afSjmmvsome-program:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
5566b3a42afSjmmv
5576b3a42afSjmmv2/2 passed (0 failed)
5586b3a42afSjmmvCommitted action 1
5596b3a42afSjmmvEOF
5606b3a42afSjmmv
5616b3a42afSjmmv    # TODO(jmmv): The tests below should not care about the specific contents of
5626b3a42afSjmmv    # the database, but we cannot do better yet.  Instead, we should bundle
5636b3a42afSjmmv    # these tests with the tests of the future "report" tests so that we can
5646b3a42afSjmmv    # actually validate the integration of testing plus reporting.
5656b3a42afSjmmv
5666b3a42afSjmmv    atf_check -s exit:0 -o file:expout -e empty kyua test
5676b3a42afSjmmv    atf_check -s exit:0 -o inline:'1\n' -e empty \
5686b3a42afSjmmv        kyua db-exec --no-headers "SELECT COUNT(action_id) FROM ACTIONS"
5696b3a42afSjmmv    atf_check -s exit:0 -o inline:'1\n' -e empty \
5706b3a42afSjmmv        kyua db-exec --no-headers "SELECT COUNT(context_id) FROM CONTEXTS"
5716b3a42afSjmmv
5726b3a42afSjmmv    rm -f some-program
5736b3a42afSjmmv    utils_cp_helper simple_some_fail some-program
5746b3a42afSjmmv    cat >expout <<EOF
5756b3a42afSjmmvsome-program:fail  ->  failed: This fails on purpose  [S.UUUs]
5766b3a42afSjmmvsome-program:pass  ->  passed  [S.UUUs]
5776b3a42afSjmmv
5786b3a42afSjmmv1/2 passed (1 failed)
5796b3a42afSjmmvCommitted action 2
5806b3a42afSjmmvEOF
5816b3a42afSjmmv
5826b3a42afSjmmv    atf_check -s exit:1 -o file:expout -e empty kyua test
5836b3a42afSjmmv    atf_check -s exit:0 -o inline:'2\n' -e empty \
5846b3a42afSjmmv        kyua db-exec --no-headers "SELECT COUNT(action_id) FROM ACTIONS"
5856b3a42afSjmmv    atf_check -s exit:0 -o inline:'2\n' -e empty \
5866b3a42afSjmmv        kyua db-exec --no-headers "SELECT COUNT(context_id) FROM CONTEXTS"
5876b3a42afSjmmv
5886b3a42afSjmmvcat >expout <<EOF
5896b3a42afSjmmv1,some-program,pass,passed,NULL
5906b3a42afSjmmv1,some-program,skip,skipped,The reason for skipping is this
5916b3a42afSjmmv2,some-program,fail,failed,This fails on purpose
5926b3a42afSjmmv2,some-program,pass,passed,NULL
5936b3a42afSjmmvEOF
5946b3a42afSjmmv    atf_check -s exit:0 -o file:expout -e empty \
5956b3a42afSjmmv        kyua db-exec --no-headers \
5966b3a42afSjmmv        "SELECT actions.action_id, " \
5976b3a42afSjmmv        "       test_programs.relative_path, test_cases.name, " \
5986b3a42afSjmmv        "       test_results.result_type, test_results.result_reason " \
5996b3a42afSjmmv        "FROM actions " \
6006b3a42afSjmmv        "     JOIN test_programs " \
6016b3a42afSjmmv        "     ON actions.action_id = test_programs.action_id " \
6026b3a42afSjmmv        "     JOIN test_cases " \
6036b3a42afSjmmv        "     ON test_programs.test_program_id = test_cases.test_program_id " \
6046b3a42afSjmmv        "     JOIN test_results " \
6056b3a42afSjmmv        "     ON test_cases.test_case_id = test_results.test_case_id " \
6066b3a42afSjmmv        "ORDER BY actions.action_id, test_programs.relative_path, " \
6076b3a42afSjmmv        "         test_cases.name"
6086b3a42afSjmmv}
6096b3a42afSjmmv
6106b3a42afSjmmv
6116b3a42afSjmmvutils_test_case store_flag__ok
6126b3a42afSjmmvstore_flag__ok_body() {
6136b3a42afSjmmv    cat >Kyuafile <<EOF
6146b3a42afSjmmvsyntax(2)
6156b3a42afSjmmvatf_test_program{name="config1", test_suite="suite1"}
6166b3a42afSjmmvEOF
6176b3a42afSjmmv    utils_cp_helper config config1
6186b3a42afSjmmv
6196b3a42afSjmmv    atf_check -s exit:0 -o ignore -e empty kyua test -s foo1.db
6206b3a42afSjmmv    test -f foo1.db || atf_fail "-s did not work"
6216b3a42afSjmmv    atf_check -s exit:0 -o ignore -e empty kyua test --store=foo2.db
6226b3a42afSjmmv    test -f foo2.db || atf_fail "--store did not work"
6236b3a42afSjmmv    test ! -f .kyua/store.db || atf_fail "Default database created"
6246b3a42afSjmmv}
6256b3a42afSjmmv
6266b3a42afSjmmv
6276b3a42afSjmmvutils_test_case store_flag__fail
6286b3a42afSjmmvstore_flag__fail_body() {
6296b3a42afSjmmv    cat >Kyuafile <<EOF
6306b3a42afSjmmvsyntax(2)
6316b3a42afSjmmvatf_test_program{name="config1", test_suite="suite1"}
6326b3a42afSjmmvEOF
6336b3a42afSjmmv    utils_cp_helper config config1
6346b3a42afSjmmv
6356b3a42afSjmmv    atf_check -s exit:3 -o empty -e match:"Invalid.*--store" \
6366b3a42afSjmmv        kyua test --store=""
6376b3a42afSjmmv}
6386b3a42afSjmmv
6396b3a42afSjmmv
6406b3a42afSjmmvutils_test_case build_root_flag
6416b3a42afSjmmvbuild_root_flag_body() {
6426b3a42afSjmmv    utils_install_timestamp_wrapper
6436b3a42afSjmmv
6446b3a42afSjmmv    cat >Kyuafile <<EOF
6456b3a42afSjmmvsyntax(2)
6466b3a42afSjmmvtest_suite("integration")
6476b3a42afSjmmvatf_test_program{name="first"}
6486b3a42afSjmmvinclude("subdir/Kyuafile")
6496b3a42afSjmmvEOF
6506b3a42afSjmmv
6516b3a42afSjmmv    mkdir subdir
6526b3a42afSjmmv    cat >subdir/Kyuafile <<EOF
6536b3a42afSjmmvsyntax(2)
6546b3a42afSjmmvtest_suite("integration")
6556b3a42afSjmmvatf_test_program{name="second"}
6566b3a42afSjmmvatf_test_program{name="third"}
6576b3a42afSjmmvEOF
6586b3a42afSjmmv
6596b3a42afSjmmv    cat >expout <<EOF
6606b3a42afSjmmvfirst:pass  ->  passed  [S.UUUs]
6616b3a42afSjmmvfirst:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
6626b3a42afSjmmvsubdir/second:pass  ->  passed  [S.UUUs]
6636b3a42afSjmmvsubdir/second:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
6646b3a42afSjmmvsubdir/third:pass  ->  passed  [S.UUUs]
6656b3a42afSjmmvsubdir/third:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
6666b3a42afSjmmv
6676b3a42afSjmmv6/6 passed (0 failed)
6686b3a42afSjmmvCommitted action 1
6696b3a42afSjmmvEOF
6706b3a42afSjmmv
6716b3a42afSjmmv    mkdir build
6726b3a42afSjmmv    mkdir build/subdir
6736b3a42afSjmmv    utils_cp_helper simple_all_pass build/first
6746b3a42afSjmmv    utils_cp_helper simple_all_pass build/subdir/second
6756b3a42afSjmmv    utils_cp_helper simple_all_pass build/subdir/third
6766b3a42afSjmmv
6776b3a42afSjmmv    atf_check -s exit:0 -o file:expout -e empty kyua test --build-root=build
6786b3a42afSjmmv}
6796b3a42afSjmmv
6806b3a42afSjmmv
6816b3a42afSjmmvutils_test_case kyuafile_flag__no_args
6826b3a42afSjmmvkyuafile_flag__no_args_body() {
6836b3a42afSjmmv    utils_install_timestamp_wrapper
6846b3a42afSjmmv
6856b3a42afSjmmv    cat >Kyuafile <<EOF
6866b3a42afSjmmvThis file is bogus but it is not loaded.
6876b3a42afSjmmvEOF
6886b3a42afSjmmv
6896b3a42afSjmmv    cat >myfile <<EOF
6906b3a42afSjmmvsyntax(2)
6916b3a42afSjmmvtest_suite("integration")
6926b3a42afSjmmvatf_test_program{name="sometest"}
6936b3a42afSjmmvEOF
6946b3a42afSjmmv    utils_cp_helper simple_all_pass sometest
6956b3a42afSjmmv
6966b3a42afSjmmv    cat >expout <<EOF
6976b3a42afSjmmvsometest:pass  ->  passed  [S.UUUs]
6986b3a42afSjmmvsometest:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
6996b3a42afSjmmv
7006b3a42afSjmmv2/2 passed (0 failed)
7016b3a42afSjmmvCommitted action 1
7026b3a42afSjmmvEOF
7036b3a42afSjmmv    atf_check -s exit:0 -o file:expout -e empty kyua test -k myfile
7046b3a42afSjmmv    cat >expout <<EOF
7056b3a42afSjmmvsometest:pass  ->  passed  [S.UUUs]
7066b3a42afSjmmvsometest:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
7076b3a42afSjmmv
7086b3a42afSjmmv2/2 passed (0 failed)
7096b3a42afSjmmvCommitted action 2
7106b3a42afSjmmvEOF
7116b3a42afSjmmv    atf_check -s exit:0 -o file:expout -e empty kyua test --kyuafile=myfile
7126b3a42afSjmmv}
7136b3a42afSjmmv
7146b3a42afSjmmv
7156b3a42afSjmmvutils_test_case kyuafile_flag__some_args
7166b3a42afSjmmvkyuafile_flag__some_args_body() {
7176b3a42afSjmmv    utils_install_timestamp_wrapper
7186b3a42afSjmmv
7196b3a42afSjmmv    cat >Kyuafile <<EOF
7206b3a42afSjmmvThis file is bogus but it is not loaded.
7216b3a42afSjmmvEOF
7226b3a42afSjmmv
7236b3a42afSjmmv    cat >myfile <<EOF
7246b3a42afSjmmvsyntax(2)
7256b3a42afSjmmvtest_suite("hello-world")
7266b3a42afSjmmvatf_test_program{name="sometest"}
7276b3a42afSjmmvEOF
7286b3a42afSjmmv    utils_cp_helper simple_all_pass sometest
7296b3a42afSjmmv
7306b3a42afSjmmv    cat >expout <<EOF
7316b3a42afSjmmvsometest:pass  ->  passed  [S.UUUs]
7326b3a42afSjmmvsometest:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
7336b3a42afSjmmv
7346b3a42afSjmmv2/2 passed (0 failed)
7356b3a42afSjmmvCommitted action 1
7366b3a42afSjmmvEOF
7376b3a42afSjmmv    atf_check -s exit:0 -o file:expout -e empty kyua test -k myfile sometest
7386b3a42afSjmmv    cat >expout <<EOF
7396b3a42afSjmmvsometest:pass  ->  passed  [S.UUUs]
7406b3a42afSjmmvsometest:skip  ->  skipped: The reason for skipping is this  [S.UUUs]
7416b3a42afSjmmv
7426b3a42afSjmmv2/2 passed (0 failed)
7436b3a42afSjmmvCommitted action 2
7446b3a42afSjmmvEOF
7456b3a42afSjmmv    atf_check -s exit:0 -o file:expout -e empty kyua test --kyuafile=myfile \
7466b3a42afSjmmv        sometest
7476b3a42afSjmmv}
7486b3a42afSjmmv
7496b3a42afSjmmv
7506b3a42afSjmmvutils_test_case interrupt
7516b3a42afSjmmvinterrupt_body() {
7526b3a42afSjmmv    cat >Kyuafile <<EOF
7536b3a42afSjmmvsyntax(2)
7546b3a42afSjmmvtest_suite("integration")
7556b3a42afSjmmvatf_test_program{name="interrupts"}
7566b3a42afSjmmvEOF
7576b3a42afSjmmv    utils_cp_helper interrupts .
7586b3a42afSjmmv
7596b3a42afSjmmv    kyua \
7606b3a42afSjmmv        -v test_suites.integration.X-body-cookie="$(pwd)/body" \
7616b3a42afSjmmv        -v test_suites.integration.X-cleanup-cookie="$(pwd)/cleanup" \
7626b3a42afSjmmv        test >stdout 2>stderr &
7636b3a42afSjmmv    pid=${!}
7646b3a42afSjmmv    echo "Kyua subprocess is PID ${pid}"
7656b3a42afSjmmv
7666b3a42afSjmmv    while [ ! -f body ]; do
7676b3a42afSjmmv        echo "Waiting for body to start"
7686b3a42afSjmmv        sleep 1
7696b3a42afSjmmv    done
7706b3a42afSjmmv    echo "Body started"
7716b3a42afSjmmv    sleep 1
7726b3a42afSjmmv
7736b3a42afSjmmv    echo "Sending INT signal to ${pid}"
7746b3a42afSjmmv    kill -INT ${pid}
7756b3a42afSjmmv    echo "Waiting for process ${pid} to exit"
7766b3a42afSjmmv    wait ${pid}
7776b3a42afSjmmv    ret=${?}
7786b3a42afSjmmv    sed -e 's,^,kyua stdout:,' stdout
7796b3a42afSjmmv    sed -e 's,^,kyua stderr:,' stderr
7806b3a42afSjmmv    echo "Process ${pid} exited"
7816b3a42afSjmmv    [ ${ret} -ne 0 ] || atf_fail 'No error code reported'
7826b3a42afSjmmv
7836b3a42afSjmmv    [ -f cleanup ] || atf_fail 'Cleanup part not executed after signal'
7846b3a42afSjmmv
7856b3a42afSjmmv    atf_check -s exit:0 -o ignore -e empty grep 'Signal caught' stderr
7866b3a42afSjmmv    atf_check -s exit:0 -o ignore -e empty \
7876b3a42afSjmmv        grep 'kyua: E: Interrupted by signal' stderr
7886b3a42afSjmmv}
7896b3a42afSjmmv
7906b3a42afSjmmv
7916b3a42afSjmmvutils_test_case no_test_program_match
7926b3a42afSjmmvno_test_program_match_body() {
7936b3a42afSjmmv    cat >Kyuafile <<EOF
7946b3a42afSjmmvsyntax(2)
7956b3a42afSjmmvtest_suite("integration")
7966b3a42afSjmmvatf_test_program{name="first"}
7976b3a42afSjmmvEOF
7986b3a42afSjmmv    utils_cp_helper simple_all_pass first
7996b3a42afSjmmv    utils_cp_helper simple_all_pass second
8006b3a42afSjmmv
8016b3a42afSjmmv    cat >expout <<EOF
8026b3a42afSjmmvCommitted action 1
8036b3a42afSjmmvEOF
8046b3a42afSjmmv    cat >experr <<EOF
8056b3a42afSjmmvkyua: W: No test cases matched by the filter 'second'.
8066b3a42afSjmmvEOF
8076b3a42afSjmmv    atf_check -s exit:1 -o file:expout -e file:experr kyua test second
8086b3a42afSjmmv}
8096b3a42afSjmmv
8106b3a42afSjmmv
8116b3a42afSjmmvutils_test_case no_test_case_match
8126b3a42afSjmmvno_test_case_match_body() {
8136b3a42afSjmmv    cat >Kyuafile <<EOF
8146b3a42afSjmmvsyntax(2)
8156b3a42afSjmmvtest_suite("integration")
8166b3a42afSjmmvatf_test_program{name="first"}
8176b3a42afSjmmvEOF
8186b3a42afSjmmv    utils_cp_helper simple_all_pass first
8196b3a42afSjmmv
8206b3a42afSjmmv    cat >expout <<EOF
8216b3a42afSjmmvCommitted action 1
8226b3a42afSjmmvEOF
8236b3a42afSjmmv    cat >experr <<EOF
8246b3a42afSjmmvkyua: W: No test cases matched by the filter 'first:foobar'.
8256b3a42afSjmmvEOF
8266b3a42afSjmmv    atf_check -s exit:1 -o file:expout -e file:experr kyua test first:foobar
8276b3a42afSjmmv}
8286b3a42afSjmmv
8296b3a42afSjmmv
8306b3a42afSjmmvutils_test_case missing_kyuafile__no_args
8316b3a42afSjmmvmissing_kyuafile__no_args_body() {
8326b3a42afSjmmv    cat >experr <<EOF
8336b3a42afSjmmvkyua: E: Load of 'Kyuafile' failed: File 'Kyuafile' not found.
8346b3a42afSjmmvEOF
8356b3a42afSjmmv    atf_check -s exit:2 -o empty -e file:experr kyua test
8366b3a42afSjmmv}
8376b3a42afSjmmv
8386b3a42afSjmmv
8396b3a42afSjmmvutils_test_case missing_kyuafile__test_program
8406b3a42afSjmmvmissing_kyuafile__test_program_body() {
8416b3a42afSjmmv    mkdir subdir
8426b3a42afSjmmv    cat >subdir/Kyuafile <<EOF
8436b3a42afSjmmvsyntax(2)
8446b3a42afSjmmvtest_suite("integration")
8456b3a42afSjmmvatf_test_program{name="unused"}
8466b3a42afSjmmvEOF
8476b3a42afSjmmv    utils_cp_helper simple_all_pass subdir/unused
8486b3a42afSjmmv
8496b3a42afSjmmv    cat >experr <<EOF
8506b3a42afSjmmvkyua: E: Load of 'Kyuafile' failed: File 'Kyuafile' not found.
8516b3a42afSjmmvEOF
8526b3a42afSjmmv    atf_check -s exit:2 -o empty -e file:experr kyua test subdir/unused
8536b3a42afSjmmv}
8546b3a42afSjmmv
8556b3a42afSjmmv
8566b3a42afSjmmvutils_test_case missing_kyuafile__subdir
8576b3a42afSjmmvmissing_kyuafile__subdir_body() {
8586b3a42afSjmmv    mkdir subdir
8596b3a42afSjmmv    cat >subdir/Kyuafile <<EOF
8606b3a42afSjmmvsyntax(2)
8616b3a42afSjmmvtest_suite("integration")
8626b3a42afSjmmvatf_test_program{name="unused"}
8636b3a42afSjmmvEOF
8646b3a42afSjmmv    utils_cp_helper simple_all_pass subdir/unused
8656b3a42afSjmmv
8666b3a42afSjmmv    cat >experr <<EOF
8676b3a42afSjmmvkyua: E: Load of 'Kyuafile' failed: File 'Kyuafile' not found.
8686b3a42afSjmmvEOF
8696b3a42afSjmmv    atf_check -s exit:2 -o empty -e file:experr kyua test subdir
8706b3a42afSjmmv}
8716b3a42afSjmmv
8726b3a42afSjmmv
8736b3a42afSjmmvutils_test_case bogus_config
8746b3a42afSjmmvbogus_config_body() {
8756b3a42afSjmmv    mkdir .kyua
8766b3a42afSjmmv    cat >"${HOME}/.kyua/kyua.conf" <<EOF
8776b3a42afSjmmvHello, world.
8786b3a42afSjmmvEOF
8796b3a42afSjmmv
8806b3a42afSjmmv    file_re='.*\.kyua/kyua.conf'
8816b3a42afSjmmv    atf_check -s exit:2 -o empty \
8826b3a42afSjmmv        -e match:"^kyua: E: Load of '${file_re}' failed: Failed to load Lua" \
8836b3a42afSjmmv        kyua test
8846b3a42afSjmmv}
8856b3a42afSjmmv
8866b3a42afSjmmv
8876b3a42afSjmmvutils_test_case bogus_kyuafile
8886b3a42afSjmmvbogus_kyuafile_body() {
8896b3a42afSjmmv    cat >Kyuafile <<EOF
8906b3a42afSjmmvHello, world.
8916b3a42afSjmmvEOF
892*f39f9c9bSjmmv    atf_check -s exit:2 -o empty \
893*f39f9c9bSjmmv        -e match:"Load of 'Kyuafile' failed: .* Kyuafile:2:" kyua list
8946b3a42afSjmmv}
8956b3a42afSjmmv
8966b3a42afSjmmv
8976b3a42afSjmmvutils_test_case bogus_test_program
8986b3a42afSjmmvbogus_test_program_body() {
8996b3a42afSjmmv    utils_install_timestamp_wrapper
9006b3a42afSjmmv
9016b3a42afSjmmv    cat >Kyuafile <<EOF
9026b3a42afSjmmvsyntax(2)
9036b3a42afSjmmvtest_suite("integration")
9046b3a42afSjmmvatf_test_program{name="crash_on_list"}
9056b3a42afSjmmvatf_test_program{name="non_executable"}
9066b3a42afSjmmvEOF
9076b3a42afSjmmv    utils_cp_helper bad_test_program crash_on_list
9086b3a42afSjmmv    echo 'I am not executable' >non_executable
9096b3a42afSjmmv
9106b3a42afSjmmv    cat >expout <<EOF
9116b3a42afSjmmvcrash_on_list:__test_cases_list__  ->  broken: Tester did not exit cleanly: kyua-atf-tester: Invalid test cases list header 'This is not a valid test program!'  [S.UUUs]
9126b3a42afSjmmvnon_executable:__test_cases_list__  ->  broken: Tester did not exit cleanly: kyua-atf-tester: execvp failed: Permission denied  [S.UUUs]
9136b3a42afSjmmv
9146b3a42afSjmmv0/2 passed (2 failed)
9156b3a42afSjmmvCommitted action 1
9166b3a42afSjmmvEOF
9176b3a42afSjmmv    atf_check -s exit:1 -o file:expout -e empty kyua test
9186b3a42afSjmmv}
9196b3a42afSjmmv
9206b3a42afSjmmv
9216b3a42afSjmmvutils_test_case missing_test_program
9226b3a42afSjmmvmissing_test_program_body() {
9236b3a42afSjmmv    cat >Kyuafile <<EOF
9246b3a42afSjmmvsyntax(2)
9256b3a42afSjmmvinclude("subdir/Kyuafile")
9266b3a42afSjmmvEOF
9276b3a42afSjmmv    mkdir subdir
9286b3a42afSjmmv    cat >subdir/Kyuafile <<EOF
9296b3a42afSjmmvsyntax(2)
9306b3a42afSjmmvtest_suite("integration")
9316b3a42afSjmmvatf_test_program{name="ok"}
9326b3a42afSjmmvatf_test_program{name="i-am-missing"}
9336b3a42afSjmmvEOF
9346b3a42afSjmmv    echo 'I should not be touched because the Kyuafile is bogus' >subdir/ok
9356b3a42afSjmmv
9366b3a42afSjmmv    cat >experr <<EOF
9376b3a42afSjmmvkyua: E: Load of 'Kyuafile' failed: .*Non-existent test program 'subdir/i-am-missing'.
9386b3a42afSjmmvEOF
9396b3a42afSjmmv    atf_check -s exit:2 -o empty -e "match:$(cat experr)" kyua list
9406b3a42afSjmmv}
9416b3a42afSjmmv
9426b3a42afSjmmv
9436b3a42afSjmmvatf_init_test_cases() {
9446b3a42afSjmmv    atf_add_test_case one_test_program__all_pass
9456b3a42afSjmmv    atf_add_test_case one_test_program__some_fail
9466b3a42afSjmmv    atf_add_test_case many_test_programs__all_pass
9476b3a42afSjmmv    atf_add_test_case many_test_programs__some_fail
9486b3a42afSjmmv    atf_add_test_case expect__all_pass
9496b3a42afSjmmv    atf_add_test_case expect__some_fail
9506b3a42afSjmmv    atf_add_test_case premature_exit
9516b3a42afSjmmv
9526b3a42afSjmmv    atf_add_test_case no_args
9536b3a42afSjmmv    atf_add_test_case one_arg__subdir
9546b3a42afSjmmv    atf_add_test_case one_arg__test_case
9556b3a42afSjmmv    atf_add_test_case one_arg__test_program
9566b3a42afSjmmv    atf_add_test_case one_arg__invalid
9576b3a42afSjmmv    atf_add_test_case many_args__ok
9586b3a42afSjmmv    atf_add_test_case many_args__invalid
9596b3a42afSjmmv    atf_add_test_case many_args__no_match__all
9606b3a42afSjmmv    atf_add_test_case many_args__no_match__some
9616b3a42afSjmmv
9626b3a42afSjmmv    atf_add_test_case args_are_relative
9636b3a42afSjmmv
9646b3a42afSjmmv    atf_add_test_case only_load_used_test_programs
9656b3a42afSjmmv
9666b3a42afSjmmv    atf_add_test_case config_behavior
9676b3a42afSjmmv
9686b3a42afSjmmv    atf_add_test_case store_contents
9696b3a42afSjmmv    atf_add_test_case store_flag__ok
9706b3a42afSjmmv    atf_add_test_case store_flag__fail
9716b3a42afSjmmv
9726b3a42afSjmmv    atf_add_test_case build_root_flag
9736b3a42afSjmmv
9746b3a42afSjmmv    atf_add_test_case kyuafile_flag__no_args
9756b3a42afSjmmv    atf_add_test_case kyuafile_flag__some_args
9766b3a42afSjmmv
9776b3a42afSjmmv    atf_add_test_case interrupt
9786b3a42afSjmmv
9796b3a42afSjmmv    atf_add_test_case no_test_program_match
9806b3a42afSjmmv    atf_add_test_case no_test_case_match
9816b3a42afSjmmv
9826b3a42afSjmmv    atf_add_test_case missing_kyuafile__no_args
9836b3a42afSjmmv    atf_add_test_case missing_kyuafile__test_program
9846b3a42afSjmmv    atf_add_test_case missing_kyuafile__subdir
9856b3a42afSjmmv
9866b3a42afSjmmv    atf_add_test_case bogus_config
9876b3a42afSjmmv    atf_add_test_case bogus_kyuafile
9886b3a42afSjmmv    atf_add_test_case bogus_test_program
9896b3a42afSjmmv    atf_add_test_case missing_test_program
9906b3a42afSjmmv}
991