1272343Sngie# $NetBSD: t_quotalimit.sh,v 1.4 2012/01/18 20:51:23 bouyer Exp $ 2272343Sngie# 3272343Sngie# Copyright (c) 2011 Manuel Bouyer 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 28272343Sngiefor e in le; do 29272343Sngie for v in 1; do 30272343Sngie for q in "user" "group"; do 31272343Sngie test_case_root limit_${e}_${v}_${q} limit_quota \ 32272343Sngie "hit hard limit quota with ${q} enabled" -b ${e} ${v} ${q} 33272343Sngie test_case_root limit_${e}_${v}_${q}_log limit_quota \ 34272343Sngie "hit hard limit quota with ${q} enabled, WAPBL" -bl ${e} ${v} ${q} 35272343Sngie test_case_root slimit_${e}_${v}_${q} limit_softquota \ 36272343Sngie "hit soft limit quota with ${q} enabled after grace time" \ 37272343Sngie -b ${e} ${v} ${q} 38272343Sngie test_case_root inolimit_${e}_${v}_${q} limit_iquota \ 39272343Sngie "hit hard limit ino quota with ${q} enabled" -b ${e} ${v} ${q} 40272343Sngie test_case_root inolimit_${e}_${v}_${q}_log limit_iquota \ 41272343Sngie "hit hard limit ino quota with ${q} enabled, WAPBL" -bl ${e} ${v} ${q} 42272343Sngie test_case_root sinolimit_${e}_${v}_${q} limit_softiquota \ 43272343Sngie "hit soft limit ino quota with ${q} enabled after grace time" \ 44272343Sngie -b ${e} ${v} ${q} 45272343Sngie test_case_root herit_defq_${e}_${v}_${q} inherit_defaultquota \ 46272343Sngie "new id herit from default for ${q} quota" -b ${e} ${v} ${q} 47272343Sngie test_case_root herit_defq_${e}_${v}_${q}_log inherit_defaultquota \ 48272343Sngie "new id herit from default for ${q} quota, WAPBL" -bl ${e} ${v} ${q} 49272343Sngie test_case_root herit_idefq_${e}_${v}_${q}_log inherit_defaultiquota \ 50272343Sngie "new id herit from default for ${q} ino quota, WAPBL" -bl ${e} ${v} ${q} 51272343Sngie done 52272343Sngie done 53272343Sngiedone 54272343Sngie 55272343Sngielimit_quota() 56272343Sngie{ 57272343Sngie create_ffs_server $* 58272343Sngie local q=$4 59272343Sngie local expect 60272343Sngie local id=1 61272343Sngie 62272343Sngie case ${q} in 63272343Sngie user) 64272343Sngie expect=u 65272343Sngie fail=g 66272343Sngie ;; 67272343Sngie group) 68272343Sngie expect=g 69272343Sngie fail=u 70272343Sngie ;; 71272343Sngie both) 72272343Sngie expect="u g" 73272343Sngie fail="" 74272343Sngie ;; 75272343Sngie *) 76272343Sngie atf_fail "wrong quota type" 77272343Sngie ;; 78272343Sngie esac 79272343Sngie 80272343Sngie for q in ${expect} ; do 81272343Sngie atf_check -s exit:0 \ 82272343Sngie env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s2k/4 -h3k/6 \ 83272343Sngie -t 2h/2h ${id} 84272343Sngie done 85272343Sngie atf_check -s exit:0 rump.halt 86272343Sngie 87272343Sngie #now start the server which does the limits tests 88272343Sngie atf_check -s exit:0 -o ignore \ 89272343Sngie-e match:'test 0: write up to hard limit returned 69: Disc quota exceeded' \ 90272343Sngie $(atf_get_srcdir)/h_quota2_tests -b 0 ${IMG} ${RUMP_SERVER} 91272343Sngie for q in ${expect} ; do 92272343Sngie atf_check -s exit:0 \ 93272343Sngie -o match:'/mnt 3072 B\* 2048 B 3072 B 2:0 2 4 6 ' \ 94272343Sngie env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -h ${id} 95272343Sngie atf_check -s exit:0 \ 96272343Sngie -o match:'daemon \+- 3 2 3 2:0 2 4 6' \ 97272343Sngie env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -$q /mnt 98272343Sngie done 99272343Sngie rump_quota_shutdown 100272343Sngie} 101272343Sngie 102272343Sngielimit_softquota() 103272343Sngie{ 104272343Sngie create_ffs_server $* 105272343Sngie local q=$4 106272343Sngie local expect 107272343Sngie local id=1 108272343Sngie 109272343Sngie case ${q} in 110272343Sngie user) 111272343Sngie expect=u 112272343Sngie fail=g 113272343Sngie ;; 114272343Sngie group) 115272343Sngie expect=g 116272343Sngie fail=u 117272343Sngie ;; 118272343Sngie both) 119272343Sngie expect="u g" 120272343Sngie fail="" 121272343Sngie ;; 122272343Sngie *) 123272343Sngie atf_fail "wrong quota type" 124272343Sngie ;; 125272343Sngie esac 126272343Sngie 127272343Sngie for q in ${expect} ; do 128272343Sngie atf_check -s exit:0 \ 129272343Sngie env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s2k/4 -h3k/6 \ 130272343Sngie -t 1s/1d ${id} 131272343Sngie done 132272343Sngie atf_check -s exit:0 rump.halt 133272343Sngie 134272343Sngie #now start the server which does the limits tests 135272343Sngie atf_check -s exit:0 -o ignore \ 136272343Sngie-e match:'test 1: write beyond the soft limit after grace time returned 69: Disc quota exceeded' \ 137272343Sngie $(atf_get_srcdir)/h_quota2_tests -b 1 ${IMG} ${RUMP_SERVER} 138272343Sngie for q in ${expect} ; do 139272343Sngie atf_check -s exit:0 \ 140272343Sngie -o match:'/mnt 2560 B\* 2048 B 3072 B none 2 4 6 ' \ 141272343Sngie env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -h ${id} 142272343Sngie atf_check -s exit:0 \ 143272343Sngie -o match:'daemon \+- 2 2 3 none 2 4 6' \ 144272343Sngie env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -$q /mnt 145272343Sngie done 146272343Sngie rump_quota_shutdown 147272343Sngie} 148272343Sngie 149272343Sngielimit_iquota() 150272343Sngie{ 151272343Sngie create_ffs_server $* 152272343Sngie local q=$4 153272343Sngie local expect 154272343Sngie local id=1 155272343Sngie 156272343Sngie case ${q} in 157272343Sngie user) 158272343Sngie expect=u 159272343Sngie fail=g 160272343Sngie ;; 161272343Sngie group) 162272343Sngie expect=g 163272343Sngie fail=u 164272343Sngie ;; 165272343Sngie both) 166272343Sngie expect="u g" 167272343Sngie fail="" 168272343Sngie ;; 169272343Sngie *) 170272343Sngie atf_fail "wrong quota type" 171272343Sngie ;; 172272343Sngie esac 173272343Sngie 174272343Sngie for q in ${expect} ; do 175272343Sngie atf_check -s exit:0 \ 176272343Sngie env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s2m/4 -h3m/6 \ 177272343Sngie -t 2h/2h ${id} 178272343Sngie done 179272343Sngie atf_check -s exit:0 rump.halt 180272343Sngie 181272343Sngie #now start the server which does the limits tests 182272343Sngie atf_check -s exit:0 -o ignore \ 183272343Sngie-e match:'test 2: create file up to hard limit returned 69: Disc quota exceeded' \ 184272343Sngie $(atf_get_srcdir)/h_quota2_tests -b 2 ${IMG} ${RUMP_SERVER} 185272343Sngie for q in ${expect} ; do 186272343Sngie atf_check -s exit:0 \ 187272343Sngie -o match:'/mnt 3072 B 2048 K 3072 K 6 \* 4 6 2:0' \ 188272343Sngie env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -h ${id} 189272343Sngie atf_check -s exit:0 \ 190272343Sngie -o match:'daemon -\+ 3 2048 3072 6 4 6 2:0' \ 191272343Sngie env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -$q /mnt 192272343Sngie done 193272343Sngie rump_quota_shutdown 194272343Sngie} 195272343Sngie 196272343Sngielimit_softiquota() 197272343Sngie{ 198272343Sngie create_ffs_server $* 199272343Sngie local q=$4 200272343Sngie local expect 201272343Sngie local id=1 202272343Sngie 203272343Sngie case ${q} in 204272343Sngie user) 205272343Sngie expect=u 206272343Sngie fail=g 207272343Sngie ;; 208272343Sngie group) 209272343Sngie expect=g 210272343Sngie fail=u 211272343Sngie ;; 212272343Sngie both) 213272343Sngie expect="u g" 214272343Sngie fail="" 215272343Sngie ;; 216272343Sngie *) 217272343Sngie atf_fail "wrong quota type" 218272343Sngie ;; 219272343Sngie esac 220272343Sngie 221272343Sngie for q in ${expect} ; do 222272343Sngie atf_check -s exit:0 \ 223272343Sngie env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s2m/4 -h3m/6 \ 224272343Sngie -t 1d/1s ${id} 225272343Sngie done 226272343Sngie atf_check -s exit:0 rump.halt 227272343Sngie 228272343Sngie #now start the server which does the limits tests 229272343Sngie atf_check -s exit:0 -o ignore \ 230272343Sngie-e match:'test 3: create file beyond the soft limit after grace time returned 69: Disc quota exceeded' \ 231272343Sngie $(atf_get_srcdir)/h_quota2_tests -b 3 ${IMG} ${RUMP_SERVER} 232272343Sngie for q in ${expect} ; do 233272343Sngie atf_check -s exit:0 \ 234272343Sngie -o match:'/mnt 2560 B 2048 K 3072 K 5 \* 4 6 none' \ 235272343Sngie env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -h ${id} 236272343Sngie atf_check -s exit:0 \ 237272343Sngie -o match:'daemon -\+ 2 2048 3072 5 4 6 none' \ 238272343Sngie env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -$q /mnt 239272343Sngie done 240272343Sngie rump_quota_shutdown 241272343Sngie} 242272343Sngie 243272343Sngieinherit_defaultquota() 244272343Sngie{ 245272343Sngie create_ffs_server $* 246272343Sngie local q=$4 247272343Sngie local expect 248272343Sngie local id=1 249272343Sngie 250272343Sngie case ${q} in 251272343Sngie user) 252272343Sngie expect=u 253272343Sngie fail=g 254272343Sngie ;; 255272343Sngie group) 256272343Sngie expect=g 257272343Sngie fail=u 258272343Sngie ;; 259272343Sngie both) 260272343Sngie expect="u g" 261272343Sngie fail="" 262272343Sngie ;; 263272343Sngie *) 264272343Sngie atf_fail "wrong quota type" 265272343Sngie ;; 266272343Sngie esac 267272343Sngie 268272343Sngie for q in ${expect} ; do 269272343Sngie atf_check -s exit:0 \ 270272343Sngie env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s2k/4 -h3k/6 \ 271272343Sngie -t 2h/2h -d 272272343Sngie done 273272343Sngie for q in ${expect} ; do 274272343Sngie atf_check -s exit:0 \ 275272343Sngie -o match:'Disk quotas for .*id 1\): none' \ 276272343Sngie env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -v ${id} 277272343Sngie done 278272343Sngie atf_check -s exit:0 rump.halt 279272343Sngie 280272343Sngie #now start the server which does the limits tests 281272343Sngie atf_check -s exit:0 -o ignore \ 282272343Sngie-e match:'test 0: write up to hard limit returned 69: Disc quota exceeded' \ 283272343Sngie $(atf_get_srcdir)/h_quota2_tests -b 0 ${IMG} ${RUMP_SERVER} 284272343Sngie for q in ${expect} ; do 285272343Sngie atf_check -s exit:0 \ 286272343Sngie -o match:'/mnt 3072 B\* 2048 B 3072 B 2:0 2 4 6 ' \ 287272343Sngie env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -h ${id} 288272343Sngie atf_check -s exit:0 \ 289272343Sngie -o match:'daemon \+- 3 2 3 2:0 2 4 6' \ 290272343Sngie env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -$q /mnt 291272343Sngie done 292272343Sngie rump_quota_shutdown 293272343Sngie} 294272343Sngie 295272343Sngieinherit_defaultiquota() 296272343Sngie{ 297272343Sngie create_ffs_server $* 298272343Sngie local q=$4 299272343Sngie local expect 300272343Sngie local id=1 301272343Sngie 302272343Sngie case ${q} in 303272343Sngie user) 304272343Sngie expect=u 305272343Sngie fail=g 306272343Sngie ;; 307272343Sngie group) 308272343Sngie expect=g 309272343Sngie fail=u 310272343Sngie ;; 311272343Sngie both) 312272343Sngie expect="u g" 313272343Sngie fail="" 314272343Sngie ;; 315272343Sngie *) 316272343Sngie atf_fail "wrong quota type" 317272343Sngie ;; 318272343Sngie esac 319272343Sngie 320272343Sngie for q in ${expect} ; do 321272343Sngie atf_check -s exit:0 \ 322272343Sngie env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s2m/4 -h3m/6 \ 323272343Sngie -t 2h/2h -d 324272343Sngie done 325272343Sngie for q in ${expect} ; do 326272343Sngie atf_check -s exit:0 \ 327272343Sngie -o match:'Disk quotas for .*id 1\): none' \ 328272343Sngie env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -v ${id} 329272343Sngie done 330272343Sngie atf_check -s exit:0 rump.halt 331272343Sngie 332272343Sngie #now start the server which does the limits tests 333272343Sngie atf_check -s exit:0 -o ignore \ 334272343Sngie-e match:'test 2: create file up to hard limit returned 69: Disc quota exceeded' \ 335272343Sngie $(atf_get_srcdir)/h_quota2_tests -b 2 ${IMG} ${RUMP_SERVER} 336272343Sngie for q in ${expect} ; do 337272343Sngie atf_check -s exit:0 \ 338272343Sngie -o match:'/mnt 3072 B 2048 K 3072 K 6 \* 4 6 2:0' \ 339272343Sngie env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -h ${id} 340272343Sngie atf_check -s exit:0 \ 341272343Sngie -o match:'daemon -\+ 3 2048 3072 6 4 6 2:0' \ 342272343Sngie env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -$q /mnt 343272343Sngie done 344272343Sngie rump_quota_shutdown 345272343Sngie} 346