1 1.1 jmmv # 2 1.1 jmmv # Automated Testing Framework (atf) 3 1.1 jmmv # 4 1.1 jmmv # Copyright (c) 2007 The NetBSD Foundation, Inc. 5 1.1 jmmv # All rights reserved. 6 1.1 jmmv # 7 1.1 jmmv # Redistribution and use in source and binary forms, with or without 8 1.1 jmmv # modification, are permitted provided that the following conditions 9 1.1 jmmv # are met: 10 1.1 jmmv # 1. Redistributions of source code must retain the above copyright 11 1.1 jmmv # notice, this list of conditions and the following disclaimer. 12 1.1 jmmv # 2. Redistributions in binary form must reproduce the above copyright 13 1.1 jmmv # notice, this list of conditions and the following disclaimer in the 14 1.1 jmmv # documentation and/or other materials provided with the distribution. 15 1.1 jmmv # 16 1.1 jmmv # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND 17 1.1 jmmv # CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 18 1.1 jmmv # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19 1.1 jmmv # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20 1.1 jmmv # IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY 21 1.1 jmmv # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 1.1 jmmv # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 23 1.1 jmmv # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24 1.1 jmmv # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 25 1.1 jmmv # IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 26 1.1 jmmv # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27 1.1 jmmv # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 1.1 jmmv # 29 1.1 jmmv 30 1.1 jmmv create_atffile() 31 1.1 jmmv { 32 1.1 jmmv ATF_CONFDIR="$(pwd)"; export ATF_CONFDIR 33 1.1 jmmv 34 1.1 jmmv cat >Atffile <<EOF 35 1.1 jmmv Content-Type: application/X-atf-atffile; version="1" 36 1.1 jmmv 37 1.1 jmmv prop: test-suite = atf 38 1.1 jmmv 39 1.1 jmmv EOF 40 1.1 jmmv for f in "${@}"; do 41 1.1 jmmv echo "tp: ${f}" >>Atffile 42 1.1 jmmv done 43 1.1 jmmv } 44 1.1 jmmv 45 1.1 jmmv create_helper() 46 1.1 jmmv { 47 1.1 jmmv cp $(atf_get_srcdir)/misc_helpers helper 48 1.1 jmmv create_atffile helper 49 1.1 jmmv TESTCASE=${1}; export TESTCASE 50 1.1 jmmv } 51 1.1 jmmv 52 1.1 jmmv create_helper_stdin() 53 1.1 jmmv { 54 1.1 jmmv # TODO: This really, really, really must use real test programs. 55 1.1 jmmv cat >${1} <<EOF 56 1.1 jmmv #! $(atf-config -t atf_shell) 57 1.1 jmmv while [ \${#} -gt 0 ]; do 58 1.1 jmmv case \${1} in 59 1.1 jmmv -l) 60 1.1 jmmv echo 'Content-Type: application/X-atf-tp; version="1"' 61 1.1 jmmv echo 62 1.1 jmmv EOF 63 1.1 jmmv cnt=1 64 1.1 jmmv while [ ${cnt} -le ${2} ]; do 65 1.1 jmmv echo "echo 'ident: tc${cnt}'" >>${1} 66 1.1 jmmv [ ${cnt} -lt ${2} ] && echo "echo" >>${1} 67 1.1 jmmv cnt=$((${cnt} + 1)) 68 1.1 jmmv done 69 1.1 jmmv cat >>${1} <<EOF 70 1.1 jmmv exit 0 71 1.1 jmmv ;; 72 1.1 jmmv -r*) 73 1.1 jmmv resfile=\$(echo \${1} | cut -d r -f 2-) 74 1.1 jmmv ;; 75 1.1 jmmv esac 76 1.1 jmmv testcase=\$(echo \${1} | cut -d : -f 1) 77 1.1 jmmv shift 78 1.1 jmmv done 79 1.1 jmmv EOF 80 1.1 jmmv cat >>${1} 81 1.1 jmmv } 82 1.1 jmmv 83 1.1 jmmv create_mount_helper() 84 1.1 jmmv { 85 1.1 jmmv cat >${1} <<EOF 86 1.1 jmmv #! /usr/bin/env atf-sh 87 1.1 jmmv 88 1.1 jmmv do_mount() { 89 1.1 jmmv platform=\$(uname) 90 1.1 jmmv case \${platform} in 91 1.1 jmmv Linux|NetBSD) 92 1.1 jmmv mount -t tmpfs tmpfs \${1} || atf_fail "Mount failed" 93 1.1 jmmv ;; 94 1.1 jmmv FreeBSD) 95 1.1 jmmv mdmfs -s 16m md \${1} || atf_fail "Mount failed" 96 1.1 jmmv ;; 97 1.1 jmmv SunOS) 98 1.1 jmmv mount -F tmpfs tmpfs \$(pwd)/\${1} || atf_fail "Mount failed" 99 1.1 jmmv ;; 100 1.1 jmmv *) 101 1.1 jmmv atf_fail "create_mount_helper called for an unsupported platform." 102 1.1 jmmv ;; 103 1.1 jmmv esac 104 1.1 jmmv } 105 1.1 jmmv 106 1.1 jmmv atf_test_case main 107 1.1 jmmv main_head() { 108 1.1 jmmv atf_set "require.user" "root" 109 1.1 jmmv } 110 1.1 jmmv main_body() { 111 1.1 jmmv EOF 112 1.1 jmmv cat >>${1} 113 1.1 jmmv cat >>${1} <<EOF 114 1.1 jmmv } 115 1.1 jmmv 116 1.1 jmmv atf_init_test_cases() 117 1.1 jmmv { 118 1.1 jmmv atf_add_test_case main 119 1.1 jmmv } 120 1.1 jmmv EOF 121 1.1 jmmv } 122 1.1 jmmv 123 1.1 jmmv atf_test_case no_warnings 124 1.1 jmmv no_warnings_head() 125 1.1 jmmv { 126 1.1 jmmv atf_set "descr" "Tests that atf-run suppresses warnings about not running" \ 127 1.1 jmmv "within atf-run" 128 1.1 jmmv } 129 1.1 jmmv no_warnings_body() 130 1.1 jmmv { 131 1.1 jmmv create_helper pass 132 1.1 jmmv atf_check -s eq:0 -o ignore -e not-match:'WARNING.*atf-run' atf-run helper 133 1.1 jmmv } 134 1.1 jmmv 135 1.1 jmmv atf_test_case config 136 1.1 jmmv config_head() 137 1.1 jmmv { 138 1.1 jmmv atf_set "descr" "Tests that the config files are read in the correct" \ 139 1.1 jmmv "order" 140 1.1 jmmv } 141 1.1 jmmv config_body() 142 1.1 jmmv { 143 1.1 jmmv create_helper config 144 1.1 jmmv 145 1.1 jmmv mkdir etc 146 1.1 jmmv mkdir .atf 147 1.1 jmmv 148 1.1 jmmv echo "First: read system-wide common.conf." 149 1.1 jmmv cat >etc/common.conf <<EOF 150 1.1 jmmv Content-Type: application/X-atf-config; version="1" 151 1.1 jmmv 152 1.1 jmmv 1st = "sw common" 153 1.1 jmmv 2nd = "sw common" 154 1.1 jmmv 3rd = "sw common" 155 1.1 jmmv 4th = "sw common" 156 1.1 jmmv EOF 157 1.1 jmmv atf_check -s eq:0 \ 158 1.1 jmmv -o match:'1st: sw common' \ 159 1.1 jmmv -o match:'2nd: sw common' \ 160 1.1 jmmv -o match:'3rd: sw common' \ 161 1.1 jmmv -o match:'4th: sw common' \ 162 1.1 jmmv -e ignore -x \ 163 1.1 jmmv "ATF_CONFDIR=$(pwd)/etc HOME=$(pwd) atf-run helper" 164 1.1 jmmv 165 1.1 jmmv echo "Second: read system-wide <test-suite>.conf." 166 1.1 jmmv cat >etc/atf.conf <<EOF 167 1.1 jmmv Content-Type: application/X-atf-config; version="1" 168 1.1 jmmv 169 1.1 jmmv 1st = "sw atf" 170 1.1 jmmv EOF 171 1.1 jmmv atf_check -s eq:0 \ 172 1.1 jmmv -o match:'1st: sw atf' \ 173 1.1 jmmv -o match:'2nd: sw common' \ 174 1.1 jmmv -o match:'3rd: sw common' \ 175 1.1 jmmv -o match:'4th: sw common' \ 176 1.1 jmmv -e ignore -x \ 177 1.1 jmmv "ATF_CONFDIR=$(pwd)/etc HOME=$(pwd) atf-run helper" 178 1.1 jmmv 179 1.1 jmmv echo "Third: read user-specific common.conf." 180 1.1 jmmv cat >.atf/common.conf <<EOF 181 1.1 jmmv Content-Type: application/X-atf-config; version="1" 182 1.1 jmmv 183 1.1 jmmv 2nd = "us common" 184 1.1 jmmv EOF 185 1.1 jmmv atf_check -s eq:0 \ 186 1.1 jmmv -o match:'1st: sw atf' \ 187 1.1 jmmv -o match:'2nd: us common' \ 188 1.1 jmmv -o match:'3rd: sw common' \ 189 1.1 jmmv -o match:'4th: sw common' \ 190 1.1 jmmv -e ignore -x \ 191 1.1 jmmv "ATF_CONFDIR=$(pwd)/etc HOME=$(pwd) atf-run helper" 192 1.1 jmmv 193 1.1 jmmv echo "Fourth: read user-specific <test-suite>.conf." 194 1.1 jmmv cat >.atf/atf.conf <<EOF 195 1.1 jmmv Content-Type: application/X-atf-config; version="1" 196 1.1 jmmv 197 1.1 jmmv 3rd = "us atf" 198 1.1 jmmv EOF 199 1.1 jmmv atf_check -s eq:0 \ 200 1.1 jmmv -o match:'1st: sw atf' \ 201 1.1 jmmv -o match:'2nd: us common' \ 202 1.1 jmmv -o match:'3rd: us atf' \ 203 1.1 jmmv -o match:'4th: sw common' \ 204 1.1 jmmv -e ignore -x \ 205 1.1 jmmv "ATF_CONFDIR=$(pwd)/etc HOME=$(pwd) atf-run helper" 206 1.1 jmmv } 207 1.1 jmmv 208 1.1 jmmv atf_test_case vflag 209 1.1 jmmv vflag_head() 210 1.1 jmmv { 211 1.1 jmmv atf_set "descr" "Tests that the -v flag works and that it properly" \ 212 1.1 jmmv "overrides the values in configuration files" 213 1.1 jmmv } 214 1.1 jmmv vflag_body() 215 1.1 jmmv { 216 1.1 jmmv create_helper testvar 217 1.1 jmmv 218 1.1 jmmv echo "Checking that 'testvar' is not defined." 219 1.1 jmmv atf_check -s eq:1 -o ignore -e ignore -x \ 220 1.1 jmmv "ATF_CONFDIR=$(pwd)/etc atf-run helper" 221 1.1 jmmv 222 1.2 gutterid echo "Checking that defining 'testvar' through '-v' works." 223 1.1 jmmv atf_check -s eq:0 -o match:'testvar: a value' -e ignore -x \ 224 1.1 jmmv "ATF_CONFDIR=$(pwd)/etc atf-run -v testvar='a value' helper" 225 1.1 jmmv 226 1.2 gutterid echo "Checking that defining 'testvar' through the configuration" \ 227 1.1 jmmv "file works." 228 1.1 jmmv mkdir etc 229 1.1 jmmv cat >etc/common.conf <<EOF 230 1.1 jmmv Content-Type: application/X-atf-config; version="1" 231 1.1 jmmv 232 1.1 jmmv testvar = "value in conf file" 233 1.1 jmmv EOF 234 1.1 jmmv atf_check -s eq:0 -o match:'testvar: value in conf file' -e ignore -x \ 235 1.1 jmmv "ATF_CONFDIR=$(pwd)/etc atf-run helper" 236 1.1 jmmv 237 1.2 gutterid echo "Checking that defining 'testvar' through -v overrides the" \ 238 1.1 jmmv "configuration file." 239 1.1 jmmv atf_check -s eq:0 -o match:'testvar: a value' -e ignore -x \ 240 1.1 jmmv "ATF_CONFDIR=$(pwd)/etc atf-run -v testvar='a value' helper" 241 1.1 jmmv } 242 1.1 jmmv 243 1.1 jmmv atf_test_case atffile 244 1.1 jmmv atffile_head() 245 1.1 jmmv { 246 1.1 jmmv atf_set "descr" "Tests that the variables defined by the Atffile" \ 247 1.1 jmmv "are recognized and that they take the lowest priority" 248 1.1 jmmv } 249 1.1 jmmv atffile_body() 250 1.1 jmmv { 251 1.1 jmmv create_helper testvar 252 1.1 jmmv 253 1.1 jmmv echo "Checking that 'testvar' is not defined." 254 1.1 jmmv atf_check -s eq:1 -o ignore -e ignore -x \ 255 1.1 jmmv "ATF_CONFDIR=$(pwd)/etc atf-run helper" 256 1.1 jmmv 257 1.2 gutterid echo "Checking that defining 'testvar' through the Atffile works." 258 1.1 jmmv echo 'conf: testvar = "a value"' >>Atffile 259 1.1 jmmv atf_check -s eq:0 -o match:'testvar: a value' -e ignore -x \ 260 1.1 jmmv "ATF_CONFDIR=$(pwd)/etc atf-run helper" 261 1.1 jmmv 262 1.2 gutterid echo "Checking that defining 'testvar' through the configuration" \ 263 1.1 jmmv "file overrides the one in the Atffile." 264 1.1 jmmv mkdir etc 265 1.1 jmmv cat >etc/common.conf <<EOF 266 1.1 jmmv Content-Type: application/X-atf-config; version="1" 267 1.1 jmmv 268 1.1 jmmv testvar = "value in conf file" 269 1.1 jmmv EOF 270 1.1 jmmv atf_check -s eq:0 -o match:'testvar: value in conf file' -e ignore -x \ 271 1.1 jmmv "ATF_CONFDIR=$(pwd)/etc atf-run helper" 272 1.1 jmmv rm -rf etc 273 1.1 jmmv 274 1.2 gutterid echo "Checking that defining 'testvar' through -v overrides the" \ 275 1.1 jmmv "one in the Atffile." 276 1.1 jmmv atf_check -s eq:0 -o match:'testvar: new value' -e ignore -x \ 277 1.1 jmmv "ATF_CONFDIR=$(pwd)/etc atf-run -v testvar='new value' helper" 278 1.1 jmmv } 279 1.1 jmmv 280 1.1 jmmv atf_test_case atffile_recursive 281 1.1 jmmv atffile_recursive_head() 282 1.1 jmmv { 283 1.1 jmmv atf_set "descr" "Tests that variables defined by an Atffile are not" \ 284 1.1 jmmv "inherited by other Atffiles." 285 1.1 jmmv } 286 1.1 jmmv atffile_recursive_body() 287 1.1 jmmv { 288 1.1 jmmv create_helper testvar 289 1.1 jmmv 290 1.1 jmmv mkdir dir 291 1.1 jmmv mv Atffile helper dir 292 1.1 jmmv 293 1.1 jmmv echo "Checking that 'testvar' is not inherited." 294 1.1 jmmv create_atffile dir 295 1.1 jmmv echo 'conf: testvar = "a value"' >> Atffile 296 1.1 jmmv atf_check -s eq:1 -o ignore -e ignore -x "ATF_CONFDIR=$(pwd)/etc atf-run" 297 1.1 jmmv 298 1.1 jmmv echo "Checking that defining 'testvar' in the correct Atffile works." 299 1.1 jmmv echo 'conf: testvar = "a value"' >>dir/Atffile 300 1.1 jmmv atf_check -s eq:0 -o match:'testvar: a value' -e ignore -x \ 301 1.1 jmmv "ATF_CONFDIR=$(pwd)/etc atf-run" 302 1.1 jmmv } 303 1.1 jmmv 304 1.1 jmmv atf_test_case fds 305 1.1 jmmv fds_head() 306 1.1 jmmv { 307 1.1 jmmv atf_set "descr" "Tests that all streams are properly captured" 308 1.1 jmmv } 309 1.1 jmmv fds_body() 310 1.1 jmmv { 311 1.1 jmmv create_helper fds 312 1.1 jmmv 313 1.1 jmmv atf_check -s eq:0 \ 314 1.1 jmmv -o match:'^tc-so:msg1 to stdout$' \ 315 1.1 jmmv -o match:'^tc-so:msg2 to stdout$' \ 316 1.1 jmmv -o match:'^tc-se:msg1 to stderr$' \ 317 1.1 jmmv -o match:'^tc-se:msg2 to stderr$' \ 318 1.1 jmmv -e empty atf-run 319 1.1 jmmv } 320 1.1 jmmv 321 1.1 jmmv atf_test_case mux_streams 322 1.1 jmmv mux_streams_head() 323 1.1 jmmv { 324 1.1 jmmv atf_set "descr" "Tests for a race condition in stream multiplexing" 325 1.1 jmmv } 326 1.1 jmmv mux_streams_body() 327 1.1 jmmv { 328 1.1 jmmv create_helper mux_streams 329 1.1 jmmv 330 1.1 jmmv for i in 1 2 3 4 5; do 331 1.1 jmmv echo "Attempt ${i}" 332 1.1 jmmv atf_check -s eq:0 -o match:'stdout 9999' -o match:'stderr 9999' atf-run 333 1.1 jmmv done 334 1.1 jmmv } 335 1.1 jmmv 336 1.1 jmmv atf_test_case expect 337 1.1 jmmv expect_head() 338 1.1 jmmv { 339 1.1 jmmv atf_set "descr" "Tests the processing of test case results and the" \ 340 1.1 jmmv "expect features" 341 1.1 jmmv } 342 1.1 jmmv expect_body() 343 1.1 jmmv { 344 1.1 jmmv ln -s "$(atf_get_srcdir)/expect_helpers" . 345 1.1 jmmv create_atffile expect_helpers 346 1.1 jmmv 347 1.1 jmmv atf_check -s eq:1 \ 348 1.1 jmmv -o match:'death_and_exit, expected_death' \ 349 1.1 jmmv -o match:'death_and_signal, expected_death' \ 350 1.1 jmmv -o match:'death_but_pass, failed' \ 351 1.1 jmmv -o match:'exit_any_and_exit, expected_exit' \ 352 1.1 jmmv -o match:'exit_but_pass, failed' \ 353 1.1 jmmv -o match:'exit_code_and_exit, expected_exit' \ 354 1.1 jmmv -o match:'fail_and_fail_check, expected_failure' \ 355 1.1 jmmv -o match:'fail_and_fail_requirement, expected_failure' \ 356 1.1 jmmv -o match:'fail_but_pass, failed' \ 357 1.1 jmmv -o match:'pass_and_pass, passed' \ 358 1.1 jmmv -o match:'pass_but_fail_check, failed' \ 359 1.1 jmmv -o match:'pass_but_fail_requirement, failed' \ 360 1.1 jmmv -o match:'signal_any_and_signal, expected_signal' \ 361 1.1 jmmv -o match:'signal_but_pass, failed' \ 362 1.1 jmmv -o match:'signal_no_and_signal, expected_signal' \ 363 1.1 jmmv -o match:'timeout_and_hang, expected_timeout' \ 364 1.1 jmmv -o match:'timeout_but_pass, failed' \ 365 1.1 jmmv -e empty atf-run 366 1.1 jmmv } 367 1.1 jmmv 368 1.1 jmmv atf_test_case missing_results 369 1.1 jmmv missing_results_head() 370 1.1 jmmv { 371 1.1 jmmv atf_set "descr" "Ensures that atf-run correctly handles test cases that " \ 372 1.1 jmmv "do not create the results file" 373 1.1 jmmv } 374 1.1 jmmv missing_results_body() 375 1.1 jmmv { 376 1.1 jmmv create_helper_stdin helper 1 <<EOF 377 1.1 jmmv test -f \${resfile} && echo "resfile found" 378 1.1 jmmv exit 0 379 1.1 jmmv EOF 380 1.1 jmmv chmod +x helper 381 1.1 jmmv 382 1.1 jmmv create_atffile helper 383 1.1 jmmv 384 1.1 jmmv re='^tc-end: [0-9][0-9]*\.[0-9]*, tc1,' 385 1.1 jmmv atf_check -s eq:1 \ 386 1.1 jmmv -o match:"${re} failed,.*failed to create" \ 387 1.1 jmmv -o not-match:'resfile found' \ 388 1.1 jmmv -e empty atf-run 389 1.1 jmmv } 390 1.1 jmmv 391 1.1 jmmv atf_test_case broken_results 392 1.1 jmmv broken_results_head() 393 1.1 jmmv { 394 1.1 jmmv atf_set "descr" "Ensures that atf-run reports test programs that" \ 395 1.1 jmmv "provide a bogus results output as broken programs" 396 1.1 jmmv } 397 1.1 jmmv broken_results_body() 398 1.1 jmmv { 399 1.1 jmmv # We produce two errors from the header to ensure that the parse 400 1.1 jmmv # errors are printed on a single line on the output file. Printing 401 1.1 jmmv # them on separate lines would be incorrect. 402 1.1 jmmv create_helper_stdin helper 1 <<EOF 403 1.1 jmmv echo 'line 1' >\${resfile} 404 1.1 jmmv echo 'line 2' >>\${resfile} 405 1.1 jmmv exit 0 406 1.1 jmmv EOF 407 1.1 jmmv chmod +x helper 408 1.1 jmmv 409 1.1 jmmv create_atffile helper 410 1.1 jmmv 411 1.1 jmmv re='^tc-end: [0-9][0-9]*\.[0-9]*, tc1,' 412 1.1 jmmv atf_check -s eq:1 -o match:"${re} .*line 1.*line 2" -e empty atf-run 413 1.1 jmmv } 414 1.1 jmmv 415 1.1 jmmv atf_test_case broken_tp_list 416 1.1 jmmv broken_tp_list_head() 417 1.1 jmmv { 418 1.1 jmmv atf_set "descr" "Ensures that atf-run reports test programs that" \ 419 1.1 jmmv "provide a bogus test case list" 420 1.1 jmmv } 421 1.1 jmmv broken_tp_list_body() 422 1.1 jmmv { 423 1.1 jmmv cat >helper <<EOF 424 1.1 jmmv #! $(atf-config -t atf_shell) 425 1.1 jmmv while [ \${#} -gt 0 ]; do 426 1.1 jmmv if [ \${1} = -l ]; then 427 1.1 jmmv echo 'Content-Type: application/X-atf-tp; version="1"' 428 1.1 jmmv echo 429 1.1 jmmv echo 'foo: bar' 430 1.1 jmmv exit 0 431 1.1 jmmv else 432 1.1 jmmv shift 433 1.1 jmmv fi 434 1.1 jmmv done 435 1.1 jmmv exit 0 436 1.1 jmmv EOF 437 1.1 jmmv chmod +x helper 438 1.1 jmmv 439 1.1 jmmv create_atffile helper 440 1.1 jmmv 441 1.1 jmmv re='^tp-end: [0-9][0-9]*\.[0-9]*, helper,' 442 1.1 jmmv re="${re} Invalid format for test case list:.*First property.*ident" 443 1.1 jmmv atf_check -s eq:1 -o match:"${re}" -e empty atf-run 444 1.1 jmmv } 445 1.1 jmmv 446 1.1 jmmv atf_test_case zero_tcs 447 1.1 jmmv zero_tcs_head() 448 1.1 jmmv { 449 1.1 jmmv atf_set "descr" "Ensures that atf-run reports test programs without" \ 450 1.1 jmmv "test cases as errors" 451 1.1 jmmv } 452 1.1 jmmv zero_tcs_body() 453 1.1 jmmv { 454 1.1 jmmv create_helper_stdin helper 0 <<EOF 455 1.1 jmmv echo 'Content-Type: application/X-atf-tp; version="1"' 456 1.1 jmmv echo 457 1.1 jmmv exit 1 458 1.1 jmmv EOF 459 1.1 jmmv chmod +x helper 460 1.1 jmmv 461 1.1 jmmv create_atffile helper 462 1.1 jmmv 463 1.1 jmmv re='^tp-end: [0-9][0-9]*\.[0-9]*, helper,' 464 1.1 jmmv atf_check -s eq:1 \ 465 1.1 jmmv -o match:"${re} .*Invalid format for test case list" \ 466 1.1 jmmv -e empty atf-run 467 1.1 jmmv } 468 1.1 jmmv 469 1.1 jmmv atf_test_case exit_codes 470 1.1 jmmv exit_codes_head() 471 1.1 jmmv { 472 1.1 jmmv atf_set "descr" "Ensures that atf-run reports bogus exit codes for" \ 473 1.1 jmmv "programs correctly" 474 1.1 jmmv } 475 1.1 jmmv exit_codes_body() 476 1.1 jmmv { 477 1.1 jmmv create_helper_stdin helper 1 <<EOF 478 1.1 jmmv echo "failed: Yes, it failed" >\${resfile} 479 1.1 jmmv exit 0 480 1.1 jmmv EOF 481 1.1 jmmv chmod +x helper 482 1.1 jmmv 483 1.1 jmmv create_atffile helper 484 1.1 jmmv 485 1.1 jmmv re='^tc-end: [0-9][0-9]*\.[0-9]*, tc1,' 486 1.1 jmmv atf_check -s eq:1 \ 487 1.1 jmmv -o match:"${re} .*exited successfully.*reported failure" \ 488 1.1 jmmv -e empty atf-run 489 1.1 jmmv } 490 1.1 jmmv 491 1.1 jmmv atf_test_case signaled 492 1.1 jmmv signaled_head() 493 1.1 jmmv { 494 1.1 jmmv atf_set "descr" "Ensures that atf-run reports test program's crashes" \ 495 1.1 jmmv "correctly regardless of their actual results" 496 1.1 jmmv } 497 1.1 jmmv signaled_body() 498 1.1 jmmv { 499 1.1 jmmv create_helper_stdin helper 2 <<EOF 500 1.1 jmmv echo "passed" >\${resfile} 501 1.1 jmmv case \${testcase} in 502 1.1 jmmv tc1) ;; 503 1.1 jmmv tc2) echo "Killing myself!" ; kill -9 \$\$ ;; 504 1.1 jmmv esac 505 1.1 jmmv EOF 506 1.1 jmmv chmod +x helper 507 1.1 jmmv 508 1.1 jmmv create_atffile helper 509 1.1 jmmv 510 1.1 jmmv re='^tc-end: [0-9][0-9]*\.[0-9]*, tc2,' 511 1.1 jmmv atf_check -s eq:1 -o match:"${re} .*received signal 9" \ 512 1.1 jmmv -e empty atf-run 513 1.1 jmmv } 514 1.1 jmmv 515 1.1 jmmv atf_test_case hooks 516 1.1 jmmv hooks_head() 517 1.1 jmmv { 518 1.1 jmmv atf_set "descr" "Checks that the default hooks work and that they" \ 519 1.1 jmmv "can be overriden by the user" 520 1.1 jmmv } 521 1.1 jmmv hooks_body() 522 1.1 jmmv { 523 1.1 jmmv cp $(atf_get_srcdir)/pass_helper helper 524 1.1 jmmv create_atffile helper 525 1.1 jmmv 526 1.1 jmmv mkdir atf 527 1.1 jmmv mkdir .atf 528 1.1 jmmv 529 1.1 jmmv echo "Checking default hooks" 530 1.1 jmmv atf_check -s eq:0 -o match:'^info: time.start, ' \ 531 1.1 jmmv -o match:'^info: time.end, ' -e empty -x \ 532 1.1 jmmv "ATF_CONFDIR=$(pwd)/atf atf-run" 533 1.1 jmmv 534 1.1 jmmv echo "Checking the system-wide info_start hook" 535 1.1 jmmv cat >atf/atf-run.hooks <<EOF 536 1.1 jmmv info_start_hook() 537 1.1 jmmv { 538 1.1 jmmv atf_tps_writer_info "test" "sw value" 539 1.1 jmmv } 540 1.1 jmmv EOF 541 1.1 jmmv atf_check -s eq:0 \ 542 1.1 jmmv -o match:'^info: test, sw value' \ 543 1.1 jmmv -o not-match:'^info: time.start, ' \ 544 1.1 jmmv -o match:'^info: time.end, ' \ 545 1.1 jmmv -e empty -x \ 546 1.1 jmmv "ATF_CONFDIR=$(pwd)/atf atf-run" 547 1.1 jmmv 548 1.1 jmmv echo "Checking the user-specific info_start hook" 549 1.1 jmmv cat >.atf/atf-run.hooks <<EOF 550 1.1 jmmv info_start_hook() 551 1.1 jmmv { 552 1.1 jmmv atf_tps_writer_info "test" "user value" 553 1.1 jmmv } 554 1.1 jmmv EOF 555 1.1 jmmv atf_check -s eq:0 \ 556 1.1 jmmv -o match:'^info: test, user value' \ 557 1.1 jmmv -o not-match:'^info: time.start, ' \ 558 1.1 jmmv -o match:'^info: time.end, ' \ 559 1.1 jmmv -e empty -x \ 560 1.1 jmmv "ATF_CONFDIR=$(pwd)/atf atf-run" 561 1.1 jmmv 562 1.1 jmmv rm atf/atf-run.hooks 563 1.1 jmmv rm .atf/atf-run.hooks 564 1.1 jmmv 565 1.1 jmmv echo "Checking the system-wide info_end hook" 566 1.1 jmmv cat >atf/atf-run.hooks <<EOF 567 1.1 jmmv info_end_hook() 568 1.1 jmmv { 569 1.1 jmmv atf_tps_writer_info "test" "sw value" 570 1.1 jmmv } 571 1.1 jmmv EOF 572 1.1 jmmv atf_check -s eq:0 \ 573 1.1 jmmv -o match:'^info: time.start, ' \ 574 1.1 jmmv -o not-match:'^info: time.end, ' \ 575 1.1 jmmv -o match:'^info: test, sw value' \ 576 1.1 jmmv -e empty -x \ 577 1.1 jmmv "ATF_CONFDIR=$(pwd)/atf atf-run" 578 1.1 jmmv 579 1.1 jmmv echo "Checking the user-specific info_end hook" 580 1.1 jmmv cat >.atf/atf-run.hooks <<EOF 581 1.1 jmmv info_end_hook() 582 1.1 jmmv { 583 1.1 jmmv atf_tps_writer_info "test" "user value" 584 1.1 jmmv } 585 1.1 jmmv EOF 586 1.1 jmmv atf_check -s eq:0 \ 587 1.1 jmmv -o match:'^info: time.start, ' \ 588 1.1 jmmv -o not-match:'^info: time.end, ' \ 589 1.1 jmmv -o match:'^info: test, user value' \ 590 1.1 jmmv -e empty -x \ 591 1.1 jmmv "ATF_CONFDIR=$(pwd)/atf atf-run" 592 1.1 jmmv } 593 1.1 jmmv 594 1.1 jmmv atf_test_case isolation_env 595 1.1 jmmv isolation_env_head() 596 1.1 jmmv { 597 1.1 jmmv atf_set "descr" "Tests that atf-run sets a set of environment variables" \ 598 1.1 jmmv "to known sane values" 599 1.1 jmmv } 600 1.1 jmmv isolation_env_body() 601 1.1 jmmv { 602 1.1 jmmv undef_vars="LANG LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES LC_MONETARY \ 603 1.1 jmmv LC_NUMERIC LC_TIME" 604 1.1 jmmv def_vars="HOME TZ" 605 1.1 jmmv 606 1.1 jmmv mangleenv="env" 607 1.1 jmmv for v in ${undef_vars} ${def_vars}; do 608 1.1 jmmv mangleenv="${mangleenv} ${v}=bogus-value" 609 1.1 jmmv done 610 1.1 jmmv 611 1.1 jmmv create_helper env_list 612 1.1 jmmv create_atffile helper 613 1.1 jmmv 614 1.1 jmmv # We must ignore stderr in this call (instead of specifying -e empty) 615 1.1 jmmv # because, when atf-run invokes the shell to run the hooks, we may get 616 1.1 jmmv # error messages about an invalid locale. This happens, at least, when 617 1.1 jmmv # the shell is bash 4.x. 618 1.1 jmmv atf_check -s eq:0 -o save:stdout -e ignore ${mangleenv} atf-run helper 619 1.1 jmmv 620 1.1 jmmv for v in ${undef_vars}; do 621 1.1 jmmv atf_check -s eq:1 -o empty -e empty grep "^tc-so:${v}=" stdout 622 1.1 jmmv done 623 1.1 jmmv 624 1.1 jmmv for v in ${def_vars}; do 625 1.1 jmmv atf_check -s eq:0 -o ignore -e empty grep "^tc-so:${v}=" stdout 626 1.1 jmmv done 627 1.1 jmmv 628 1.1 jmmv atf_check -s eq:0 -o ignore -e empty grep "^tc-so:TZ=UTC" stdout 629 1.1 jmmv } 630 1.1 jmmv 631 1.1 jmmv atf_test_case isolation_home 632 1.1 jmmv isolation_home_head() 633 1.1 jmmv { 634 1.1 jmmv atf_set "descr" "Tests that atf-run sets HOME to a sane and valid value" 635 1.1 jmmv } 636 1.1 jmmv isolation_home_body() 637 1.1 jmmv { 638 1.1 jmmv create_helper env_home 639 1.1 jmmv create_atffile helper 640 1.1 jmmv atf_check -s eq:0 -o ignore -e ignore env HOME=foo atf-run helper 641 1.1 jmmv } 642 1.1 jmmv 643 1.1 jmmv atf_test_case isolation_stdin 644 1.1 jmmv isolation_stdin_head() 645 1.1 jmmv { 646 1.1 jmmv atf_set "descr" "Tests that atf-run nullifies the stdin of test cases" 647 1.1 jmmv } 648 1.1 jmmv isolation_stdin_body() 649 1.1 jmmv { 650 1.1 jmmv create_helper read_stdin 651 1.1 jmmv create_atffile helper 652 1.1 jmmv atf_check -s eq:0 -o ignore -e ignore -x 'echo hello world | atf-run helper' 653 1.1 jmmv } 654 1.1 jmmv 655 1.1 jmmv atf_test_case isolation_umask 656 1.1 jmmv isolation_umask_head() 657 1.1 jmmv { 658 1.1 jmmv atf_set "descr" "Tests that atf-run sets the umask to a known value" 659 1.1 jmmv } 660 1.1 jmmv isolation_umask_body() 661 1.1 jmmv { 662 1.1 jmmv create_helper umask 663 1.1 jmmv create_atffile helper 664 1.1 jmmv 665 1.1 jmmv atf_check -s eq:0 -o match:'umask: 0022' -e ignore -x \ 666 1.1 jmmv "umask 0000 && atf-run helper" 667 1.1 jmmv } 668 1.1 jmmv 669 1.1 jmmv atf_test_case cleanup_pass 670 1.1 jmmv cleanup_pass_head() 671 1.1 jmmv { 672 1.1 jmmv atf_set "descr" "Tests that atf-run calls the cleanup routine of the test" \ 673 1.1 jmmv "case when the test case result is passed" 674 1.1 jmmv } 675 1.1 jmmv cleanup_pass_body() 676 1.1 jmmv { 677 1.1 jmmv create_helper cleanup_states 678 1.1 jmmv create_atffile helper 679 1.1 jmmv 680 1.1 jmmv atf_check -s eq:0 -o match:'cleanup_states, passed' -e ignore atf-run \ 681 1.1 jmmv -v state=pass -v statedir=$(pwd) helper 682 1.1 jmmv test -f to-stay || atf_fail "Test case body did not run correctly" 683 1.1 jmmv if [ -f to-delete ]; then 684 1.1 jmmv atf_fail "Test case cleanup did not run correctly" 685 1.1 jmmv fi 686 1.1 jmmv } 687 1.1 jmmv 688 1.1 jmmv atf_test_case cleanup_fail 689 1.1 jmmv cleanup_fail_head() 690 1.1 jmmv { 691 1.1 jmmv atf_set "descr" "Tests that atf-run calls the cleanup routine of the test" \ 692 1.1 jmmv "case when the test case result is failed" 693 1.1 jmmv } 694 1.1 jmmv cleanup_fail_body() 695 1.1 jmmv { 696 1.1 jmmv create_helper cleanup_states 697 1.1 jmmv create_atffile helper 698 1.1 jmmv 699 1.1 jmmv atf_check -s eq:1 -o match:'cleanup_states, failed' -e ignore atf-run \ 700 1.1 jmmv -v state=fail -v statedir=$(pwd) helper 701 1.1 jmmv test -f to-stay || atf_fail "Test case body did not run correctly" 702 1.1 jmmv if [ -f to-delete ]; then 703 1.1 jmmv atf_fail "Test case cleanup did not run correctly" 704 1.1 jmmv fi 705 1.1 jmmv } 706 1.1 jmmv 707 1.1 jmmv atf_test_case cleanup_skip 708 1.1 jmmv cleanup_skip_head() 709 1.1 jmmv { 710 1.1 jmmv atf_set "descr" "Tests that atf-run calls the cleanup routine of the test" \ 711 1.1 jmmv "case when the test case result is skipped" 712 1.1 jmmv } 713 1.1 jmmv cleanup_skip_body() 714 1.1 jmmv { 715 1.1 jmmv create_helper cleanup_states 716 1.1 jmmv create_atffile helper 717 1.1 jmmv 718 1.1 jmmv atf_check -s eq:0 -o match:'cleanup_states, skipped' -e ignore atf-run \ 719 1.1 jmmv -v state=skip -v statedir=$(pwd) helper 720 1.1 jmmv test -f to-stay || atf_fail "Test case body did not run correctly" 721 1.1 jmmv if [ -f to-delete ]; then 722 1.1 jmmv atf_fail "Test case cleanup did not run correctly" 723 1.1 jmmv fi 724 1.1 jmmv } 725 1.1 jmmv 726 1.1 jmmv atf_test_case cleanup_curdir 727 1.1 jmmv cleanup_curdir_head() 728 1.1 jmmv { 729 1.1 jmmv atf_set "descr" "Tests that atf-run calls the cleanup routine in the same" \ 730 1.1 jmmv "work directory as the body so that they can share data" 731 1.1 jmmv } 732 1.1 jmmv cleanup_curdir_body() 733 1.1 jmmv { 734 1.1 jmmv create_helper cleanup_curdir 735 1.1 jmmv create_atffile helper 736 1.1 jmmv 737 1.1 jmmv atf_check -s eq:0 -o match:'cleanup_curdir, passed' \ 738 1.1 jmmv -o match:'Old value: 1234' -e ignore atf-run helper 739 1.1 jmmv } 740 1.1 jmmv 741 1.1 jmmv atf_test_case cleanup_signal 742 1.1 jmmv cleanup_signal_head() 743 1.1 jmmv { 744 1.1 jmmv atf_set "descr" "Tests that atf-run calls the cleanup routine if it gets" \ 745 1.1 jmmv "a termination signal while running the body" 746 1.1 jmmv } 747 1.1 jmmv cleanup_signal_body() 748 1.1 jmmv { 749 1.1 jmmv : # TODO: Write this. 750 1.1 jmmv } 751 1.1 jmmv 752 1.1 jmmv atf_test_case cleanup_mount 753 1.1 jmmv cleanup_mount_head() 754 1.1 jmmv { 755 1.1 jmmv atf_set "descr" "Tests that the removal algorithm does not cross" \ 756 1.1 jmmv "mount points" 757 1.1 jmmv atf_set "require.user" "root" 758 1.1 jmmv } 759 1.1 jmmv cleanup_mount_body() 760 1.1 jmmv { 761 1.1 jmmv ROOT="$(pwd)/root"; export ROOT 762 1.1 jmmv 763 1.1 jmmv create_mount_helper helper <<EOF 764 1.1 jmmv echo \$(pwd) >\${ROOT} 765 1.1 jmmv mkdir foo 766 1.1 jmmv mkdir foo/bar 767 1.1 jmmv mkdir foo/bar/mnt 768 1.1 jmmv do_mount foo/bar/mnt 769 1.1 jmmv mkdir foo/baz 770 1.1 jmmv do_mount foo/baz 771 1.1 jmmv mkdir foo/baz/foo 772 1.1 jmmv mkdir foo/baz/foo/bar 773 1.1 jmmv do_mount foo/baz/foo/bar 774 1.1 jmmv EOF 775 1.1 jmmv create_atffile helper 776 1.1 jmmv chmod +x helper 777 1.1 jmmv 778 1.1 jmmv platform=$(uname) 779 1.1 jmmv case ${platform} in 780 1.1 jmmv Linux|FreeBSD|NetBSD|SunOS) 781 1.1 jmmv ;; 782 1.1 jmmv *) 783 1.1 jmmv # XXX Possibly specify in meta-data too. 784 1.1 jmmv atf_skip "Test unimplemented in this platform (${platform})" 785 1.1 jmmv ;; 786 1.1 jmmv esac 787 1.1 jmmv 788 1.1 jmmv atf_check -s eq:0 -o match:"main, passed" -e ignore atf-run helper 789 1.1 jmmv mount | grep $(cat root) && atf_fail "Some file systems remain mounted" 790 1.1 jmmv atf_check -s eq:1 -o empty -e empty test -d $(cat root)/foo 791 1.1 jmmv } 792 1.1 jmmv 793 1.1 jmmv atf_test_case cleanup_symlink 794 1.1 jmmv cleanup_symlink_head() 795 1.1 jmmv { 796 1.1 jmmv atf_set "descr" "Tests that the removal algorithm does not follow" \ 797 1.1 jmmv "symlinks, which may live in another device and thus" \ 798 1.1 jmmv "be treated as mount points" 799 1.1 jmmv atf_set "require.user" "root" 800 1.1 jmmv } 801 1.1 jmmv cleanup_symlink_body() 802 1.1 jmmv { 803 1.1 jmmv ROOT="$(pwd)/root"; export ROOT 804 1.1 jmmv 805 1.1 jmmv create_mount_helper helper <<EOF 806 1.1 jmmv echo \$(pwd) >\${ROOT} 807 1.1 jmmv atf_check -s eq:0 -o empty -e empty mkdir foo 808 1.1 jmmv atf_check -s eq:0 -o empty -e empty mkdir foo/bar 809 1.1 jmmv do_mount foo/bar 810 1.1 jmmv atf_check -s eq:0 -o empty -e empty touch a 811 1.1 jmmv atf_check -s eq:0 -o empty -e empty ln -s "\$(pwd)/a" foo/bar 812 1.1 jmmv EOF 813 1.1 jmmv create_atffile helper 814 1.1 jmmv chmod +x helper 815 1.1 jmmv 816 1.1 jmmv platform=$(uname) 817 1.1 jmmv case ${platform} in 818 1.1 jmmv Linux|FreeBSD|NetBSD|SunOS) 819 1.1 jmmv ;; 820 1.1 jmmv *) 821 1.1 jmmv # XXX Possibly specify in meta-data too. 822 1.1 jmmv atf_skip "Test unimplemented in this platform (${platform})" 823 1.1 jmmv ;; 824 1.1 jmmv esac 825 1.1 jmmv 826 1.1 jmmv atf_check -s eq:0 -o match:"main, passed" -e ignore atf-run helper 827 1.1 jmmv mount | grep $(cat root) && atf_fail "Some file systems remain mounted" 828 1.1 jmmv atf_check -s eq:1 -o empty -e empty test -d $(cat root)/foo 829 1.1 jmmv } 830 1.1 jmmv 831 1.1 jmmv atf_test_case require_arch 832 1.1 jmmv require_arch_head() 833 1.1 jmmv { 834 1.1 jmmv atf_set "descr" "Tests that atf-run validates the require.arch property" 835 1.1 jmmv } 836 1.1 jmmv require_arch_body() 837 1.1 jmmv { 838 1.1 jmmv create_helper require_arch 839 1.1 jmmv create_atffile helper 840 1.1 jmmv 841 1.1 jmmv echo "Checking for the real architecture" 842 1.1 jmmv arch=$(atf-config -t atf_arch) 843 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ 844 1.1 jmmv -v arch="${arch}" helper 845 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ 846 1.1 jmmv -v arch="foo ${arch}" helper 847 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ 848 1.1 jmmv -v arch="${arch} foo" helper 849 1.1 jmmv 850 1.1 jmmv echo "Checking for a fictitious architecture" 851 1.1 jmmv arch=fictitious 852 1.1 jmmv export ATF_ARCH=fictitious 853 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ 854 1.1 jmmv -v arch="${arch}" helper 855 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ 856 1.1 jmmv -v arch="foo ${arch}" helper 857 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ 858 1.1 jmmv -v arch="${arch} foo" helper 859 1.1 jmmv 860 1.1 jmmv echo "Triggering some failures" 861 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, skipped, .*foo.*architecture" \ 862 1.1 jmmv -e ignore atf-run -v arch="foo" helper 863 1.1 jmmv atf_check -s eq:0 \ 864 1.1 jmmv -o match:"${TESTCASE}, skipped, .*foo bar.*architectures" -e ignore \ 865 1.1 jmmv atf-run -v arch="foo bar" helper 866 1.1 jmmv atf_check -s eq:0 \ 867 1.1 jmmv -o match:"${TESTCASE}, skipped, .*fictitiousxxx.*architecture" \ 868 1.1 jmmv -e ignore atf-run -v arch="${arch}xxx" helper 869 1.1 jmmv } 870 1.1 jmmv 871 1.1 jmmv atf_test_case require_config 872 1.1 jmmv require_config_head() 873 1.1 jmmv { 874 1.1 jmmv atf_set "descr" "Tests that atf-run validates the require.config property" 875 1.1 jmmv } 876 1.1 jmmv require_config_body() 877 1.1 jmmv { 878 1.1 jmmv create_helper require_config 879 1.1 jmmv create_atffile helper 880 1.1 jmmv 881 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, skipped, .*var1.*not defined" \ 882 1.1 jmmv -e ignore atf-run helper 883 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, skipped, .*var2.*not defined" \ 884 1.1 jmmv -e ignore atf-run -v var1=foo helper 885 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ 886 1.1 jmmv -v var1=a -v var2=' ' helper 887 1.1 jmmv } 888 1.1 jmmv 889 1.1 jmmv atf_test_case require_files 890 1.1 jmmv require_files_head() 891 1.1 jmmv { 892 1.1 jmmv atf_set "descr" "Tests that atf-run validates the require.files property" 893 1.1 jmmv } 894 1.1 jmmv require_files_body() 895 1.1 jmmv { 896 1.1 jmmv create_helper require_files 897 1.1 jmmv create_atffile helper 898 1.1 jmmv 899 1.1 jmmv touch i-exist 900 1.1 jmmv 901 1.1 jmmv echo "Checking absolute paths" 902 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ 903 1.1 jmmv -v files='/bin/cp' helper 904 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ 905 1.1 jmmv -v files="$(pwd)/i-exist" helper 906 1.1 jmmv atf_check -s eq:0 \ 907 1.1 jmmv -o match:"${TESTCASE}, skipped, .*/dont-exist" \ 908 1.1 jmmv -e ignore atf-run -v files="$(pwd)/i-exist $(pwd)/dont-exist" helper 909 1.1 jmmv 910 1.1 jmmv echo "Checking that relative paths are not allowed" 911 1.1 jmmv atf_check -s eq:1 \ 912 1.1 jmmv -o match:"${TESTCASE}, failed, Relative paths.*not allowed.*hello" \ 913 1.1 jmmv -e ignore atf-run -v files='hello' helper 914 1.1 jmmv atf_check -s eq:1 \ 915 1.1 jmmv -o match:"${TESTCASE}, failed, Relative paths.*not allowed.*a/b" \ 916 1.1 jmmv -e ignore atf-run -v files='a/b' helper 917 1.1 jmmv } 918 1.1 jmmv 919 1.1 jmmv atf_test_case require_machine 920 1.1 jmmv require_machine_head() 921 1.1 jmmv { 922 1.1 jmmv atf_set "descr" "Tests that atf-run validates the require.machine property" 923 1.1 jmmv } 924 1.1 jmmv require_machine_body() 925 1.1 jmmv { 926 1.1 jmmv create_helper require_machine 927 1.1 jmmv create_atffile helper 928 1.1 jmmv 929 1.1 jmmv echo "Checking for the real machine type" 930 1.1 jmmv machine=$(atf-config -t atf_machine) 931 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ 932 1.1 jmmv -v machine="${machine}" helper 933 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ 934 1.1 jmmv -v machine="foo ${machine}" helper 935 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ 936 1.1 jmmv -v machine="${machine} foo" helper 937 1.1 jmmv 938 1.1 jmmv echo "Checking for a fictitious machine type" 939 1.1 jmmv machine=fictitious 940 1.1 jmmv export ATF_MACHINE=fictitious 941 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ 942 1.1 jmmv -v machine="${machine}" helper 943 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ 944 1.1 jmmv -v machine="foo ${machine}" helper 945 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ 946 1.1 jmmv -v machine="${machine} foo" helper 947 1.1 jmmv 948 1.1 jmmv echo "Triggering some failures" 949 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, skipped, .*foo.*machine type" \ 950 1.1 jmmv -e ignore atf-run -v machine="foo" helper 951 1.1 jmmv atf_check -s eq:0 \ 952 1.1 jmmv -o match:"${TESTCASE}, skipped, .*foo bar.*machine types" -e ignore \ 953 1.1 jmmv atf-run -v machine="foo bar" helper 954 1.1 jmmv atf_check -s eq:0 \ 955 1.1 jmmv -o match:"${TESTCASE}, skipped, .*fictitiousxxx.*machine type" \ 956 1.1 jmmv -e ignore atf-run -v machine="${machine}xxx" helper 957 1.1 jmmv } 958 1.1 jmmv 959 1.1 jmmv atf_test_case require_progs 960 1.1 jmmv require_progs_head() 961 1.1 jmmv { 962 1.1 jmmv atf_set "descr" "Tests that atf-run validates the require.progs property" 963 1.1 jmmv } 964 1.1 jmmv require_progs_body() 965 1.1 jmmv { 966 1.1 jmmv create_helper require_progs 967 1.1 jmmv create_atffile helper 968 1.1 jmmv 969 1.1 jmmv echo "Checking absolute paths" 970 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ 971 1.1 jmmv -v progs='/bin/cp' helper 972 1.1 jmmv atf_check -s eq:0 \ 973 1.1 jmmv -o match:"${TESTCASE}, skipped, .*/bin/__non-existent__.*PATH" \ 974 1.1 jmmv -e ignore atf-run -v progs='/bin/__non-existent__' helper 975 1.1 jmmv 976 1.1 jmmv echo "Checking that relative paths are not allowed" 977 1.1 jmmv atf_check -s eq:1 \ 978 1.1 jmmv -o match:"${TESTCASE}, failed, Relative paths.*not allowed.*bin/cp" \ 979 1.1 jmmv -e ignore atf-run -v progs='bin/cp' helper 980 1.1 jmmv 981 1.1 jmmv echo "Check plain file names, searching them in the PATH." 982 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ 983 1.1 jmmv -v progs='cp' helper 984 1.1 jmmv atf_check -s eq:0 \ 985 1.1 jmmv -o match:"${TESTCASE}, skipped, .*__non-existent__.*PATH" -e ignore \ 986 1.1 jmmv atf-run -v progs='__non-existent__' helper 987 1.1 jmmv } 988 1.1 jmmv 989 1.1 jmmv atf_test_case require_user_root 990 1.1 jmmv require_user_root_head() 991 1.1 jmmv { 992 1.1 jmmv atf_set "descr" "Tests that atf-run validates the require.user property" \ 993 1.1 jmmv "when it is set to 'root'" 994 1.1 jmmv } 995 1.1 jmmv require_user_root_body() 996 1.1 jmmv { 997 1.1 jmmv create_helper require_user 998 1.1 jmmv create_atffile helper 999 1.1 jmmv 1000 1.1 jmmv if [ $(id -u) -eq 0 ]; then 1001 1.1 jmmv exp=passed 1002 1.1 jmmv else 1003 1.1 jmmv exp=skipped 1004 1.1 jmmv fi 1005 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, ${exp}" -e ignore atf-run \ 1006 1.1 jmmv -v user=root helper 1007 1.1 jmmv } 1008 1.1 jmmv 1009 1.1 jmmv atf_test_case require_user_unprivileged 1010 1.1 jmmv require_user_unprivileged_head() 1011 1.1 jmmv { 1012 1.1 jmmv atf_set "descr" "Tests that atf-run validates the require.user property" \ 1013 1.1 jmmv "when it is set to 'root'" 1014 1.1 jmmv } 1015 1.1 jmmv require_user_unprivileged_body() 1016 1.1 jmmv { 1017 1.1 jmmv create_helper require_user 1018 1.1 jmmv create_atffile helper 1019 1.1 jmmv 1020 1.1 jmmv if [ $(id -u) -eq 0 ]; then 1021 1.1 jmmv exp=skipped 1022 1.1 jmmv else 1023 1.1 jmmv exp=passed 1024 1.1 jmmv fi 1025 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, ${exp}" -e ignore atf-run \ 1026 1.1 jmmv -v user=unprivileged helper 1027 1.1 jmmv } 1028 1.1 jmmv 1029 1.1 jmmv atf_test_case require_user_bad 1030 1.1 jmmv require_user_bad_head() 1031 1.1 jmmv { 1032 1.1 jmmv atf_set "descr" "Tests that atf-run validates the require.user property" \ 1033 1.1 jmmv "when it is set to 'root'" 1034 1.1 jmmv } 1035 1.1 jmmv require_user_bad_body() 1036 1.1 jmmv { 1037 1.1 jmmv create_helper require_user 1038 1.1 jmmv create_atffile helper 1039 1.1 jmmv 1040 1.1 jmmv atf_check -s eq:1 -o match:"${TESTCASE}, failed, Invalid value.*foobar" \ 1041 1.1 jmmv -e ignore atf-run -v user=foobar helper 1042 1.1 jmmv } 1043 1.1 jmmv 1044 1.1 jmmv atf_test_case timeout 1045 1.1 jmmv timeout_head() 1046 1.1 jmmv { 1047 1.1 jmmv atf_set "descr" "Tests that atf-run kills a test case that times out" 1048 1.1 jmmv } 1049 1.1 jmmv timeout_body() 1050 1.1 jmmv { 1051 1.1 jmmv create_helper timeout 1052 1.1 jmmv create_atffile helper 1053 1.1 jmmv 1054 1.1 jmmv atf_check -s eq:1 \ 1055 1.1 jmmv -o match:"${TESTCASE}, failed, .*timed out after 1 second" -e ignore \ 1056 1.1 jmmv atf-run -v statedir=$(pwd) helper 1057 1.1 jmmv if [ -f finished ]; then 1058 1.1 jmmv atf_fail "Test case was not killed after time out" 1059 1.1 jmmv fi 1060 1.1 jmmv } 1061 1.1 jmmv 1062 1.1 jmmv atf_test_case timeout_forkexit 1063 1.1 jmmv timeout_forkexit_head() 1064 1.1 jmmv { 1065 1.1 jmmv atf_set "descr" "Tests that atf-run deals gracefully with a test program" \ 1066 1.1 jmmv "that forks, exits, but the child process hangs" 1067 1.1 jmmv } 1068 1.1 jmmv timeout_forkexit_body() 1069 1.1 jmmv { 1070 1.1 jmmv create_helper timeout_forkexit 1071 1.1 jmmv create_atffile helper 1072 1.1 jmmv 1073 1.1 jmmv atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ 1074 1.1 jmmv -v statedir=$(pwd) helper 1075 1.1 jmmv test -f parent-finished || atf_fail "Parent did not exit as expected" 1076 1.1 jmmv test -f child-finished && atf_fail "Subprocess exited but it should have" \ 1077 1.1 jmmv "been forcibly terminated" || true 1078 1.1 jmmv } 1079 1.1 jmmv 1080 1.1 jmmv atf_test_case ignore_deprecated_use_fs 1081 1.1 jmmv ignore_deprecated_use_fs_head() 1082 1.1 jmmv { 1083 1.1 jmmv atf_set "descr" "Tests that atf-run ignores the deprecated use.fs property" 1084 1.1 jmmv } 1085 1.1 jmmv ignore_deprecated_use_fs_body() 1086 1.1 jmmv { 1087 1.1 jmmv create_helper use_fs 1088 1.1 jmmv create_atffile helper 1089 1.1 jmmv 1090 1.1 jmmv atf_check -s eq:0 -o ignore -e ignore atf-run helper 1091 1.1 jmmv } 1092 1.1 jmmv 1093 1.1 jmmv atf_init_test_cases() 1094 1.1 jmmv { 1095 1.1 jmmv atf_add_test_case no_warnings 1096 1.1 jmmv atf_add_test_case config 1097 1.1 jmmv atf_add_test_case vflag 1098 1.1 jmmv atf_add_test_case atffile 1099 1.1 jmmv atf_add_test_case atffile_recursive 1100 1.1 jmmv atf_add_test_case expect 1101 1.1 jmmv atf_add_test_case fds 1102 1.1 jmmv atf_add_test_case mux_streams 1103 1.1 jmmv atf_add_test_case missing_results 1104 1.1 jmmv atf_add_test_case broken_results 1105 1.1 jmmv atf_add_test_case broken_tp_list 1106 1.1 jmmv atf_add_test_case zero_tcs 1107 1.1 jmmv atf_add_test_case exit_codes 1108 1.1 jmmv atf_add_test_case signaled 1109 1.1 jmmv atf_add_test_case hooks 1110 1.1 jmmv atf_add_test_case isolation_env 1111 1.1 jmmv atf_add_test_case isolation_home 1112 1.1 jmmv atf_add_test_case isolation_stdin 1113 1.1 jmmv atf_add_test_case isolation_umask 1114 1.1 jmmv atf_add_test_case cleanup_pass 1115 1.1 jmmv atf_add_test_case cleanup_fail 1116 1.1 jmmv atf_add_test_case cleanup_skip 1117 1.1 jmmv atf_add_test_case cleanup_curdir 1118 1.1 jmmv atf_add_test_case cleanup_signal 1119 1.1 jmmv atf_add_test_case cleanup_mount 1120 1.1 jmmv atf_add_test_case cleanup_symlink 1121 1.1 jmmv atf_add_test_case require_arch 1122 1.1 jmmv atf_add_test_case require_config 1123 1.1 jmmv atf_add_test_case require_files 1124 1.1 jmmv atf_add_test_case require_machine 1125 1.1 jmmv atf_add_test_case require_progs 1126 1.1 jmmv atf_add_test_case require_user_root 1127 1.1 jmmv atf_add_test_case require_user_unprivileged 1128 1.1 jmmv atf_add_test_case require_user_bad 1129 1.1 jmmv atf_add_test_case timeout 1130 1.1 jmmv atf_add_test_case timeout_forkexit 1131 1.1 jmmv atf_add_test_case ignore_deprecated_use_fs 1132 1.1 jmmv } 1133 1.1 jmmv 1134 1.1 jmmv # vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 1135