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 Moolenbroekall_vars="atf_arch \ 31*00b67f09SDavid van Moolenbroek atf_build_cc \ 32*00b67f09SDavid van Moolenbroek atf_build_cflags \ 33*00b67f09SDavid van Moolenbroek atf_build_cpp \ 34*00b67f09SDavid van Moolenbroek atf_build_cppflags \ 35*00b67f09SDavid van Moolenbroek atf_build_cxx \ 36*00b67f09SDavid van Moolenbroek atf_build_cxxflags \ 37*00b67f09SDavid van Moolenbroek atf_confdir \ 38*00b67f09SDavid van Moolenbroek atf_includedir \ 39*00b67f09SDavid van Moolenbroek atf_libdir \ 40*00b67f09SDavid van Moolenbroek atf_libexecdir \ 41*00b67f09SDavid van Moolenbroek atf_machine \ 42*00b67f09SDavid van Moolenbroek atf_pkgdatadir \ 43*00b67f09SDavid van Moolenbroek atf_shell \ 44*00b67f09SDavid van Moolenbroek atf_workdir" 45*00b67f09SDavid van Moolenbroekall_vars_no=15 46*00b67f09SDavid van Moolenbroek 47*00b67f09SDavid van Moolenbroekatf_test_case list_all 48*00b67f09SDavid van Moolenbroeklist_all_head() 49*00b67f09SDavid van Moolenbroek{ 50*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests that at atf-config prints all expected" \ 51*00b67f09SDavid van Moolenbroek "variables, and not more" 52*00b67f09SDavid van Moolenbroek} 53*00b67f09SDavid van Moolenbroeklist_all_body() 54*00b67f09SDavid van Moolenbroek{ 55*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o save:stdout -e empty atf-config 56*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o empty -e empty \ 57*00b67f09SDavid van Moolenbroek test "$(wc -l stdout | awk '{ print $1 }')" = "${all_vars_no}" 58*00b67f09SDavid van Moolenbroek for v in ${all_vars}; do 59*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o ignore -e empty grep "${v}" stdout 60*00b67f09SDavid van Moolenbroek done 61*00b67f09SDavid van Moolenbroek} 62*00b67f09SDavid van Moolenbroek 63*00b67f09SDavid van Moolenbroekatf_test_case query_one 64*00b67f09SDavid van Moolenbroekquery_one_head() 65*00b67f09SDavid van Moolenbroek{ 66*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests that querying a single variable works" 67*00b67f09SDavid van Moolenbroek} 68*00b67f09SDavid van Moolenbroekquery_one_body() 69*00b67f09SDavid van Moolenbroek{ 70*00b67f09SDavid van Moolenbroek for v in ${all_vars}; do 71*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o save:stdout -o match:"${v}" -e empty \ 72*00b67f09SDavid van Moolenbroek atf-config "${v}" 73*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o empty -e empty \ 74*00b67f09SDavid van Moolenbroek test "$(wc -l stdout | awk '{ print $1 }')" = 1 75*00b67f09SDavid van Moolenbroek done 76*00b67f09SDavid van Moolenbroek} 77*00b67f09SDavid van Moolenbroek 78*00b67f09SDavid van Moolenbroekatf_test_case query_one_terse 79*00b67f09SDavid van Moolenbroekquery_one_terse_head() 80*00b67f09SDavid van Moolenbroek{ 81*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests that querying a single variable in terse mode" \ 82*00b67f09SDavid van Moolenbroek "works" 83*00b67f09SDavid van Moolenbroek} 84*00b67f09SDavid van Moolenbroekquery_one_terse_body() 85*00b67f09SDavid van Moolenbroek{ 86*00b67f09SDavid van Moolenbroek for v in ${all_vars}; do 87*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o save:stdout -o match:"${v}" -e empty \ 88*00b67f09SDavid van Moolenbroek atf-config "${v}" 89*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o empty -e empty \ 90*00b67f09SDavid van Moolenbroek test "$(wc -l stdout | awk '{ print $1 }')" = 1 91*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o save:stdout -e empty cut -d ' ' -f 3- stdout 92*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o empty -e empty mv stdout expout 93*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o file:expout -e empty atf-config -t "${v}" 94*00b67f09SDavid van Moolenbroek done 95*00b67f09SDavid van Moolenbroek} 96*00b67f09SDavid van Moolenbroek 97*00b67f09SDavid van Moolenbroekatf_test_case query_multiple 98*00b67f09SDavid van Moolenbroekquery_multiple_head() 99*00b67f09SDavid van Moolenbroek{ 100*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests that querying multiple variables works" 101*00b67f09SDavid van Moolenbroek} 102*00b67f09SDavid van Moolenbroekquery_multiple_body() 103*00b67f09SDavid van Moolenbroek{ 104*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o save:stdout -o match:'atf_libexecdir' \ 105*00b67f09SDavid van Moolenbroek -o match:'atf_shell' -e empty atf-config atf_libexecdir atf_shell 106*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o empty -e empty \ 107*00b67f09SDavid van Moolenbroek test "$(wc -l stdout | awk '{ print $1 }')" = 2 108*00b67f09SDavid van Moolenbroek} 109*00b67f09SDavid van Moolenbroek 110*00b67f09SDavid van Moolenbroekatf_test_case query_unknown 111*00b67f09SDavid van Moolenbroekquery_unknown_head() 112*00b67f09SDavid van Moolenbroek{ 113*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests that querying an unknown variable delivers" \ 114*00b67f09SDavid van Moolenbroek "the correct error" 115*00b67f09SDavid van Moolenbroek} 116*00b67f09SDavid van Moolenbroekquery_unknown_body() 117*00b67f09SDavid van Moolenbroek{ 118*00b67f09SDavid van Moolenbroek atf_check -s eq:1 -o empty -e match:'Unknown variable.*non_existent' \ 119*00b67f09SDavid van Moolenbroek atf-config non_existent 120*00b67f09SDavid van Moolenbroek} 121*00b67f09SDavid van Moolenbroek 122*00b67f09SDavid van Moolenbroekatf_test_case query_mixture 123*00b67f09SDavid van Moolenbroekquery_mixture_head() 124*00b67f09SDavid van Moolenbroek{ 125*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests that querying a known and an unknown variable" \ 126*00b67f09SDavid van Moolenbroek "delivers the correct error" 127*00b67f09SDavid van Moolenbroek} 128*00b67f09SDavid van Moolenbroekquery_mixture_body() 129*00b67f09SDavid van Moolenbroek{ 130*00b67f09SDavid van Moolenbroek for v in ${all_vars}; do 131*00b67f09SDavid van Moolenbroek atf_check -s eq:1 -o empty -e match:'Unknown variable.*non_existent' \ 132*00b67f09SDavid van Moolenbroek atf-config "${v}" non_existent 133*00b67f09SDavid van Moolenbroek atf_check -s eq:1 -o empty -e match:'Unknown variable.*non_existent' \ 134*00b67f09SDavid van Moolenbroek atf-config non_existent "${v}" 135*00b67f09SDavid van Moolenbroek done 136*00b67f09SDavid van Moolenbroek} 137*00b67f09SDavid van Moolenbroek 138*00b67f09SDavid van Moolenbroekatf_test_case override_env 139*00b67f09SDavid van Moolenbroekoverride_env_head() 140*00b67f09SDavid van Moolenbroek{ 141*00b67f09SDavid van Moolenbroek atf_set "descr" "Tests that build-time variables can be overriden" \ 142*00b67f09SDavid van Moolenbroek "through their corresponding environment variables" 143*00b67f09SDavid van Moolenbroek} 144*00b67f09SDavid van Moolenbroekoverride_env_body() 145*00b67f09SDavid van Moolenbroek{ 146*00b67f09SDavid van Moolenbroek for v in ${all_vars}; do 147*00b67f09SDavid van Moolenbroek V=$(echo ${v} | tr '[a-z]' '[A-Z]') 148*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o save:stdout -e empty -x "${V}=testval atf-config" 149*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o empty -e empty mv stdout all 150*00b67f09SDavid van Moolenbroek 151*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o save:stdout -e empty grep "^${v} : " all 152*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o empty -e empty mv stdout affected 153*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o save:stdout -e empty grep -v "^${v} : " all 154*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o empty -e empty mv stdout unaffected 155*00b67f09SDavid van Moolenbroek 156*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o empty -e empty \ 157*00b67f09SDavid van Moolenbroek test "$(wc -l affected | awk '{ print $1 }')" = 1 158*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o empty -e empty \ 159*00b67f09SDavid van Moolenbroek test "$(wc -l unaffected | awk '{ print $1 }')" = \ 160*00b67f09SDavid van Moolenbroek "$((${all_vars_no} -1))" 161*00b67f09SDavid van Moolenbroek 162*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o ignore -e empty grep "^${v} : testval$" affected 163*00b67f09SDavid van Moolenbroek atf_check -s eq:1 -o empty -e empty grep ' : testval$' unaffected 164*00b67f09SDavid van Moolenbroek done 165*00b67f09SDavid van Moolenbroek} 166*00b67f09SDavid van Moolenbroek 167*00b67f09SDavid van Moolenbroekatf_init_test_cases() 168*00b67f09SDavid van Moolenbroek{ 169*00b67f09SDavid van Moolenbroek atf_add_test_case list_all 170*00b67f09SDavid van Moolenbroek 171*00b67f09SDavid van Moolenbroek atf_add_test_case query_one 172*00b67f09SDavid van Moolenbroek atf_add_test_case query_one_terse 173*00b67f09SDavid van Moolenbroek atf_add_test_case query_multiple 174*00b67f09SDavid van Moolenbroek atf_add_test_case query_unknown 175*00b67f09SDavid van Moolenbroek atf_add_test_case query_mixture 176*00b67f09SDavid van Moolenbroek 177*00b67f09SDavid van Moolenbroek atf_add_test_case override_env 178*00b67f09SDavid van Moolenbroek} 179*00b67f09SDavid van Moolenbroek 180*00b67f09SDavid van Moolenbroek# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 181