Home | History | Annotate | Line # | Download | only in tools
      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