1# Copyright 2011 The Kyua Authors. 2# All rights reserved. 3# 4# Redistribution and use in source and binary forms, with or without 5# modification, are permitted provided that the following conditions are 6# met: 7# 8# * Redistributions of source code must retain the above copyright 9# notice, this list of conditions and the following disclaimer. 10# * Redistributions in binary form must reproduce the above copyright 11# notice, this list of conditions and the following disclaimer in the 12# documentation and/or other materials provided with the distribution. 13# * Neither the name of Google Inc. nor the names of its contributors 14# may be used to endorse or promote products derived from this software 15# without specific prior written permission. 16# 17# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 29 30utils_test_case no_args 31no_args_body() { 32 cat >Kyuafile <<EOF 33syntax(2) 34test_suite("integration") 35atf_test_program{name="simple_all_pass"} 36EOF 37 utils_cp_helper simple_all_pass . 38 39 cat >experr <<EOF 40Usage error for command debug: Not enough arguments. 41Type 'kyua help debug' for usage information. 42EOF 43 atf_check -s exit:3 -o empty -e file:experr kyua debug 44} 45 46 47utils_test_case many_args 48many_args_body() { 49 cat >Kyuafile <<EOF 50syntax(2) 51test_suite("integration") 52atf_test_program{name="first"} 53atf_test_program{name="second"} 54EOF 55 utils_cp_helper simple_all_pass first 56 utils_cp_helper simple_all_pass second 57 58 cat >experr <<EOF 59Usage error for command debug: Too many arguments. 60Type 'kyua help debug' for usage information. 61EOF 62 atf_check -s exit:3 -o empty -e file:experr kyua debug first:pass \ 63 second:pass 64} 65 66 67utils_test_case one_arg__ok_pass 68one_arg__ok_pass_body() { 69 cat >Kyuafile <<EOF 70syntax(2) 71test_suite("integration") 72atf_test_program{name="first"} 73atf_test_program{name="second"} 74EOF 75 utils_cp_helper expect_all_pass first 76 utils_cp_helper simple_all_pass second 77 78 cat >expout <<EOF 79This is the stdout of pass 80second:pass -> passed 81EOF 82cat >experr <<EOF 83This is the stderr of pass 84EOF 85 atf_check -s exit:0 -o file:expout -e file:experr kyua debug second:pass 86} 87 88 89utils_test_case one_arg__ok_fail 90one_arg__ok_fail_body() { 91 cat >Kyuafile <<EOF 92syntax(2) 93test_suite("integration") 94atf_test_program{name="first"} 95EOF 96 utils_cp_helper simple_some_fail first 97 98 cat >expout <<EOF 99This is the stdout of fail 100first:fail -> failed: This fails on purpose 101EOF 102 cat >experr <<EOF 103This is the stderr of fail 104EOF 105 atf_check -s exit:1 -o file:expout -e file:experr kyua debug first:fail 106} 107 108 109utils_test_case one_arg__no_match 110one_arg__no_match_body() { 111 cat >Kyuafile <<EOF 112syntax(2) 113test_suite("integration") 114atf_test_program{name="first"} 115atf_test_program{name="second"} 116EOF 117 utils_cp_helper expect_all_pass first 118 utils_cp_helper simple_all_pass second 119 120 cat >experr <<EOF 121kyua: E: Unknown test case 'second:die'. 122EOF 123 atf_check -s exit:2 -o empty -e file:experr kyua debug second:die 124} 125 126 127utils_test_case one_arg__no_test_case 128one_arg__no_test_case_body() { 129 # CHECK_STYLE_DISABLE 130 cat >experr <<EOF 131Usage error for command debug: 'foo' is not a test case identifier (missing ':'?). 132Type 'kyua help debug' for usage information. 133EOF 134 # CHECK_STYLE_ENABLE 135 atf_check -s exit:3 -o empty -e file:experr kyua debug foo 136} 137 138 139utils_test_case one_arg__bad_filter 140one_arg__bad_filter_body() { 141 cat >experr <<EOF 142kyua: E: Test case component in 'foo:' is empty. 143EOF 144 atf_check -s exit:2 -o empty -e file:experr kyua debug foo: 145} 146 147 148utils_test_case body_and_cleanup 149body_and_cleanup_body() { 150 cat >Kyuafile <<EOF 151syntax(2) 152test_suite("integration") 153atf_test_program{name="single"} 154EOF 155 utils_cp_helper metadata single 156 157 cat >expout <<EOF 158single:with_cleanup -> passed 159EOF 160 atf_check -s exit:0 -o file:expout -e empty kyua debug \ 161 --stdout=saved.out --stderr=saved.err single:with_cleanup 162 163 cat >expout <<EOF 164Body message to stdout 165Cleanup message to stdout 166EOF 167 atf_check -s exit:0 -o file:expout -e empty cat saved.out 168 169 cat >experr <<EOF 170Body message to stderr 171Cleanup message to stderr 172EOF 173 atf_check -s exit:0 -o file:experr -e empty cat saved.err 174} 175 176 177utils_test_case stdout_stderr_flags 178stdout_stderr_flags_body() { 179 cat >Kyuafile <<EOF 180syntax(2) 181test_suite("integration") 182atf_test_program{name="first"} 183atf_test_program{name="second"} 184EOF 185 utils_cp_helper expect_all_pass first 186 utils_cp_helper simple_all_pass second 187 188 cat >expout <<EOF 189second:pass -> passed 190EOF 191 atf_check -s exit:0 -o file:expout -e empty kyua debug \ 192 --stdout=saved.out --stderr=saved.err second:pass 193 194 cat >expout <<EOF 195This is the stdout of pass 196EOF 197 cmp -s saved.out expout || atf_fail "--stdout did not redirect the" \ 198 "standard output to the desired file" 199 200 cat >experr <<EOF 201This is the stderr of pass 202EOF 203 cmp -s saved.err experr || atf_fail "--stderr did not redirect the" \ 204 "standard error to the desired file" 205} 206 207 208utils_test_case args_are_relative 209args_are_relative_body() { 210 mkdir root 211 cat >root/Kyuafile <<EOF 212syntax(2) 213test_suite("integration") 214include("subdir/Kyuafile") 215atf_test_program{name="prog"} 216EOF 217 utils_cp_helper simple_all_pass root/prog 218 219 mkdir root/subdir 220 cat >root/subdir/Kyuafile <<EOF 221syntax(2) 222test_suite("integration") 223atf_test_program{name="prog"} 224EOF 225 utils_cp_helper simple_some_fail root/subdir/prog 226 227 cat >expout <<EOF 228This is the stdout of fail 229subdir/prog:fail -> failed: This fails on purpose 230EOF 231 cat >experr <<EOF 232This is the stderr of fail 233EOF 234 atf_check -s exit:1 -o file:expout -e file:experr kyua debug \ 235 -k "$(pwd)/root/Kyuafile" subdir/prog:fail 236} 237 238 239utils_test_case only_load_used_test_programs 240only_load_used_test_programs_body() { 241 cat >Kyuafile <<EOF 242syntax(2) 243test_suite("integration") 244atf_test_program{name="first"} 245atf_test_program{name="second"} 246EOF 247 utils_cp_helper simple_all_pass first 248 utils_cp_helper bad_test_program second 249 250 cat >expout <<EOF 251This is the stdout of pass 252first:pass -> passed 253EOF 254 cat >experr <<EOF 255This is the stderr of pass 256EOF 257 CREATE_COOKIE="$(pwd)/cookie"; export CREATE_COOKIE 258 atf_check -s exit:0 -o file:expout -e file:experr kyua debug first:pass 259 if [ -f "${CREATE_COOKIE}" ]; then 260 atf_fail "An unmatched test case has been executed, which harms" \ 261 "performance" 262 fi 263} 264 265 266utils_test_case config_behavior 267config_behavior_body() { 268 cat >"my-config" <<EOF 269syntax(2) 270test_suites.suite1["the-variable"] = "value1" 271test_suites.suite2["the-variable"] = "override me" 272EOF 273 274 cat >Kyuafile <<EOF 275syntax(2) 276atf_test_program{name="config1", test_suite="suite1"} 277atf_test_program{name="config2", test_suite="suite2"} 278atf_test_program{name="config3", test_suite="suite3"} 279EOF 280 utils_cp_helper config config1 281 utils_cp_helper config config2 282 utils_cp_helper config config3 283 284 atf_check -s exit:1 -o match:'failed' -e empty \ 285 kyua -c my-config -v test_suites.suite2.the-variable=value2 \ 286 debug config1:get_variable 287 atf_check -s exit:0 -o match:'passed' -e empty \ 288 kyua -c my-config -v test_suites.suite2.the-variable=value2 \ 289 debug config2:get_variable 290 atf_check -s exit:0 -o match:'skipped' -e empty \ 291 kyua -c my-config -v test_suites.suite2.the-variable=value2 \ 292 debug config3:get_variable 293} 294 295 296utils_test_case build_root_flag 297build_root_flag_body() { 298 cat >Kyuafile <<EOF 299syntax(2) 300test_suite("integration") 301atf_test_program{name="first"} 302atf_test_program{name="second"} 303EOF 304 mkdir build 305 utils_cp_helper expect_all_pass build/first 306 utils_cp_helper simple_all_pass build/second 307 308 cat >expout <<EOF 309This is the stdout of pass 310second:pass -> passed 311EOF 312cat >experr <<EOF 313This is the stderr of pass 314EOF 315 atf_check -s exit:0 -o file:expout -e file:experr \ 316 kyua debug --build-root=build second:pass 317} 318 319 320utils_test_case kyuafile_flag__ok 321kyuafile_flag__ok_body() { 322 cat >Kyuafile <<EOF 323This file is bogus but it is not loaded. 324EOF 325 326 cat >myfile <<EOF 327syntax(2) 328test_suite("hello-world") 329atf_test_program{name="sometest"} 330EOF 331 utils_cp_helper simple_all_pass sometest 332 333 atf_check -s exit:0 -o match:passed -e empty kyua test -k myfile sometest 334 atf_check -s exit:0 -o match:passed -e empty kyua test --kyuafile=myfile \ 335 sometest 336} 337 338 339utils_test_case missing_kyuafile 340missing_kyuafile_body() { 341 cat >experr <<EOF 342kyua: E: Load of 'Kyuafile' failed: File 'Kyuafile' not found. 343EOF 344 atf_check -s exit:2 -o empty -e file:experr kyua debug foo:bar 345} 346 347 348utils_test_case bogus_kyuafile 349bogus_kyuafile_body() { 350 cat >Kyuafile <<EOF 351Hello, world. 352EOF 353 atf_check -s exit:2 -o empty \ 354 -e match:"Load of 'Kyuafile' failed: .* Kyuafile:2:" kyua list 355} 356 357 358utils_test_case bogus_test_program 359bogus_test_program_body() { 360 cat >Kyuafile <<EOF 361syntax(2) 362test_suite("integration") 363atf_test_program{name="crash_on_list"} 364atf_test_program{name="non_executable"} 365EOF 366 utils_cp_helper bad_test_program crash_on_list 367 echo 'I am not executable' >non_executable 368 369 cat >experr <<EOF 370kyua: E: Unknown test case 'crash_on_list:a'. 371EOF 372 atf_check -s exit:2 -o empty -e file:experr kyua debug crash_on_list:a 373 374 cat >experr <<EOF 375kyua: E: Unknown test case 'non_executable:a'. 376EOF 377 atf_check -s exit:2 -o empty -e file:experr kyua debug non_executable:a 378 379 # CHECK_STYLE_DISABLE 380 cat >expout <<EOF 381crash_on_list:__test_cases_list__ -> broken: Invalid header for test case list; expecting Content-Type for application/X-atf-tp version 1, got '' 382EOF 383 # CHECK_STYLE_ENABLE 384 atf_check -s exit:1 -o file:expout -e empty kyua debug \ 385 crash_on_list:__test_cases_list__ 386 387 # CHECK_STYLE_DISABLE 388 cat >expout <<EOF 389non_executable:__test_cases_list__ -> broken: Permission denied to run test program 390EOF 391 # CHECK_STYLE_ENABLE 392 atf_check -s exit:1 -o file:expout -e empty kyua debug \ 393 non_executable:__test_cases_list__ 394} 395 396 397atf_init_test_cases() { 398 atf_add_test_case no_args 399 atf_add_test_case many_args 400 atf_add_test_case one_arg__ok_pass 401 atf_add_test_case one_arg__ok_fail 402 atf_add_test_case one_arg__no_match 403 atf_add_test_case one_arg__no_test_case 404 atf_add_test_case one_arg__bad_filter 405 406 atf_add_test_case body_and_cleanup 407 408 atf_add_test_case stdout_stderr_flags 409 410 atf_add_test_case args_are_relative 411 412 atf_add_test_case only_load_used_test_programs 413 414 atf_add_test_case config_behavior 415 416 atf_add_test_case build_root_flag 417 atf_add_test_case kyuafile_flag__ok 418 atf_add_test_case missing_kyuafile 419 atf_add_test_case bogus_kyuafile 420 atf_add_test_case bogus_test_program 421} 422