1*a289199bSmsaitoh# $NetBSD: t_miscquota.sh,v 1.9 2021/12/05 07:51:26 msaitoh Exp $ 2063f96f3Sbouyer# 3063f96f3Sbouyer# Copyright (c) 2011 Manuel Bouyer 4063f96f3Sbouyer# All rights reserved. 5063f96f3Sbouyer# 6063f96f3Sbouyer# Redistribution and use in source and binary forms, with or without 7063f96f3Sbouyer# modification, are permitted provided that the following conditions 8063f96f3Sbouyer# are met: 9063f96f3Sbouyer# 1. Redistributions of source code must retain the above copyright 10063f96f3Sbouyer# notice, this list of conditions and the following disclaimer. 11063f96f3Sbouyer# 2. Redistributions in binary form must reproduce the above copyright 12063f96f3Sbouyer# notice, this list of conditions and the following disclaimer in the 13063f96f3Sbouyer# documentation and/or other materials provided with the distribution. 14063f96f3Sbouyer# 15063f96f3Sbouyer# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16063f96f3Sbouyer# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17063f96f3Sbouyer# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18063f96f3Sbouyer# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19063f96f3Sbouyer# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20063f96f3Sbouyer# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21063f96f3Sbouyer# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22063f96f3Sbouyer# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23063f96f3Sbouyer# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24063f96f3Sbouyer# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25063f96f3Sbouyer# POSSIBILITY OF SUCH DAMAGE. 26063f96f3Sbouyer# 27063f96f3Sbouyer 28063f96f3Sbouyertest_case_root walk_list_user quota_walk_list \ 29063f96f3Sbouyer "walk user quota list over several disk blocks" -b le 1 user 30063f96f3Sbouyer 31063f96f3Sbouyertest_case_root psnapshot_user quota_snap \ 32*a289199bSmsaitoh "create a persistent snapshot of quota-enabled fs, and do some writes" \ 33063f96f3Sbouyer -b le 1 user 34063f96f3Sbouyer 35063f96f3Sbouyertest_case_root npsnapshot_user quota_snap \ 36*a289199bSmsaitoh "create a non-persistent snapshot of quota-enabled fs, and do some writes" \ 37063f96f3Sbouyer -boL le 1 user 38063f96f3Sbouyer 39063f96f3Sbouyertest_case_root psnapshot_unconf_user quota_snap \ 40*a289199bSmsaitoh "create a persistent snapshot of quota-enabled fs, and do some writes and unconf" \ 41063f96f3Sbouyer -boC le 1 user 42063f96f3Sbouyer 43063f96f3Sbouyertest_case_root npsnapshot_unconf_user quota_snap \ 44*a289199bSmsaitoh "create a non-persistent snapshot of quota-enabled fs, and do some writes and unconf" \ 45063f96f3Sbouyer -boLC le 1 user 46063f96f3Sbouyer 47063f96f3Sbouyertest_case log_unlink quota_log \ 48063f96f3Sbouyer "an unlinked file cleaned by the log replay should update quota" \ 49063f96f3Sbouyer -l le 1 user 50063f96f3Sbouyer 51063f96f3Sbouyertest_case log_unlink_remount quota_log \ 52063f96f3Sbouyer "an unlinked file cleaned by the log replay after remount" \ 53063f96f3Sbouyer -oRL le 1 user 54063f96f3Sbouyer 55063f96f3Sbouyer 5676ad4067Sdhollandtest_case_root default_deny_user quota_default_deny \ 57f800b89bSbouyer "new quota entry denied by default entry" 5 -b le 1 user 58f800b89bSbouyer 5976ad4067Sdhollandtest_case_root default_deny_user_big quota_default_deny \ 60f800b89bSbouyer "new quota entry denied by default entry, with list on more than one block" 5000 -b le 1 user 61f800b89bSbouyer 62f800b89bSbouyer 63063f96f3Sbouyerquota_walk_list() 64063f96f3Sbouyer{ 6594276795Sbouyer create_ffs_server $* 66063f96f3Sbouyer local q=$4 67063f96f3Sbouyer local expect 68063f96f3Sbouyer 69063f96f3Sbouyer case ${q} in 70063f96f3Sbouyer user) 71063f96f3Sbouyer expect=u 72063f96f3Sbouyer fail=g 73063f96f3Sbouyer ;; 74063f96f3Sbouyer group) 75063f96f3Sbouyer expect=g 76063f96f3Sbouyer fail=u 77063f96f3Sbouyer ;; 78063f96f3Sbouyer *) 79063f96f3Sbouyer atf_fail "wrong quota type" 80063f96f3Sbouyer ;; 81063f96f3Sbouyer esac 82063f96f3Sbouyer 83063f96f3Sbouyer # create 100 users, all in the same hash list 84063f96f3Sbouyer local i=1; 85063f96f3Sbouyer while [ $i -lt 101 ]; do 86063f96f3Sbouyer atf_check -s exit:0 \ 8737628c8cSbouyer env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -${expect} \ 88063f96f3Sbouyer -s10k/20 -h40M/50k -t 2W/3D $((i * 4096)) 89063f96f3Sbouyer i=$((i + 1)) 90063f96f3Sbouyer done 91063f96f3Sbouyer # do a repquota 9225693661Sdholland atf_check -s exit:0 -o 'match:user 409600 block *81920 20 0' \ 9337628c8cSbouyer env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -x -${expect} /mnt 9494276795Sbouyer rump_quota_shutdown 95063f96f3Sbouyer} 96063f96f3Sbouyer 97063f96f3Sbouyerquota_snap() 98063f96f3Sbouyer{ 99063f96f3Sbouyer local flag=$1; shift 10094276795Sbouyer create_ffs $* 101063f96f3Sbouyer local q=$3 102063f96f3Sbouyer local expect 103063f96f3Sbouyer 104063f96f3Sbouyer case ${q} in 105063f96f3Sbouyer user) 106063f96f3Sbouyer expect=u 107063f96f3Sbouyer fail=g 108063f96f3Sbouyer ;; 109063f96f3Sbouyer group) 110063f96f3Sbouyer expect=g 111063f96f3Sbouyer fail=u 112063f96f3Sbouyer ;; 113063f96f3Sbouyer *) 114063f96f3Sbouyer atf_fail "wrong quota type" 115063f96f3Sbouyer ;; 116063f96f3Sbouyer esac 117063f96f3Sbouyer 118063f96f3Sbouyer #start our server which takes a snapshot 119063f96f3Sbouyer atf_check -s exit:0 -o ignore \ 120063f96f3Sbouyer $(atf_get_srcdir)/h_quota2_tests ${flag} 4 ${IMG} ${RUMP_SERVER} 121063f96f3Sbouyer # create a few users 122063f96f3Sbouyer local i=1; 123063f96f3Sbouyer while [ $i -lt 11 ]; do 124063f96f3Sbouyer atf_check -s exit:0 \ 12537628c8cSbouyer env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -${expect} \ 126063f96f3Sbouyer -s10k/20 -h40M/50k -t 2W/3D $i 127063f96f3Sbouyer i=$((i + 1)) 128063f96f3Sbouyer done 129063f96f3Sbouyer # we should have 5 files (root + 4 regular files) 130063f96f3Sbouyer atf_check -s exit:0 \ 131063f96f3Sbouyer -o 'match:- - 7days 5 - - 7days' \ 13237628c8cSbouyer env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -av 133063f96f3Sbouyer #shutdown and check filesystem 13494276795Sbouyer rump_quota_shutdown 135063f96f3Sbouyer} 136063f96f3Sbouyer 137063f96f3Sbouyerquota_log() 138063f96f3Sbouyer{ 139063f96f3Sbouyer local srv2args=$1; shift 14094276795Sbouyer create_ffs $* 141063f96f3Sbouyer local q=$3 142063f96f3Sbouyer local expect 143063f96f3Sbouyer 144063f96f3Sbouyer case ${q} in 145063f96f3Sbouyer user) 146063f96f3Sbouyer expect=u 147063f96f3Sbouyer fail=g 148063f96f3Sbouyer ;; 149063f96f3Sbouyer group) 150063f96f3Sbouyer expect=g 151063f96f3Sbouyer fail=u 152063f96f3Sbouyer ;; 153063f96f3Sbouyer *) 154063f96f3Sbouyer atf_fail "wrong quota type" 155063f96f3Sbouyer ;; 156063f96f3Sbouyer esac 157063f96f3Sbouyer 158063f96f3Sbouyer #start our server which create a file and unlink while keeping 159063f96f3Sbouyer # it open. The server halts itself without flush 160063f96f3Sbouyer atf_check -s exit:0 -o ignore \ 161063f96f3Sbouyer $(atf_get_srcdir)/h_quota2_tests -loU 5 ${IMG} ${RUMP_SERVER} 162063f96f3Sbouyer # we should have one unlinked file, but the log covers it. 163063f96f3Sbouyer atf_check -s exit:0 -o match:'3 files' -e ignore \ 164063f96f3Sbouyer fsck_ffs -nf -F ${IMG} 165063f96f3Sbouyer # have a kernel mount the fs again; it should cleanup the 166063f96f3Sbouyer # unlinked file 167063f96f3Sbouyer atf_check -o ignore -e ignore $(atf_get_srcdir)/h_quota2_tests \ 168063f96f3Sbouyer ${srv2args} -b 5 ${IMG} ${RUMP_SERVER} 169063f96f3Sbouyer #shutdown and check filesystem 17094276795Sbouyer rump_quota_shutdown 171063f96f3Sbouyer} 172f800b89bSbouyer 17376ad4067Sdhollandquota_default_deny() 174f800b89bSbouyer{ 175f800b89bSbouyer local nusers=$1; shift 176f800b89bSbouyer create_ffs_server $* 177f800b89bSbouyer local q=$4 178f800b89bSbouyer local expect 179f800b89bSbouyer 180f800b89bSbouyer case ${q} in 181f800b89bSbouyer user) 182f800b89bSbouyer expect=u 183f800b89bSbouyer fail=g 184f800b89bSbouyer ;; 185f800b89bSbouyer group) 186f800b89bSbouyer expect=g 187f800b89bSbouyer fail=u 188f800b89bSbouyer ;; 189f800b89bSbouyer *) 190f800b89bSbouyer atf_fail "wrong quota type" 191f800b89bSbouyer ;; 192f800b89bSbouyer esac 193f800b89bSbouyer 194f800b89bSbouyer # create $nusers users, so we are sure the free list has entries 195f800b89bSbouyer # from block 1. Start from 10, as non-root id is 1. 196f800b89bSbouyer # set default to deny all 197f800b89bSbouyer ( echo "@format netbsd-quota-dump v1" 198f800b89bSbouyer echo "# idtype id objtype hard soft usage expire grace" 199f800b89bSbouyer echo "$q default block 0 0 0 0 0" 200f800b89bSbouyer echo "$q default file 0 0 0 0 0" 201f800b89bSbouyer local i=10; 202f800b89bSbouyer while [ $i -lt $(($nusers + 10)) ]; do 203f800b89bSbouyer echo "$q $i block 0 0 0 0 0" 204f800b89bSbouyer echo "$q $i file 0 0 0 0 0" 205f800b89bSbouyer i=$((i + 1)) 206f800b89bSbouyer done 207f800b89bSbouyer ) | atf_check -s exit:0 \ 208f800b89bSbouyer env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quotarestore -d /mnt 209f800b89bSbouyer atf_check -s exit:0 rump.halt 210f800b89bSbouyer #now start the server which does the limits tests 211f800b89bSbouyer $(atf_get_srcdir)/h_quota2_tests -oC -b 0 ${IMG} ${RUMP_SERVER} 212f800b89bSbouyer rump_quota_shutdown 213f800b89bSbouyer} 214