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