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 Moolenbroek# TODO: Bring in the checks in the bootstrap testsuite for atf_check. 31*00b67f09SDavid van Moolenbroek 32*00b67f09SDavid van Moolenbroekatf_test_case info_ok 33*00b67f09SDavid van Moolenbroekinfo_ok_head() 34*00b67f09SDavid van Moolenbroek{ 35*00b67f09SDavid van Moolenbroek atf_set "descr" "Verifies that atf_check prints an informative" \ 36*00b67f09SDavid van Moolenbroek "message even when the command is successful" 37*00b67f09SDavid van Moolenbroek} 38*00b67f09SDavid van Moolenbroekinfo_ok_body() 39*00b67f09SDavid van Moolenbroek{ 40*00b67f09SDavid van Moolenbroek h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)" 41*00b67f09SDavid van Moolenbroek 42*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o save:stdout -e save:stderr -x \ 43*00b67f09SDavid van Moolenbroek "${h} atf_check_info_ok" 44*00b67f09SDavid van Moolenbroek grep 'Executing command.*true' stdout >/dev/null || \ 45*00b67f09SDavid van Moolenbroek atf_fail "atf_check does not print an informative message" 46*00b67f09SDavid van Moolenbroek 47*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o save:stdout -e save:stderr -x \ 48*00b67f09SDavid van Moolenbroek "${h} atf_check_info_fail" 49*00b67f09SDavid van Moolenbroek grep 'Executing command.*false' stdout >/dev/null || \ 50*00b67f09SDavid van Moolenbroek atf_fail "atf_check does not print an informative message" 51*00b67f09SDavid van Moolenbroek} 52*00b67f09SDavid van Moolenbroek 53*00b67f09SDavid van Moolenbroekatf_test_case expout_mismatch 54*00b67f09SDavid van Moolenbroekexpout_mismatch_head() 55*00b67f09SDavid van Moolenbroek{ 56*00b67f09SDavid van Moolenbroek atf_set "descr" "Verifies that atf_check prints a diff of the" \ 57*00b67f09SDavid van Moolenbroek "stdout and the expected stdout if the two do not" \ 58*00b67f09SDavid van Moolenbroek "match" 59*00b67f09SDavid van Moolenbroek} 60*00b67f09SDavid van Moolenbroekexpout_mismatch_body() 61*00b67f09SDavid van Moolenbroek{ 62*00b67f09SDavid van Moolenbroek h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)" 63*00b67f09SDavid van Moolenbroek 64*00b67f09SDavid van Moolenbroek atf_check -s eq:1 -o save:stdout -e save:stderr -x \ 65*00b67f09SDavid van Moolenbroek "${h} atf_check_expout_mismatch" 66*00b67f09SDavid van Moolenbroek grep 'Executing command.*echo bar' stdout >/dev/null || \ 67*00b67f09SDavid van Moolenbroek atf_fail "atf_check does not print an informative message" 68*00b67f09SDavid van Moolenbroek grep 'stdout does not match golden output' stderr >/dev/null || \ 69*00b67f09SDavid van Moolenbroek atf_fail "atf_check does not print the stdout header" 70*00b67f09SDavid van Moolenbroek grep 'stderr' stderr >/dev/null && \ 71*00b67f09SDavid van Moolenbroek atf_fail "atf_check prints the stderr header" 72*00b67f09SDavid van Moolenbroek grep '^-foo' stderr >/dev/null || \ 73*00b67f09SDavid van Moolenbroek atf_fail "atf_check does not print the stdout's diff" 74*00b67f09SDavid van Moolenbroek grep '^+bar' stderr >/dev/null || \ 75*00b67f09SDavid van Moolenbroek atf_fail "atf_check does not print the stdout's diff" 76*00b67f09SDavid van Moolenbroek} 77*00b67f09SDavid van Moolenbroek 78*00b67f09SDavid van Moolenbroekatf_test_case experr_mismatch 79*00b67f09SDavid van Moolenbroekexperr_mismatch_head() 80*00b67f09SDavid van Moolenbroek{ 81*00b67f09SDavid van Moolenbroek atf_set "descr" "Verifies that atf_check prints a diff of the" \ 82*00b67f09SDavid van Moolenbroek "stderr and the expected stderr if the two do not" \ 83*00b67f09SDavid van Moolenbroek "match" 84*00b67f09SDavid van Moolenbroek} 85*00b67f09SDavid van Moolenbroekexperr_mismatch_body() 86*00b67f09SDavid van Moolenbroek{ 87*00b67f09SDavid van Moolenbroek h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)" 88*00b67f09SDavid van Moolenbroek 89*00b67f09SDavid van Moolenbroek atf_check -s eq:1 -o save:stdout -e save:stderr -x \ 90*00b67f09SDavid van Moolenbroek "${h} atf_check_experr_mismatch" 91*00b67f09SDavid van Moolenbroek grep 'Executing command.*echo bar' stdout >/dev/null || \ 92*00b67f09SDavid van Moolenbroek atf_fail "atf_check does not print an informative message" 93*00b67f09SDavid van Moolenbroek grep 'stdout' stderr >/dev/null && \ 94*00b67f09SDavid van Moolenbroek atf_fail "atf_check prints the stdout header" 95*00b67f09SDavid van Moolenbroek grep 'stderr does not match golden output' stderr >/dev/null || \ 96*00b67f09SDavid van Moolenbroek atf_fail "atf_check does not print the stderr header" 97*00b67f09SDavid van Moolenbroek grep '^-foo' stderr >/dev/null || \ 98*00b67f09SDavid van Moolenbroek atf_fail "atf_check does not print the stderr's diff" 99*00b67f09SDavid van Moolenbroek grep '^+bar' stderr >/dev/null || \ 100*00b67f09SDavid van Moolenbroek atf_fail "atf_check does not print the stderr's diff" 101*00b67f09SDavid van Moolenbroek} 102*00b67f09SDavid van Moolenbroek 103*00b67f09SDavid van Moolenbroekatf_test_case null_stdout 104*00b67f09SDavid van Moolenbroeknull_stdout_head() 105*00b67f09SDavid van Moolenbroek{ 106*00b67f09SDavid van Moolenbroek atf_set "descr" "Verifies that atf_check prints a the stdout it got" \ 107*00b67f09SDavid van Moolenbroek "when it was supposed to be null" 108*00b67f09SDavid van Moolenbroek} 109*00b67f09SDavid van Moolenbroeknull_stdout_body() 110*00b67f09SDavid van Moolenbroek{ 111*00b67f09SDavid van Moolenbroek h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)" 112*00b67f09SDavid van Moolenbroek 113*00b67f09SDavid van Moolenbroek atf_check -s eq:1 -o save:stdout -e save:stderr -x \ 114*00b67f09SDavid van Moolenbroek "${h} atf_check_null_stdout" 115*00b67f09SDavid van Moolenbroek grep 'Executing command.*echo.*These.*contents' stdout >/dev/null || \ 116*00b67f09SDavid van Moolenbroek atf_fail "atf_check does not print an informative message" 117*00b67f09SDavid van Moolenbroek grep 'stdout not empty' stderr >/dev/null || \ 118*00b67f09SDavid van Moolenbroek atf_fail "atf_check does not print the stdout header" 119*00b67f09SDavid van Moolenbroek grep 'stderr' stderr >/dev/null && \ 120*00b67f09SDavid van Moolenbroek atf_fail "atf_check prints the stderr header" 121*00b67f09SDavid van Moolenbroek grep 'These are the contents' stderr >/dev/null || \ 122*00b67f09SDavid van Moolenbroek atf_fail "atf_check does not print stdout's contents" 123*00b67f09SDavid van Moolenbroek} 124*00b67f09SDavid van Moolenbroek 125*00b67f09SDavid van Moolenbroekatf_test_case null_stderr 126*00b67f09SDavid van Moolenbroeknull_stderr_head() 127*00b67f09SDavid van Moolenbroek{ 128*00b67f09SDavid van Moolenbroek atf_set "descr" "Verifies that atf_check prints a the stderr it got" \ 129*00b67f09SDavid van Moolenbroek "when it was supposed to be null" 130*00b67f09SDavid van Moolenbroek} 131*00b67f09SDavid van Moolenbroeknull_stderr_body() 132*00b67f09SDavid van Moolenbroek{ 133*00b67f09SDavid van Moolenbroek h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)" 134*00b67f09SDavid van Moolenbroek 135*00b67f09SDavid van Moolenbroek atf_check -s eq:1 -o save:stdout -e save:stderr -x \ 136*00b67f09SDavid van Moolenbroek "${h} atf_check_null_stderr" 137*00b67f09SDavid van Moolenbroek grep 'Executing command.*echo.*These.*contents' stdout >/dev/null || \ 138*00b67f09SDavid van Moolenbroek atf_fail "atf_check does not print an informative message" 139*00b67f09SDavid van Moolenbroek grep 'stdout' stderr >/dev/null && \ 140*00b67f09SDavid van Moolenbroek atf_fail "atf_check prints the stdout header" 141*00b67f09SDavid van Moolenbroek grep 'stderr not empty' stderr >/dev/null || \ 142*00b67f09SDavid van Moolenbroek atf_fail "atf_check does not print the stderr header" 143*00b67f09SDavid van Moolenbroek grep 'These are the contents' stderr >/dev/null || \ 144*00b67f09SDavid van Moolenbroek atf_fail "atf_check does not print stderr's contents" 145*00b67f09SDavid van Moolenbroek} 146*00b67f09SDavid van Moolenbroek 147*00b67f09SDavid van Moolenbroekatf_test_case equal 148*00b67f09SDavid van Moolenbroekequal_head() 149*00b67f09SDavid van Moolenbroek{ 150*00b67f09SDavid van Moolenbroek atf_set "descr" "Verifies that atf_check_equal works" 151*00b67f09SDavid van Moolenbroek} 152*00b67f09SDavid van Moolenbroekequal_body() 153*00b67f09SDavid van Moolenbroek{ 154*00b67f09SDavid van Moolenbroek h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)" 155*00b67f09SDavid van Moolenbroek 156*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o ignore -e ignore -x "${h} atf_check_equal_ok" 157*00b67f09SDavid van Moolenbroek 158*00b67f09SDavid van Moolenbroek atf_check -s eq:1 -o ignore -e ignore -x \ 159*00b67f09SDavid van Moolenbroek "${h} -r resfile atf_check_equal_fail" 160*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o ignore -e empty grep '^failed: a != b (a != b)$' \ 161*00b67f09SDavid van Moolenbroek resfile 162*00b67f09SDavid van Moolenbroek 163*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o ignore -e ignore -x "${h} atf_check_equal_eval_ok" 164*00b67f09SDavid van Moolenbroek 165*00b67f09SDavid van Moolenbroek atf_check -s eq:1 -o ignore -e ignore -x \ 166*00b67f09SDavid van Moolenbroek "${h} -r resfile atf_check_equal_eval_fail" 167*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o ignore -e empty \ 168*00b67f09SDavid van Moolenbroek grep '^failed: \${x} != \${y} (a != b)$' resfile 169*00b67f09SDavid van Moolenbroek} 170*00b67f09SDavid van Moolenbroek 171*00b67f09SDavid van Moolenbroekatf_init_test_cases() 172*00b67f09SDavid van Moolenbroek{ 173*00b67f09SDavid van Moolenbroek atf_add_test_case info_ok 174*00b67f09SDavid van Moolenbroek atf_add_test_case expout_mismatch 175*00b67f09SDavid van Moolenbroek atf_add_test_case experr_mismatch 176*00b67f09SDavid van Moolenbroek atf_add_test_case null_stdout 177*00b67f09SDavid van Moolenbroek atf_add_test_case null_stderr 178*00b67f09SDavid van Moolenbroek atf_add_test_case equal 179*00b67f09SDavid van Moolenbroek} 180*00b67f09SDavid van Moolenbroek 181*00b67f09SDavid van Moolenbroek# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 182