1*00b67f09SDavid van Moolenbroek# 2*00b67f09SDavid van Moolenbroek# Automated Testing Framework (atf) 3*00b67f09SDavid van Moolenbroek# 4*00b67f09SDavid van Moolenbroek# Copyright (c) 2008 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 Moolenbroek# The Atf_Check and Atf-Shell variables are set by atf-sh. 31*00b67f09SDavid van Moolenbroek 32*00b67f09SDavid van Moolenbroekh_pass() 33*00b67f09SDavid van Moolenbroek{ 34*00b67f09SDavid van Moolenbroek cmd="$1"; shift 35*00b67f09SDavid van Moolenbroek 36*00b67f09SDavid van Moolenbroek echo "Running [atf-check $*] against [${cmd}]" 37*00b67f09SDavid van Moolenbroek 38*00b67f09SDavid van Moolenbroek cat >script.sh <<EOF 39*00b67f09SDavid van Moolenbroek#! ${Atf_Shell} 40*00b67f09SDavid van Moolenbroek${cmd} 41*00b67f09SDavid van MoolenbroekEOF 42*00b67f09SDavid van Moolenbroek chmod +x script.sh 43*00b67f09SDavid van Moolenbroek 44*00b67f09SDavid van Moolenbroek if ! ${Atf_Check} "${@}" ./script.sh >tmp; then 45*00b67f09SDavid van Moolenbroek cat tmp 46*00b67f09SDavid van Moolenbroek atf_fail "atf-check failed" 47*00b67f09SDavid van Moolenbroek fi 48*00b67f09SDavid van Moolenbroek} 49*00b67f09SDavid van Moolenbroek 50*00b67f09SDavid van Moolenbroekh_fail() 51*00b67f09SDavid van Moolenbroek{ 52*00b67f09SDavid van Moolenbroek cmd="$1"; shift 53*00b67f09SDavid van Moolenbroek 54*00b67f09SDavid van Moolenbroek echo "Running [atf-check $*] against [${cmd}]" 55*00b67f09SDavid van Moolenbroek 56*00b67f09SDavid van Moolenbroek cat >script.sh <<EOF 57*00b67f09SDavid van Moolenbroek#! ${Atf_Shell} 58*00b67f09SDavid van Moolenbroek${cmd} 59*00b67f09SDavid van MoolenbroekEOF 60*00b67f09SDavid van Moolenbroek chmod +x script.sh 61*00b67f09SDavid van Moolenbroek 62*00b67f09SDavid van Moolenbroek if ${Atf_Check} "${@}" ./script.sh 2>tmp; then 63*00b67f09SDavid van Moolenbroek cat tmp 64*00b67f09SDavid van Moolenbroek atf_fail "atf-check succeeded but should fail" 65*00b67f09SDavid van Moolenbroek fi 66*00b67f09SDavid van Moolenbroek} 67*00b67f09SDavid van Moolenbroek 68*00b67f09SDavid van Moolenbroekatf_test_case sflag_eq_ne 69*00b67f09SDavid van Moolenbroeksflag_eq_ne_head() 70*00b67f09SDavid van Moolenbroek{ 71*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests for the -s option using the 'eq' and 'ne' qualifiers" 72*00b67f09SDavid van Moolenbroek} 73*00b67f09SDavid van Moolenbroeksflag_eq_ne_body() 74*00b67f09SDavid van Moolenbroek{ 75*00b67f09SDavid van Moolenbroek h_pass "true" -s eq:0 76*00b67f09SDavid van Moolenbroek h_pass "false" -s ne:0 77*00b67f09SDavid van Moolenbroek h_pass "exit 255" -s eq:255 78*00b67f09SDavid van Moolenbroek h_pass "exit 0" -s ne:255 79*00b67f09SDavid van Moolenbroek 80*00b67f09SDavid van Moolenbroek h_fail "exit 256" -s eq:256 81*00b67f09SDavid van Moolenbroek h_fail "exit -1" -s eq:-1 82*00b67f09SDavid van Moolenbroek h_fail "true" -s ne:256 83*00b67f09SDavid van Moolenbroek h_fail "true" -s ne:-1 84*00b67f09SDavid van Moolenbroek} 85*00b67f09SDavid van Moolenbroek 86*00b67f09SDavid van Moolenbroekatf_test_case sflag_exit 87*00b67f09SDavid van Moolenbroeksflag_exit_head() 88*00b67f09SDavid van Moolenbroek{ 89*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests for the -s option using the 'exit' qualifier" 90*00b67f09SDavid van Moolenbroek} 91*00b67f09SDavid van Moolenbroeksflag_exit_body() 92*00b67f09SDavid van Moolenbroek{ 93*00b67f09SDavid van Moolenbroek h_pass 'true' -s exit:0 94*00b67f09SDavid van Moolenbroek h_pass 'false' -s not-exit:0 95*00b67f09SDavid van Moolenbroek h_pass 'exit 255' -s exit:255 96*00b67f09SDavid van Moolenbroek h_pass 'exit 0' -s not-exit:255 97*00b67f09SDavid van Moolenbroek 98*00b67f09SDavid van Moolenbroek h_fail 'exit 256' -s exit:256 99*00b67f09SDavid van Moolenbroek h_fail 'exit -1' -s exit:-1 100*00b67f09SDavid van Moolenbroek h_fail 'true' -s not-exit:256 101*00b67f09SDavid van Moolenbroek h_fail 'true' -s not-exit:-1 102*00b67f09SDavid van Moolenbroek 103*00b67f09SDavid van Moolenbroek h_pass 'true' -s exit 104*00b67f09SDavid van Moolenbroek h_pass 'false' -s exit 105*00b67f09SDavid van Moolenbroek if ${Atf_Check} -s exit -x 'kill $$'; then 106*00b67f09SDavid van Moolenbroek atf_fail "Signal detected as clean exit" 107*00b67f09SDavid van Moolenbroek fi 108*00b67f09SDavid van Moolenbroek} 109*00b67f09SDavid van Moolenbroek 110*00b67f09SDavid van Moolenbroekatf_test_case sflag_ignore 111*00b67f09SDavid van Moolenbroeksflag_ignore_head() 112*00b67f09SDavid van Moolenbroek{ 113*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests for the -s option using the 'ignore' qualifier" 114*00b67f09SDavid van Moolenbroek} 115*00b67f09SDavid van Moolenbroeksflag_ignore_body() 116*00b67f09SDavid van Moolenbroek{ 117*00b67f09SDavid van Moolenbroek h_pass 'true' -s ignore 118*00b67f09SDavid van Moolenbroek h_pass 'false' -s ignore 119*00b67f09SDavid van Moolenbroek if ${Atf_Check} -s ignored -x 'kill $$'; then 120*00b67f09SDavid van Moolenbroek atf_fail "Signal not ignored" 121*00b67f09SDavid van Moolenbroek fi 122*00b67f09SDavid van Moolenbroek} 123*00b67f09SDavid van Moolenbroek 124*00b67f09SDavid van Moolenbroekatf_test_case sflag_signal 125*00b67f09SDavid van Moolenbroeksflag_signal_head() 126*00b67f09SDavid van Moolenbroek{ 127*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests for the -s option using the 'signal' qualifier" 128*00b67f09SDavid van Moolenbroek} 129*00b67f09SDavid van Moolenbroeksflag_signal_body() 130*00b67f09SDavid van Moolenbroek{ 131*00b67f09SDavid van Moolenbroek ${Atf_Check} -s signal:hup -x 'kill -1 $$' || atf_fail "Signal not detected" 132*00b67f09SDavid van Moolenbroek ${Atf_Check} -s signal:sighup -x 'kill -1 $$' || atf_fail "Signal not" \ 133*00b67f09SDavid van Moolenbroek "detected" 134*00b67f09SDavid van Moolenbroek ${Atf_Check} -s signal:1 -x 'kill -1 $$' || atf_fail "Signal not detected" 135*00b67f09SDavid van Moolenbroek ${Atf_Check} -s signal -x 'kill -1 $$' || atf_fail "Signal not detected" 136*00b67f09SDavid van Moolenbroek 137*00b67f09SDavid van Moolenbroek ${Atf_Check} -s not-signal:kill -x 'kill -9 $$' && \ 138*00b67f09SDavid van Moolenbroek atf_fail "not-signal:kill matched kill -9" 139*00b67f09SDavid van Moolenbroek ${Atf_Check} -s not-signal:kill -x 'kill -1 $$' || \ 140*00b67f09SDavid van Moolenbroek atf_fail "not-signal:kill did not match kill -1" 141*00b67f09SDavid van Moolenbroek 142*00b67f09SDavid van Moolenbroek h_fail 'true' -s signal 143*00b67f09SDavid van Moolenbroek h_fail 'false' -s signal 144*00b67f09SDavid van Moolenbroek} 145*00b67f09SDavid van Moolenbroek 146*00b67f09SDavid van Moolenbroekatf_test_case xflag 147*00b67f09SDavid van Moolenbroekxflag_head() 148*00b67f09SDavid van Moolenbroek{ 149*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests for the -x option" 150*00b67f09SDavid van Moolenbroek} 151*00b67f09SDavid van Moolenbroekxflag_body() 152*00b67f09SDavid van Moolenbroek{ 153*00b67f09SDavid van Moolenbroek ${Atf_Check} -s ne:0 -o ignore -e ignore "echo foo 2>&1" || \ 154*00b67f09SDavid van Moolenbroek atf_fail "Shell command succeeded without -x" 155*00b67f09SDavid van Moolenbroek 156*00b67f09SDavid van Moolenbroek ${Atf_Check} -e inline:"foo\n" -x "echo foo 1>&2" || \ 157*00b67f09SDavid van Moolenbroek atf_fail "Cannot run command with -x" 158*00b67f09SDavid van Moolenbroek 159*00b67f09SDavid van Moolenbroek ${Atf_Check} -o inline:"foo\n" -x echo foo || \ 160*00b67f09SDavid van Moolenbroek atf_fail "Using -x does not respect all provided arguments" 161*00b67f09SDavid van Moolenbroek} 162*00b67f09SDavid van Moolenbroek 163*00b67f09SDavid van Moolenbroekatf_test_case oflag_empty 164*00b67f09SDavid van Moolenbroekoflag_empty_head() 165*00b67f09SDavid van Moolenbroek{ 166*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests for the -o option using the 'empty' argument" 167*00b67f09SDavid van Moolenbroek} 168*00b67f09SDavid van Moolenbroekoflag_empty_body() 169*00b67f09SDavid van Moolenbroek{ 170*00b67f09SDavid van Moolenbroek h_pass "true" -o empty 171*00b67f09SDavid van Moolenbroek h_fail "echo foo" -o empty 172*00b67f09SDavid van Moolenbroek} 173*00b67f09SDavid van Moolenbroek 174*00b67f09SDavid van Moolenbroekatf_test_case oflag_ignore 175*00b67f09SDavid van Moolenbroekoflag_ignore_head() 176*00b67f09SDavid van Moolenbroek{ 177*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests for the -o option using the 'ignore' argument" 178*00b67f09SDavid van Moolenbroek} 179*00b67f09SDavid van Moolenbroekoflag_ignore_body() 180*00b67f09SDavid van Moolenbroek{ 181*00b67f09SDavid van Moolenbroek h_pass "true" -o ignore 182*00b67f09SDavid van Moolenbroek h_pass "echo foo" -o ignore 183*00b67f09SDavid van Moolenbroek} 184*00b67f09SDavid van Moolenbroek 185*00b67f09SDavid van Moolenbroekatf_test_case oflag_file 186*00b67f09SDavid van Moolenbroekoflag_file_head() 187*00b67f09SDavid van Moolenbroek{ 188*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests for the -o option using the 'file:' argument" 189*00b67f09SDavid van Moolenbroek} 190*00b67f09SDavid van Moolenbroekoflag_file_body() 191*00b67f09SDavid van Moolenbroek{ 192*00b67f09SDavid van Moolenbroek touch empty 193*00b67f09SDavid van Moolenbroek h_pass "true" -o file:empty 194*00b67f09SDavid van Moolenbroek 195*00b67f09SDavid van Moolenbroek echo foo >text 196*00b67f09SDavid van Moolenbroek h_pass "echo foo" -o file:text 197*00b67f09SDavid van Moolenbroek h_fail "echo bar" -o file:text 198*00b67f09SDavid van Moolenbroek 199*00b67f09SDavid van Moolenbroek dd if=/dev/urandom of=bin bs=1k count=10 200*00b67f09SDavid van Moolenbroek h_pass "cat bin" -o file:bin 201*00b67f09SDavid van Moolenbroek} 202*00b67f09SDavid van Moolenbroek 203*00b67f09SDavid van Moolenbroekatf_test_case oflag_inline 204*00b67f09SDavid van Moolenbroekoflag_inline_head() 205*00b67f09SDavid van Moolenbroek{ 206*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests for the -o option using the 'inline:' argument" 207*00b67f09SDavid van Moolenbroek} 208*00b67f09SDavid van Moolenbroekoflag_inline_body() 209*00b67f09SDavid van Moolenbroek{ 210*00b67f09SDavid van Moolenbroek h_pass "true" -o inline: 211*00b67f09SDavid van Moolenbroek h_pass "echo foo bar" -o inline:"foo bar\n" 212*00b67f09SDavid van Moolenbroek h_pass "printf 'foo bar'" -o inline:"foo bar" 213*00b67f09SDavid van Moolenbroek h_pass "printf '\t\n\t\n'" -o inline:"\t\n\t\n" 214*00b67f09SDavid van Moolenbroek # XXX Ugly hack to workaround the lack of \e in FreeBSD. Also, \e doesn't 215*00b67f09SDavid van Moolenbroek # seem to work as expected in Linux. Look for a nicer solution. 216*00b67f09SDavid van Moolenbroek case $(uname) in 217*00b67f09SDavid van Moolenbroek Darwin|FreeBSD|Linux) 218*00b67f09SDavid van Moolenbroek h_pass "printf '\a\b\f\n\r\t\v'" -o inline:"\a\b\f\n\r\t\v" 219*00b67f09SDavid van Moolenbroek ;; 220*00b67f09SDavid van Moolenbroek *) 221*00b67f09SDavid van Moolenbroek h_pass "printf '\a\b\e\f\n\r\t\v'" -o inline:"\a\b\e\f\n\r\t\v" 222*00b67f09SDavid van Moolenbroek ;; 223*00b67f09SDavid van Moolenbroek esac 224*00b67f09SDavid van Moolenbroek h_pass "printf '\011\022\033\012'" -o inline:"\011\022\033\012" 225*00b67f09SDavid van Moolenbroek 226*00b67f09SDavid van Moolenbroek h_fail "echo foo bar" -o inline:"foo bar" 227*00b67f09SDavid van Moolenbroek h_fail "echo -n foo bar" -o inline:"foo bar\n" 228*00b67f09SDavid van Moolenbroek} 229*00b67f09SDavid van Moolenbroek 230*00b67f09SDavid van Moolenbroekatf_test_case oflag_match 231*00b67f09SDavid van Moolenbroekoflag_match_head() 232*00b67f09SDavid van Moolenbroek{ 233*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests for the -o option using the 'match:' argument" 234*00b67f09SDavid van Moolenbroek} 235*00b67f09SDavid van Moolenbroekoflag_match_body() 236*00b67f09SDavid van Moolenbroek{ 237*00b67f09SDavid van Moolenbroek h_pass "printf no-newline" -o "match:^no-newline" 238*00b67f09SDavid van Moolenbroek h_pass "echo line1; echo foo bar" -o "match:^foo" 239*00b67f09SDavid van Moolenbroek h_pass "echo foo bar" -o "match:o b" 240*00b67f09SDavid van Moolenbroek h_fail "echo foo bar" -o "match:baz" 241*00b67f09SDavid van Moolenbroek h_fail "echo foo bar" -o "match:^bar" 242*00b67f09SDavid van Moolenbroek} 243*00b67f09SDavid van Moolenbroek 244*00b67f09SDavid van Moolenbroekatf_test_case oflag_save 245*00b67f09SDavid van Moolenbroekoflag_save_head() 246*00b67f09SDavid van Moolenbroek{ 247*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests for the -o option using the 'save:' argument" 248*00b67f09SDavid van Moolenbroek} 249*00b67f09SDavid van Moolenbroekoflag_save_body() 250*00b67f09SDavid van Moolenbroek{ 251*00b67f09SDavid van Moolenbroek h_pass "echo foo" -o save:out 252*00b67f09SDavid van Moolenbroek echo foo >exp 253*00b67f09SDavid van Moolenbroek cmp -s out exp || atf_fail "Saved output does not match expected results" 254*00b67f09SDavid van Moolenbroek} 255*00b67f09SDavid van Moolenbroek 256*00b67f09SDavid van Moolenbroekatf_test_case oflag_multiple 257*00b67f09SDavid van Moolenbroekoflag_multiple_head() 258*00b67f09SDavid van Moolenbroek{ 259*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests for multiple occurrences of the -o option" 260*00b67f09SDavid van Moolenbroek} 261*00b67f09SDavid van Moolenbroekoflag_multiple_body() 262*00b67f09SDavid van Moolenbroek{ 263*00b67f09SDavid van Moolenbroek h_pass "echo foo bar" -o match:foo -o match:bar 264*00b67f09SDavid van Moolenbroek h_pass "echo foo; echo bar" -o match:foo -o match:bar 265*00b67f09SDavid van Moolenbroek h_fail "echo foo baz" -o match:bar -o match:foo 266*00b67f09SDavid van Moolenbroek h_fail "echo foo; echo baz" -o match:bar -o match:foo 267*00b67f09SDavid van Moolenbroek} 268*00b67f09SDavid van Moolenbroek 269*00b67f09SDavid van Moolenbroekatf_test_case oflag_negated 270*00b67f09SDavid van Moolenbroekoflag_negated_head() 271*00b67f09SDavid van Moolenbroek{ 272*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests for negated occurrences of the -o option" 273*00b67f09SDavid van Moolenbroek} 274*00b67f09SDavid van Moolenbroekoflag_negated_body() 275*00b67f09SDavid van Moolenbroek{ 276*00b67f09SDavid van Moolenbroek h_fail "echo foo" -o empty 277*00b67f09SDavid van Moolenbroek h_pass "echo foo" -o not-empty 278*00b67f09SDavid van Moolenbroek 279*00b67f09SDavid van Moolenbroek h_pass "echo foo bar" -o match:foo 280*00b67f09SDavid van Moolenbroek h_fail "echo foo bar" -o not-match:foo 281*00b67f09SDavid van Moolenbroek} 282*00b67f09SDavid van Moolenbroek 283*00b67f09SDavid van Moolenbroekatf_test_case eflag_empty 284*00b67f09SDavid van Moolenbroekeflag_empty_head() 285*00b67f09SDavid van Moolenbroek{ 286*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests for the -e option using the 'empty' argument" 287*00b67f09SDavid van Moolenbroek} 288*00b67f09SDavid van Moolenbroekeflag_empty_body() 289*00b67f09SDavid van Moolenbroek{ 290*00b67f09SDavid van Moolenbroek h_pass "true 1>&2" -e empty 291*00b67f09SDavid van Moolenbroek h_fail "echo foo 1>&2" -e empty 292*00b67f09SDavid van Moolenbroek} 293*00b67f09SDavid van Moolenbroek 294*00b67f09SDavid van Moolenbroekatf_test_case eflag_ignore 295*00b67f09SDavid van Moolenbroekeflag_ignore_head() 296*00b67f09SDavid van Moolenbroek{ 297*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests for the -e option using the 'ignore' argument" 298*00b67f09SDavid van Moolenbroek} 299*00b67f09SDavid van Moolenbroekeflag_ignore_body() 300*00b67f09SDavid van Moolenbroek{ 301*00b67f09SDavid van Moolenbroek h_pass "true 1>&2" -e ignore 302*00b67f09SDavid van Moolenbroek h_pass "echo foo 1>&2" -e ignore 303*00b67f09SDavid van Moolenbroek} 304*00b67f09SDavid van Moolenbroek 305*00b67f09SDavid van Moolenbroekatf_test_case eflag_file 306*00b67f09SDavid van Moolenbroekeflag_file_head() 307*00b67f09SDavid van Moolenbroek{ 308*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests for the -e option using the 'file:' argument" 309*00b67f09SDavid van Moolenbroek} 310*00b67f09SDavid van Moolenbroekeflag_file_body() 311*00b67f09SDavid van Moolenbroek{ 312*00b67f09SDavid van Moolenbroek touch empty 313*00b67f09SDavid van Moolenbroek h_pass "true 1>&2" -e file:empty 314*00b67f09SDavid van Moolenbroek 315*00b67f09SDavid van Moolenbroek echo foo >text 316*00b67f09SDavid van Moolenbroek h_pass "echo foo 1>&2" -e file:text 317*00b67f09SDavid van Moolenbroek h_fail "echo bar 1>&2" -e file:text 318*00b67f09SDavid van Moolenbroek 319*00b67f09SDavid van Moolenbroek dd if=/dev/urandom of=bin bs=1k count=10 320*00b67f09SDavid van Moolenbroek h_pass "cat bin 1>&2" -e file:bin 321*00b67f09SDavid van Moolenbroek} 322*00b67f09SDavid van Moolenbroek 323*00b67f09SDavid van Moolenbroekatf_test_case eflag_inline 324*00b67f09SDavid van Moolenbroekeflag_inline_head() 325*00b67f09SDavid van Moolenbroek{ 326*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests for the -e option using the 'inline:' argument" 327*00b67f09SDavid van Moolenbroek} 328*00b67f09SDavid van Moolenbroekeflag_inline_body() 329*00b67f09SDavid van Moolenbroek{ 330*00b67f09SDavid van Moolenbroek h_pass "true 1>&2" -e inline: 331*00b67f09SDavid van Moolenbroek h_pass "echo foo bar 1>&2" -e inline:"foo bar\n" 332*00b67f09SDavid van Moolenbroek h_pass "printf 'foo bar' 1>&2" -e inline:"foo bar" 333*00b67f09SDavid van Moolenbroek h_pass "printf '\t\n\t\n' 1>&2" -e inline:"\t\n\t\n" 334*00b67f09SDavid van Moolenbroek # XXX Ugly hack to workaround the lack of \e in FreeBSD. Also, \e doesn't 335*00b67f09SDavid van Moolenbroek # seem to work as expected in Linux. Look for a nicer solution. 336*00b67f09SDavid van Moolenbroek case $(uname) in 337*00b67f09SDavid van Moolenbroek Darwin|FreeBSD|Linux) 338*00b67f09SDavid van Moolenbroek h_pass "printf '\a\b\f\n\r\t\v' 1>&2" -e inline:"\a\b\f\n\r\t\v" 339*00b67f09SDavid van Moolenbroek ;; 340*00b67f09SDavid van Moolenbroek *) 341*00b67f09SDavid van Moolenbroek h_pass "printf '\a\b\e\f\n\r\t\v' 1>&2" -e inline:"\a\b\e\f\n\r\t\v" 342*00b67f09SDavid van Moolenbroek ;; 343*00b67f09SDavid van Moolenbroek esac 344*00b67f09SDavid van Moolenbroek h_pass "printf '\011\022\033\012' 1>&2" -e inline:"\011\022\033\012" 345*00b67f09SDavid van Moolenbroek 346*00b67f09SDavid van Moolenbroek h_fail "echo foo bar 1>&2" -e inline:"foo bar" 347*00b67f09SDavid van Moolenbroek h_fail "echo -n foo bar 1>&2" -e inline:"foo bar\n" 348*00b67f09SDavid van Moolenbroek} 349*00b67f09SDavid van Moolenbroek 350*00b67f09SDavid van Moolenbroekatf_test_case eflag_save 351*00b67f09SDavid van Moolenbroekeflag_save_head() 352*00b67f09SDavid van Moolenbroek{ 353*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests for the -e option using the 'save:' argument" 354*00b67f09SDavid van Moolenbroek} 355*00b67f09SDavid van Moolenbroekeflag_save_body() 356*00b67f09SDavid van Moolenbroek{ 357*00b67f09SDavid van Moolenbroek h_pass "echo foo 1>&2" -e save:out 358*00b67f09SDavid van Moolenbroek echo foo >exp 359*00b67f09SDavid van Moolenbroek cmp -s out exp || atf_fail "Saved output does not match expected results" 360*00b67f09SDavid van Moolenbroek} 361*00b67f09SDavid van Moolenbroek 362*00b67f09SDavid van Moolenbroekatf_test_case eflag_match 363*00b67f09SDavid van Moolenbroekeflag_match_head() 364*00b67f09SDavid van Moolenbroek{ 365*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests for the -e option using the 'match:' argument" 366*00b67f09SDavid van Moolenbroek} 367*00b67f09SDavid van Moolenbroekeflag_match_body() 368*00b67f09SDavid van Moolenbroek{ 369*00b67f09SDavid van Moolenbroek h_pass "printf no-newline 1>&2" -e "match:^no-newline" 370*00b67f09SDavid van Moolenbroek h_pass "echo line1 1>&2; echo foo bar 1>&2" -e "match:^foo" 371*00b67f09SDavid van Moolenbroek h_pass "echo foo bar 1>&2" -e "match:o b" 372*00b67f09SDavid van Moolenbroek h_fail "echo foo bar 1>&2" -e "match:baz" 373*00b67f09SDavid van Moolenbroek h_fail "echo foo bar 1>&2" -e "match:^bar" 374*00b67f09SDavid van Moolenbroek} 375*00b67f09SDavid van Moolenbroek 376*00b67f09SDavid van Moolenbroekatf_test_case eflag_multiple 377*00b67f09SDavid van Moolenbroekeflag_multiple_head() 378*00b67f09SDavid van Moolenbroek{ 379*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests for multiple occurrences of the -e option" 380*00b67f09SDavid van Moolenbroek} 381*00b67f09SDavid van Moolenbroekeflag_multiple_body() 382*00b67f09SDavid van Moolenbroek{ 383*00b67f09SDavid van Moolenbroek h_pass "echo foo bar 1>&2" -e match:foo -e match:bar 384*00b67f09SDavid van Moolenbroek h_pass "echo foo 1>&2; echo bar 1>&2" -e match:foo -e match:bar 385*00b67f09SDavid van Moolenbroek h_fail "echo foo baz 1>&2" -e match:bar -e match:foo 386*00b67f09SDavid van Moolenbroek h_fail "echo foo 1>&2; echo baz 1>&2" -e match:bar -e match:foo 387*00b67f09SDavid van Moolenbroek} 388*00b67f09SDavid van Moolenbroek 389*00b67f09SDavid van Moolenbroekatf_test_case eflag_negated 390*00b67f09SDavid van Moolenbroekeflag_negated_head() 391*00b67f09SDavid van Moolenbroek{ 392*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests for negated occurrences of the -e option" 393*00b67f09SDavid van Moolenbroek} 394*00b67f09SDavid van Moolenbroekeflag_negated_body() 395*00b67f09SDavid van Moolenbroek{ 396*00b67f09SDavid van Moolenbroek h_fail "echo foo 1>&2" -e empty 397*00b67f09SDavid van Moolenbroek h_pass "echo foo 1>&2" -e not-empty 398*00b67f09SDavid van Moolenbroek 399*00b67f09SDavid van Moolenbroek h_pass "echo foo bar 1>&2" -e match:foo 400*00b67f09SDavid van Moolenbroek h_fail "echo foo bar 1>&2" -e not-match:foo 401*00b67f09SDavid van Moolenbroek} 402*00b67f09SDavid van Moolenbroek 403*00b67f09SDavid van Moolenbroekatf_test_case stdin 404*00b67f09SDavid van Moolenbroekstdin_head() 405*00b67f09SDavid van Moolenbroek{ 406*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests that stdin is preserved" 407*00b67f09SDavid van Moolenbroek} 408*00b67f09SDavid van Moolenbroekstdin_body() 409*00b67f09SDavid van Moolenbroek{ 410*00b67f09SDavid van Moolenbroek echo "hello" | ${Atf_Check} -o match:"hello" cat || \ 411*00b67f09SDavid van Moolenbroek atf_fail "atf-check does not seem to respect stdin" 412*00b67f09SDavid van Moolenbroek} 413*00b67f09SDavid van Moolenbroek 414*00b67f09SDavid van Moolenbroekatf_test_case invalid_umask 415*00b67f09SDavid van Moolenbroekinvalid_umask_head() 416*00b67f09SDavid van Moolenbroek{ 417*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests for a correct error condition if the umask is" \ 418*00b67f09SDavid van Moolenbroek "too restrictive" 419*00b67f09SDavid van Moolenbroek} 420*00b67f09SDavid van Moolenbroekinvalid_umask_body() 421*00b67f09SDavid van Moolenbroek{ 422*00b67f09SDavid van Moolenbroek umask 0222 423*00b67f09SDavid van Moolenbroek ${Atf_Check} false 2>stderr && \ 424*00b67f09SDavid van Moolenbroek atf_fail "atf-check returned 0 but it should have failed" 425*00b67f09SDavid van Moolenbroek cat stderr 426*00b67f09SDavid van Moolenbroek grep 'temporary.*current umask.*0222' stderr >/dev/null || \ 427*00b67f09SDavid van Moolenbroek atf_fail "atf-check did not report an error related to the" \ 428*00b67f09SDavid van Moolenbroek "current umask" 429*00b67f09SDavid van Moolenbroek} 430*00b67f09SDavid van Moolenbroek 431*00b67f09SDavid van Moolenbroekatf_init_test_cases() 432*00b67f09SDavid van Moolenbroek{ 433*00b67f09SDavid van Moolenbroek atf_add_test_case sflag_eq_ne 434*00b67f09SDavid van Moolenbroek atf_add_test_case sflag_exit 435*00b67f09SDavid van Moolenbroek atf_add_test_case sflag_ignore 436*00b67f09SDavid van Moolenbroek atf_add_test_case sflag_signal 437*00b67f09SDavid van Moolenbroek 438*00b67f09SDavid van Moolenbroek atf_add_test_case xflag 439*00b67f09SDavid van Moolenbroek 440*00b67f09SDavid van Moolenbroek atf_add_test_case oflag_empty 441*00b67f09SDavid van Moolenbroek atf_add_test_case oflag_ignore 442*00b67f09SDavid van Moolenbroek atf_add_test_case oflag_file 443*00b67f09SDavid van Moolenbroek atf_add_test_case oflag_inline 444*00b67f09SDavid van Moolenbroek atf_add_test_case oflag_match 445*00b67f09SDavid van Moolenbroek atf_add_test_case oflag_save 446*00b67f09SDavid van Moolenbroek atf_add_test_case oflag_multiple 447*00b67f09SDavid van Moolenbroek atf_add_test_case oflag_negated 448*00b67f09SDavid van Moolenbroek 449*00b67f09SDavid van Moolenbroek atf_add_test_case eflag_empty 450*00b67f09SDavid van Moolenbroek atf_add_test_case eflag_ignore 451*00b67f09SDavid van Moolenbroek atf_add_test_case eflag_file 452*00b67f09SDavid van Moolenbroek atf_add_test_case eflag_inline 453*00b67f09SDavid van Moolenbroek atf_add_test_case eflag_match 454*00b67f09SDavid van Moolenbroek atf_add_test_case eflag_save 455*00b67f09SDavid van Moolenbroek atf_add_test_case eflag_multiple 456*00b67f09SDavid van Moolenbroek atf_add_test_case eflag_negated 457*00b67f09SDavid van Moolenbroek 458*00b67f09SDavid van Moolenbroek atf_add_test_case stdin 459*00b67f09SDavid van Moolenbroek 460*00b67f09SDavid van Moolenbroek atf_add_test_case invalid_umask 461*00b67f09SDavid van Moolenbroek} 462*00b67f09SDavid van Moolenbroek 463*00b67f09SDavid van Moolenbroek# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 464