Home | History | Annotate | Line # | Download | only in ffs
      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 
     28 for 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
     53 done
     54 
     55 limit_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 
    102 limit_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 
    149 limit_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 
    196 limit_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 
    243 inherit_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 
    295 inherit_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