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