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