1272343Sngie# $NetBSD: t_modload.sh,v 1.13 2012/04/20 05:41:25 jruoho Exp $ 2272343Sngie# 3272343Sngie# Copyright (c) 2008 The NetBSD Foundation, Inc. 4272343Sngie# All rights reserved. 5272343Sngie# 6272343Sngie# Redistribution and use in source and binary forms, with or without 7272343Sngie# modification, are permitted provided that the following conditions 8272343Sngie# are met: 9272343Sngie# 1. Redistributions of source code must retain the above copyright 10272343Sngie# notice, this list of conditions and the following disclaimer. 11272343Sngie# 2. Redistributions in binary form must reproduce the above copyright 12272343Sngie# notice, this list of conditions and the following disclaimer in the 13272343Sngie# documentation and/or other materials provided with the distribution. 14272343Sngie# 15272343Sngie# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16272343Sngie# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17272343Sngie# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18272343Sngie# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19272343Sngie# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20272343Sngie# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21272343Sngie# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22272343Sngie# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23272343Sngie# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24272343Sngie# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25272343Sngie# POSSIBILITY OF SUCH DAMAGE. 26272343Sngie# 27272343Sngie 28272343Sngiecheck_sysctl() { 29272343Sngie echo "${1} = ${2}" >expout 30272343Sngie atf_check -s eq:0 -o file:expout -e empty sysctl ${1} 31272343Sngie} 32272343Sngie 33272343Sngieatf_test_case plain cleanup 34272343Sngieplain_head() { 35272343Sngie atf_set "descr" "Test load without arguments" 36272343Sngie atf_set "require.user" "root" 37272343Sngie} 38272343Sngieplain_body() { 39272343Sngie 40272343Sngie # XXX: Adjust when modctl(8) fails consistently. 41272343Sngie # 42272343Sngie $(atf_get_srcdir)/k_helper3 \ 43272343Sngie "%s/k_helper/k_helper.kmod" $(atf_get_srcdir) 44272343Sngie 45272343Sngie if [ $? -eq 1 ] || [ $? -eq 78 ]; then 46272343Sngie atf_skip "host does not support modules" 47272343Sngie fi 48272343Sngie 49272343Sngie cat >experr <<EOF 50272343Sngiemodload: No such file or directory 51272343SngieEOF 52272343Sngie atf_check -s eq:1 -o empty -e ignore modload non-existent.o 53272343Sngie 54272343Sngie atf_check -s eq:0 -o empty -e empty \ 55272343Sngie modload $(atf_get_srcdir)/k_helper/k_helper.kmod 56272343Sngie check_sysctl vendor.k_helper.present 1 57272343Sngie check_sysctl vendor.k_helper.prop_int_ok 0 58272343Sngie check_sysctl vendor.k_helper.prop_str_ok 0 59272343Sngie atf_check -s eq:0 -o empty -e empty modunload k_helper 60272343Sngie touch done 61272343Sngie} 62272343Sngieplain_cleanup() { 63272343Sngie test -f done || modunload k_helper >/dev/null 2>&1 64272343Sngie} 65272343Sngie 66272343Sngieatf_test_case bflag cleanup 67272343Sngiebflag_head() { 68272343Sngie atf_set "descr" "Test the -b flag" 69272343Sngie atf_set "require.user" "root" 70272343Sngie} 71272343Sngiebflag_body() { 72272343Sngie echo "Checking error conditions" 73272343Sngie 74272343Sngie atf_check -s eq:1 -o empty -e save:stderr \ 75272343Sngie modload -b foo k_helper.kmod 76272343Sngie atf_check -s eq:0 -o ignore -e empty \ 77272343Sngie grep 'Invalid parameter.*foo' stderr 78272343Sngie 79272343Sngie atf_check -s eq:1 -o empty -e save:stderr \ 80272343Sngie modload -b foo= k_helper.kmod 81272343Sngie atf_check -s eq:0 -o ignore -e empty \ 82272343Sngie grep 'Invalid boolean value' stderr 83272343Sngie 84272343Sngie atf_check -s eq:1 -o empty -e save:stderr \ 85272343Sngie modload -b foo=bar k_helper.kmod 86272343Sngie atf_check -s eq:0 -o ignore -e empty \ 87272343Sngie grep 'Invalid boolean value.*bar' stderr 88272343Sngie 89272343Sngie atf_check -s eq:1 -o empty -e save:stderr \ 90272343Sngie modload -b foo=falsea k_helper.kmod 91272343Sngie atf_check -s eq:0 -o ignore -e empty \ 92272343Sngie grep 'Invalid boolean value.*falsea' stderr 93272343Sngie 94272343Sngie atf_check -s eq:1 -o empty -e save:stderr \ 95272343Sngie modload -b foo=truea k_helper.kmod 96272343Sngie atf_check -s eq:0 -o ignore -e empty \ 97272343Sngie grep 'Invalid boolean value.*truea' stderr 98272343Sngie 99272343Sngie # TODO Once sysctl(8) supports CTLTYPE_BOOL nodes. 100272343Sngie #echo "Checking valid values" 101272343Sngie} 102272343Sngiebflag_cleanup() { 103272343Sngie modunload k_helper >/dev/null 2>&1 || true 104272343Sngie} 105272343Sngie 106272343Sngieatf_test_case iflag cleanup 107272343Sngieiflag_head() { 108272343Sngie atf_set "descr" "Test the -i flag" 109272343Sngie atf_set "require.user" "root" 110272343Sngie} 111272343Sngieiflag_body() { 112272343Sngie 113272343Sngie # XXX: Adjust when modctl(8) fails consistently. 114272343Sngie # 115272343Sngie $(atf_get_srcdir)/k_helper3 \ 116272343Sngie "%s/k_helper/k_helper.kmod" $(atf_get_srcdir) 117272343Sngie 118272343Sngie if [ $? -eq 1 ] || [ $? -eq 78 ]; then 119272343Sngie atf_skip "host does not support modules" 120272343Sngie fi 121272343Sngie 122272343Sngie echo "Checking error conditions" 123272343Sngie 124272343Sngie atf_check -s eq:1 -o empty -e save:stderr modload -i foo \ 125272343Sngie k_helper/k_helper.kmod 126272343Sngie atf_check -s eq:0 -o ignore -e empty \ 127272343Sngie grep 'Invalid parameter.*foo' stderr 128272343Sngie 129272343Sngie atf_check -s eq:1 -o empty -e save:stderr modload -i foo= \ 130272343Sngie k_helper/k_helper.kmod 131272343Sngie atf_check -s eq:0 -o ignore -e empty \ 132272343Sngie grep 'Invalid integer value' stderr 133272343Sngie 134272343Sngie atf_check -s eq:1 -o empty -e save:stderr \ 135272343Sngie modload -i foo=bar k_helper/k_helper.kmod 136272343Sngie atf_check -s eq:0 -o ignore -e empty \ 137272343Sngie grep 'Invalid integer value.*bar' stderr 138272343Sngie 139272343Sngie atf_check -s eq:1 -o empty -e save:stderr \ 140272343Sngie modload -i foo=123a k_helper/k_helper.kmod 141272343Sngie atf_check -s eq:0 -o ignore -e empty \ 142272343Sngie grep 'Invalid integer value.*123a' stderr 143272343Sngie 144272343Sngie echo "Checking valid values" 145272343Sngie 146272343Sngie for v in 5 10; do 147272343Sngie atf_check -s eq:0 -o empty -e empty \ 148272343Sngie modload -i prop_int="${v}" \ 149272343Sngie $(atf_get_srcdir)/k_helper/k_helper.kmod 150272343Sngie check_sysctl vendor.k_helper.prop_int_ok 1 151272343Sngie check_sysctl vendor.k_helper.prop_int_val "${v}" 152272343Sngie atf_check -s eq:0 -o empty -e empty modunload k_helper 153272343Sngie done 154272343Sngie touch done 155272343Sngie} 156272343Sngieiflag_cleanup() { 157272343Sngie test -f done || modunload k_helper >/dev/null 2>&1 158272343Sngie} 159272343Sngie 160272343Sngieatf_test_case sflag cleanup 161272343Sngiesflag_head() { 162272343Sngie atf_set "descr" "Test the -s flag" 163272343Sngie atf_set "require.user" "root" 164272343Sngie} 165272343Sngiesflag_body() { 166272343Sngie 167272343Sngie # XXX: Adjust when modctl(8) fails consistently. 168272343Sngie # 169272343Sngie $(atf_get_srcdir)/k_helper3 \ 170272343Sngie "%s/k_helper/k_helper.kmod" $(atf_get_srcdir) 171272343Sngie 172272343Sngie if [ $? -eq 1 ] || [ $? -eq 78 ]; then 173272343Sngie atf_skip "host does not support modules" 174272343Sngie fi 175272343Sngie 176272343Sngie echo "Checking error conditions" 177272343Sngie 178272343Sngie atf_check -s eq:1 -o empty -e save:stderr modload -s foo \ 179272343Sngie k_helper/k_helper.kmod 180272343Sngie atf_check -s eq:0 -o ignore -e empty \ 181272343Sngie grep 'Invalid parameter.*foo' stderr 182272343Sngie 183272343Sngie echo "Checking valid values" 184272343Sngie 185272343Sngie for v in '1st string' '2nd string'; do 186272343Sngie atf_check -s eq:0 -o empty -e empty \ 187272343Sngie modload -s prop_str="${v}" \ 188272343Sngie $(atf_get_srcdir)/k_helper/k_helper.kmod 189272343Sngie check_sysctl vendor.k_helper.prop_str_ok 1 190272343Sngie check_sysctl vendor.k_helper.prop_str_val "${v}" 191272343Sngie atf_check -s eq:0 -o empty -e empty modunload k_helper 192272343Sngie done 193272343Sngie touch done 194272343Sngie} 195272343Sngiesflag_cleanup() { 196272343Sngie test -f done || modunload k_helper >/dev/null 2>&1 197272343Sngie} 198272343Sngie 199272343Sngieatf_init_test_cases() 200272343Sngie{ 201272343Sngie atf_add_test_case plain 202272343Sngie atf_add_test_case bflag 203272343Sngie atf_add_test_case iflag 204272343Sngie atf_add_test_case sflag 205272343Sngie} 206