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