1# $NetBSD: t_quotalimit.sh,v 1.4 2012/01/18 20:51:23 bouyer Exp $ 2# 3# Copyright (c) 2011 Manuel Bouyer 4# All rights reserved. 5# 6# Redistribution and use in source and binary forms, with or without 7# modification, are permitted provided that the following conditions 8# are met: 9# 1. Redistributions of source code must retain the above copyright 10# notice, this list of conditions and the following disclaimer. 11# 2. Redistributions in binary form must reproduce the above copyright 12# notice, this list of conditions and the following disclaimer in the 13# documentation and/or other materials provided with the distribution. 14# 15# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25# POSSIBILITY OF SUCH DAMAGE. 26# 27 28for e in le; do 29 for v in 1; do 30 for q in "user" "group"; do 31 test_case_root limit_${e}_${v}_${q} limit_quota \ 32 "hit hard limit quota with ${q} enabled" -b ${e} ${v} ${q} 33 test_case_root limit_${e}_${v}_${q}_log limit_quota \ 34 "hit hard limit quota with ${q} enabled, WAPBL" -bl ${e} ${v} ${q} 35 test_case_root slimit_${e}_${v}_${q} limit_softquota \ 36 "hit soft limit quota with ${q} enabled after grace time" \ 37 -b ${e} ${v} ${q} 38 test_case_root inolimit_${e}_${v}_${q} limit_iquota \ 39 "hit hard limit ino quota with ${q} enabled" -b ${e} ${v} ${q} 40 test_case_root inolimit_${e}_${v}_${q}_log limit_iquota \ 41 "hit hard limit ino quota with ${q} enabled, WAPBL" -bl ${e} ${v} ${q} 42 test_case_root sinolimit_${e}_${v}_${q} limit_softiquota \ 43 "hit soft limit ino quota with ${q} enabled after grace time" \ 44 -b ${e} ${v} ${q} 45 test_case_root herit_defq_${e}_${v}_${q} inherit_defaultquota \ 46 "new id herit from default for ${q} quota" -b ${e} ${v} ${q} 47 test_case_root herit_defq_${e}_${v}_${q}_log inherit_defaultquota \ 48 "new id herit from default for ${q} quota, WAPBL" -bl ${e} ${v} ${q} 49 test_case_root herit_idefq_${e}_${v}_${q}_log inherit_defaultiquota \ 50 "new id herit from default for ${q} ino quota, WAPBL" -bl ${e} ${v} ${q} 51 done 52 done 53done 54 55limit_quota() 56{ 57 create_ffs_server $* 58 local q=$4 59 local expect 60 local id=1 61 62 case ${q} in 63 user) 64 expect=u 65 fail=g 66 ;; 67 group) 68 expect=g 69 fail=u 70 ;; 71 both) 72 expect="u g" 73 fail="" 74 ;; 75 *) 76 atf_fail "wrong quota type" 77 ;; 78 esac 79 80 for q in ${expect} ; do 81 atf_check -s exit:0 \ 82 env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s2k/4 -h3k/6 \ 83 -t 2h/2h ${id} 84 done 85 atf_check -s exit:0 rump.halt 86 87 #now start the server which does the limits tests 88 atf_check -s exit:0 -o ignore \ 89-e match:'test 0: write up to hard limit returned 69: Disc quota exceeded' \ 90 $(atf_get_srcdir)/h_quota2_tests -b 0 ${IMG} ${RUMP_SERVER} 91 for q in ${expect} ; do 92 atf_check -s exit:0 \ 93 -o match:'/mnt 3072 B\* 2048 B 3072 B 2:0 2 4 6 ' \ 94 env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -h ${id} 95 atf_check -s exit:0 \ 96 -o match:'daemon \+- 3 2 3 2:0 2 4 6' \ 97 env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -$q /mnt 98 done 99 rump_quota_shutdown 100} 101 102limit_softquota() 103{ 104 create_ffs_server $* 105 local q=$4 106 local expect 107 local id=1 108 109 case ${q} in 110 user) 111 expect=u 112 fail=g 113 ;; 114 group) 115 expect=g 116 fail=u 117 ;; 118 both) 119 expect="u g" 120 fail="" 121 ;; 122 *) 123 atf_fail "wrong quota type" 124 ;; 125 esac 126 127 for q in ${expect} ; do 128 atf_check -s exit:0 \ 129 env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s2k/4 -h3k/6 \ 130 -t 1s/1d ${id} 131 done 132 atf_check -s exit:0 rump.halt 133 134 #now start the server which does the limits tests 135 atf_check -s exit:0 -o ignore \ 136-e match:'test 1: write beyond the soft limit after grace time returned 69: Disc quota exceeded' \ 137 $(atf_get_srcdir)/h_quota2_tests -b 1 ${IMG} ${RUMP_SERVER} 138 for q in ${expect} ; do 139 atf_check -s exit:0 \ 140 -o match:'/mnt 2560 B\* 2048 B 3072 B none 2 4 6 ' \ 141 env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -h ${id} 142 atf_check -s exit:0 \ 143 -o match:'daemon \+- 2 2 3 none 2 4 6' \ 144 env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -$q /mnt 145 done 146 rump_quota_shutdown 147} 148 149limit_iquota() 150{ 151 create_ffs_server $* 152 local q=$4 153 local expect 154 local id=1 155 156 case ${q} in 157 user) 158 expect=u 159 fail=g 160 ;; 161 group) 162 expect=g 163 fail=u 164 ;; 165 both) 166 expect="u g" 167 fail="" 168 ;; 169 *) 170 atf_fail "wrong quota type" 171 ;; 172 esac 173 174 for q in ${expect} ; do 175 atf_check -s exit:0 \ 176 env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s2m/4 -h3m/6 \ 177 -t 2h/2h ${id} 178 done 179 atf_check -s exit:0 rump.halt 180 181 #now start the server which does the limits tests 182 atf_check -s exit:0 -o ignore \ 183-e match:'test 2: create file up to hard limit returned 69: Disc quota exceeded' \ 184 $(atf_get_srcdir)/h_quota2_tests -b 2 ${IMG} ${RUMP_SERVER} 185 for q in ${expect} ; do 186 atf_check -s exit:0 \ 187 -o match:'/mnt 3072 B 2048 K 3072 K 6 \* 4 6 2:0' \ 188 env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -h ${id} 189 atf_check -s exit:0 \ 190 -o match:'daemon -\+ 3 2048 3072 6 4 6 2:0' \ 191 env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -$q /mnt 192 done 193 rump_quota_shutdown 194} 195 196limit_softiquota() 197{ 198 create_ffs_server $* 199 local q=$4 200 local expect 201 local id=1 202 203 case ${q} in 204 user) 205 expect=u 206 fail=g 207 ;; 208 group) 209 expect=g 210 fail=u 211 ;; 212 both) 213 expect="u g" 214 fail="" 215 ;; 216 *) 217 atf_fail "wrong quota type" 218 ;; 219 esac 220 221 for q in ${expect} ; do 222 atf_check -s exit:0 \ 223 env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s2m/4 -h3m/6 \ 224 -t 1d/1s ${id} 225 done 226 atf_check -s exit:0 rump.halt 227 228 #now start the server which does the limits tests 229 atf_check -s exit:0 -o ignore \ 230-e match:'test 3: create file beyond the soft limit after grace time returned 69: Disc quota exceeded' \ 231 $(atf_get_srcdir)/h_quota2_tests -b 3 ${IMG} ${RUMP_SERVER} 232 for q in ${expect} ; do 233 atf_check -s exit:0 \ 234 -o match:'/mnt 2560 B 2048 K 3072 K 5 \* 4 6 none' \ 235 env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -h ${id} 236 atf_check -s exit:0 \ 237 -o match:'daemon -\+ 2 2048 3072 5 4 6 none' \ 238 env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -$q /mnt 239 done 240 rump_quota_shutdown 241} 242 243inherit_defaultquota() 244{ 245 create_ffs_server $* 246 local q=$4 247 local expect 248 local id=1 249 250 case ${q} in 251 user) 252 expect=u 253 fail=g 254 ;; 255 group) 256 expect=g 257 fail=u 258 ;; 259 both) 260 expect="u g" 261 fail="" 262 ;; 263 *) 264 atf_fail "wrong quota type" 265 ;; 266 esac 267 268 for q in ${expect} ; do 269 atf_check -s exit:0 \ 270 env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s2k/4 -h3k/6 \ 271 -t 2h/2h -d 272 done 273 for q in ${expect} ; do 274 atf_check -s exit:0 \ 275 -o match:'Disk quotas for .*id 1\): none' \ 276 env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -v ${id} 277 done 278 atf_check -s exit:0 rump.halt 279 280 #now start the server which does the limits tests 281 atf_check -s exit:0 -o ignore \ 282-e match:'test 0: write up to hard limit returned 69: Disc quota exceeded' \ 283 $(atf_get_srcdir)/h_quota2_tests -b 0 ${IMG} ${RUMP_SERVER} 284 for q in ${expect} ; do 285 atf_check -s exit:0 \ 286 -o match:'/mnt 3072 B\* 2048 B 3072 B 2:0 2 4 6 ' \ 287 env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -h ${id} 288 atf_check -s exit:0 \ 289 -o match:'daemon \+- 3 2 3 2:0 2 4 6' \ 290 env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -$q /mnt 291 done 292 rump_quota_shutdown 293} 294 295inherit_defaultiquota() 296{ 297 create_ffs_server $* 298 local q=$4 299 local expect 300 local id=1 301 302 case ${q} in 303 user) 304 expect=u 305 fail=g 306 ;; 307 group) 308 expect=g 309 fail=u 310 ;; 311 both) 312 expect="u g" 313 fail="" 314 ;; 315 *) 316 atf_fail "wrong quota type" 317 ;; 318 esac 319 320 for q in ${expect} ; do 321 atf_check -s exit:0 \ 322 env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s2m/4 -h3m/6 \ 323 -t 2h/2h -d 324 done 325 for q in ${expect} ; do 326 atf_check -s exit:0 \ 327 -o match:'Disk quotas for .*id 1\): none' \ 328 env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -v ${id} 329 done 330 atf_check -s exit:0 rump.halt 331 332 #now start the server which does the limits tests 333 atf_check -s exit:0 -o ignore \ 334-e match:'test 2: create file up to hard limit returned 69: Disc quota exceeded' \ 335 $(atf_get_srcdir)/h_quota2_tests -b 2 ${IMG} ${RUMP_SERVER} 336 for q in ${expect} ; do 337 atf_check -s exit:0 \ 338 -o match:'/mnt 3072 B 2048 K 3072 K 6 \* 4 6 2:0' \ 339 env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -h ${id} 340 atf_check -s exit:0 \ 341 -o match:'daemon -\+ 3 2048 3072 6 4 6 2:0' \ 342 env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -$q /mnt 343 done 344 rump_quota_shutdown 345} 346