1 1.14 rillig # $NetBSD: t_modload.sh,v 1.14 2024/04/28 07:27:41 rillig Exp $ 2 1.1 jmmv # 3 1.1 jmmv # Copyright (c) 2008 The NetBSD Foundation, Inc. 4 1.1 jmmv # All rights reserved. 5 1.1 jmmv # 6 1.1 jmmv # Redistribution and use in source and binary forms, with or without 7 1.1 jmmv # modification, are permitted provided that the following conditions 8 1.1 jmmv # are met: 9 1.1 jmmv # 1. Redistributions of source code must retain the above copyright 10 1.1 jmmv # notice, this list of conditions and the following disclaimer. 11 1.1 jmmv # 2. Redistributions in binary form must reproduce the above copyright 12 1.1 jmmv # notice, this list of conditions and the following disclaimer in the 13 1.1 jmmv # documentation and/or other materials provided with the distribution. 14 1.1 jmmv # 15 1.1 jmmv # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16 1.1 jmmv # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17 1.1 jmmv # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18 1.1 jmmv # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19 1.1 jmmv # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20 1.1 jmmv # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21 1.1 jmmv # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 1.1 jmmv # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 1.1 jmmv # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 1.1 jmmv # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 1.1 jmmv # POSSIBILITY OF SUCH DAMAGE. 26 1.1 jmmv # 27 1.1 jmmv 28 1.1 jmmv check_sysctl() { 29 1.1 jmmv echo "${1} = ${2}" >expout 30 1.14 rillig atf_check -s exit:0 -o file:expout -e empty sysctl ${1} 31 1.1 jmmv } 32 1.1 jmmv 33 1.7 jmmv atf_test_case plain cleanup 34 1.1 jmmv plain_head() { 35 1.1 jmmv atf_set "descr" "Test load without arguments" 36 1.1 jmmv atf_set "require.user" "root" 37 1.1 jmmv } 38 1.1 jmmv plain_body() { 39 1.10 jruoho 40 1.11 jruoho # XXX: Adjust when modctl(8) fails consistently. 41 1.10 jruoho # 42 1.12 pgoyette $(atf_get_srcdir)/k_helper3 \ 43 1.11 jruoho "%s/k_helper/k_helper.kmod" $(atf_get_srcdir) 44 1.10 jruoho 45 1.13 jruoho if [ $? -eq 1 ] || [ $? -eq 78 ]; then 46 1.10 jruoho atf_skip "host does not support modules" 47 1.10 jruoho fi 48 1.10 jruoho 49 1.1 jmmv cat >experr <<EOF 50 1.1 jmmv modload: No such file or directory 51 1.1 jmmv EOF 52 1.14 rillig atf_check -s exit:1 -o empty -e ignore modload non-existent.o 53 1.1 jmmv 54 1.14 rillig atf_check -s exit:0 -o empty -e empty \ 55 1.5 jmmv modload $(atf_get_srcdir)/k_helper/k_helper.kmod 56 1.1 jmmv check_sysctl vendor.k_helper.present 1 57 1.1 jmmv check_sysctl vendor.k_helper.prop_int_ok 0 58 1.1 jmmv check_sysctl vendor.k_helper.prop_str_ok 0 59 1.14 rillig atf_check -s exit:0 -o empty -e empty modunload k_helper 60 1.9 jmmv touch done 61 1.1 jmmv } 62 1.1 jmmv plain_cleanup() { 63 1.9 jmmv test -f done || modunload k_helper >/dev/null 2>&1 64 1.1 jmmv } 65 1.1 jmmv 66 1.7 jmmv atf_test_case bflag cleanup 67 1.1 jmmv bflag_head() { 68 1.1 jmmv atf_set "descr" "Test the -b flag" 69 1.1 jmmv atf_set "require.user" "root" 70 1.1 jmmv } 71 1.1 jmmv bflag_body() { 72 1.1 jmmv echo "Checking error conditions" 73 1.1 jmmv 74 1.14 rillig atf_check -s exit:1 -o empty -e save:stderr \ 75 1.5 jmmv modload -b foo k_helper.kmod 76 1.14 rillig atf_check -s exit:0 -o ignore -e empty \ 77 1.5 jmmv grep 'Invalid parameter.*foo' stderr 78 1.5 jmmv 79 1.14 rillig atf_check -s exit:1 -o empty -e save:stderr \ 80 1.5 jmmv modload -b foo= k_helper.kmod 81 1.14 rillig atf_check -s exit:0 -o ignore -e empty \ 82 1.5 jmmv grep 'Invalid boolean value' stderr 83 1.5 jmmv 84 1.14 rillig atf_check -s exit:1 -o empty -e save:stderr \ 85 1.5 jmmv modload -b foo=bar k_helper.kmod 86 1.14 rillig atf_check -s exit:0 -o ignore -e empty \ 87 1.5 jmmv grep 'Invalid boolean value.*bar' stderr 88 1.5 jmmv 89 1.14 rillig atf_check -s exit:1 -o empty -e save:stderr \ 90 1.5 jmmv modload -b foo=falsea k_helper.kmod 91 1.14 rillig atf_check -s exit:0 -o ignore -e empty \ 92 1.5 jmmv grep 'Invalid boolean value.*falsea' stderr 93 1.5 jmmv 94 1.14 rillig atf_check -s exit:1 -o empty -e save:stderr \ 95 1.5 jmmv modload -b foo=truea k_helper.kmod 96 1.14 rillig atf_check -s exit:0 -o ignore -e empty \ 97 1.5 jmmv grep 'Invalid boolean value.*truea' stderr 98 1.1 jmmv 99 1.1 jmmv # TODO Once sysctl(8) supports CTLTYPE_BOOL nodes. 100 1.1 jmmv #echo "Checking valid values" 101 1.1 jmmv } 102 1.1 jmmv bflag_cleanup() { 103 1.9 jmmv modunload k_helper >/dev/null 2>&1 || true 104 1.1 jmmv } 105 1.1 jmmv 106 1.7 jmmv atf_test_case iflag cleanup 107 1.1 jmmv iflag_head() { 108 1.1 jmmv atf_set "descr" "Test the -i flag" 109 1.1 jmmv atf_set "require.user" "root" 110 1.1 jmmv } 111 1.1 jmmv iflag_body() { 112 1.10 jruoho 113 1.11 jruoho # XXX: Adjust when modctl(8) fails consistently. 114 1.10 jruoho # 115 1.12 pgoyette $(atf_get_srcdir)/k_helper3 \ 116 1.11 jruoho "%s/k_helper/k_helper.kmod" $(atf_get_srcdir) 117 1.10 jruoho 118 1.13 jruoho if [ $? -eq 1 ] || [ $? -eq 78 ]; then 119 1.10 jruoho atf_skip "host does not support modules" 120 1.10 jruoho fi 121 1.10 jruoho 122 1.1 jmmv echo "Checking error conditions" 123 1.1 jmmv 124 1.14 rillig atf_check -s exit:1 -o empty -e save:stderr modload -i foo \ 125 1.5 jmmv k_helper/k_helper.kmod 126 1.14 rillig atf_check -s exit:0 -o ignore -e empty \ 127 1.5 jmmv grep 'Invalid parameter.*foo' stderr 128 1.5 jmmv 129 1.14 rillig atf_check -s exit:1 -o empty -e save:stderr modload -i foo= \ 130 1.5 jmmv k_helper/k_helper.kmod 131 1.14 rillig atf_check -s exit:0 -o ignore -e empty \ 132 1.5 jmmv grep 'Invalid integer value' stderr 133 1.5 jmmv 134 1.14 rillig atf_check -s exit:1 -o empty -e save:stderr \ 135 1.5 jmmv modload -i foo=bar k_helper/k_helper.kmod 136 1.14 rillig atf_check -s exit:0 -o ignore -e empty \ 137 1.5 jmmv grep 'Invalid integer value.*bar' stderr 138 1.5 jmmv 139 1.14 rillig atf_check -s exit:1 -o empty -e save:stderr \ 140 1.5 jmmv modload -i foo=123a k_helper/k_helper.kmod 141 1.14 rillig atf_check -s exit:0 -o ignore -e empty \ 142 1.5 jmmv grep 'Invalid integer value.*123a' stderr 143 1.1 jmmv 144 1.1 jmmv echo "Checking valid values" 145 1.1 jmmv 146 1.1 jmmv for v in 5 10; do 147 1.14 rillig atf_check -s exit:0 -o empty -e empty \ 148 1.5 jmmv modload -i prop_int="${v}" \ 149 1.5 jmmv $(atf_get_srcdir)/k_helper/k_helper.kmod 150 1.1 jmmv check_sysctl vendor.k_helper.prop_int_ok 1 151 1.1 jmmv check_sysctl vendor.k_helper.prop_int_val "${v}" 152 1.14 rillig atf_check -s exit:0 -o empty -e empty modunload k_helper 153 1.1 jmmv done 154 1.9 jmmv touch done 155 1.1 jmmv } 156 1.1 jmmv iflag_cleanup() { 157 1.9 jmmv test -f done || modunload k_helper >/dev/null 2>&1 158 1.1 jmmv } 159 1.1 jmmv 160 1.7 jmmv atf_test_case sflag cleanup 161 1.1 jmmv sflag_head() { 162 1.1 jmmv atf_set "descr" "Test the -s flag" 163 1.1 jmmv atf_set "require.user" "root" 164 1.1 jmmv } 165 1.1 jmmv sflag_body() { 166 1.10 jruoho 167 1.11 jruoho # XXX: Adjust when modctl(8) fails consistently. 168 1.10 jruoho # 169 1.12 pgoyette $(atf_get_srcdir)/k_helper3 \ 170 1.11 jruoho "%s/k_helper/k_helper.kmod" $(atf_get_srcdir) 171 1.10 jruoho 172 1.13 jruoho if [ $? -eq 1 ] || [ $? -eq 78 ]; then 173 1.10 jruoho atf_skip "host does not support modules" 174 1.10 jruoho fi 175 1.10 jruoho 176 1.1 jmmv echo "Checking error conditions" 177 1.1 jmmv 178 1.14 rillig atf_check -s exit:1 -o empty -e save:stderr modload -s foo \ 179 1.5 jmmv k_helper/k_helper.kmod 180 1.14 rillig atf_check -s exit:0 -o ignore -e empty \ 181 1.5 jmmv grep 'Invalid parameter.*foo' stderr 182 1.1 jmmv 183 1.1 jmmv echo "Checking valid values" 184 1.1 jmmv 185 1.1 jmmv for v in '1st string' '2nd string'; do 186 1.14 rillig atf_check -s exit:0 -o empty -e empty \ 187 1.5 jmmv modload -s prop_str="${v}" \ 188 1.5 jmmv $(atf_get_srcdir)/k_helper/k_helper.kmod 189 1.1 jmmv check_sysctl vendor.k_helper.prop_str_ok 1 190 1.1 jmmv check_sysctl vendor.k_helper.prop_str_val "${v}" 191 1.14 rillig atf_check -s exit:0 -o empty -e empty modunload k_helper 192 1.1 jmmv done 193 1.9 jmmv touch done 194 1.1 jmmv } 195 1.1 jmmv sflag_cleanup() { 196 1.9 jmmv test -f done || modunload k_helper >/dev/null 2>&1 197 1.1 jmmv } 198 1.1 jmmv 199 1.1 jmmv atf_init_test_cases() 200 1.1 jmmv { 201 1.1 jmmv atf_add_test_case plain 202 1.1 jmmv atf_add_test_case bflag 203 1.1 jmmv atf_add_test_case iflag 204 1.1 jmmv atf_add_test_case sflag 205 1.1 jmmv } 206