t_setquota.sh revision 272345
1184588Sdfr# $NetBSD: t_setquota.sh,v 1.4 2012/01/18 20:51:23 bouyer Exp $ 
2184588Sdfr#
3184588Sdfr#  Copyright (c) 2011 Manuel Bouyer
4184588Sdfr#  All rights reserved.
5184588Sdfr# 
6184588Sdfr#  Redistribution and use in source and binary forms, with or without
7184588Sdfr#  modification, are permitted provided that the following conditions
8184588Sdfr#  are met:
9184588Sdfr#  1. Redistributions of source code must retain the above copyright
10184588Sdfr#     notice, this list of conditions and the following disclaimer.
11184588Sdfr#  2. Redistributions in binary form must reproduce the above copyright
12184588Sdfr#     notice, this list of conditions and the following disclaimer in the
13184588Sdfr#     documentation and/or other materials provided with the distribution.
14184588Sdfr# 
15184588Sdfr#  THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
16184588Sdfr#  ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17184588Sdfr#  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18184588Sdfr#  PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
19184588Sdfr#  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20184588Sdfr#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21184588Sdfr#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22184588Sdfr#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23184588Sdfr#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24184588Sdfr#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25184588Sdfr#  POSSIBILITY OF SUCH DAMAGE.
26184588Sdfr#
27184588Sdfr
28184588Sdfrfor e in le be; do
29184588Sdfr  for v in 1 2; do
30184588Sdfr    for q in "user" "group"; do
31184588Sdfr      test_case_root set_${e}_${v}_${q} set_quota \
32184588Sdfr	 "set quota with ${q} enabled" -b ${e} ${v} ${q}
33184588Sdfr      test_case_root set_new_${e}_${v}_${q} set_quota_new \
34184588Sdfr	 "set quota for new id with ${q} enabled" -b ${e} ${v} ${q}
35184588Sdfr      test_case_root set_default_${e}_${v}_${q} set_quota_default \
36184588Sdfr	 "set default quota with ${q} enabled" -b ${e} ${v} ${q}
37184588Sdfr    done
38184588Sdfr    test_case_root set_${e}_${v}_"both" set_quota \
39184588Sdfr	 "set quota with both enabled" -b ${e} ${v} "both"
40184588Sdfr    test_case_root set_new_${e}_${v}_"both" set_quota_new \
41184588Sdfr	 "set quota for new id with both enabled" -b ${e} ${v} "both"
42184588Sdfr    test_case_root set_new_${e}_${v}_"both_log" set_quota_new \
43184588Sdfr	 "set quota for new id with both enabled, WAPBL" -bl ${e} ${v} "both"
44184588Sdfr    test_case_root set_default_${e}_${v}_"both" set_quota_default \
45184588Sdfr	 "set default quota with both enabled" -b ${e} ${v} "both"
46184588Sdfr  done
47184588Sdfrdone
48184588Sdfr
49184588Sdfrset_quota()
50184588Sdfr{
51184588Sdfr	create_ffs_server $*
52184588Sdfr	local q=$4
53184588Sdfr	local expect
54184588Sdfr	local fail
55184588Sdfr
56184588Sdfr	case ${q} in
57184588Sdfr	user)
58184588Sdfr		expect=u
59184588Sdfr		fail=g
60184588Sdfr		;;
61184588Sdfr	group)
62184588Sdfr		expect=g
63184588Sdfr		fail=u
64184588Sdfr		;;
65184588Sdfr	both)
66184588Sdfr		expect="u g"
67184588Sdfr		fail=""
68184588Sdfr		;;
69184588Sdfr	*)
70184588Sdfr		atf_fail "wrong quota type"
71184588Sdfr		;;
72184588Sdfr	esac
73184588Sdfr
74184588Sdfr#check that we can set the expected quota
75184588Sdfr	for q in ${expect} ; do
76184588Sdfr		local id=$(id -${q})
77184588Sdfr		atf_check -s exit:0 \
78184588Sdfr		   env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s10k/20 -h40M/50k \
79184588Sdfr		   -t 2W/3D ${id}
80184588Sdfr		atf_check -s exit:0 \
81184588Sdfr-o "match:/mnt        0       10    40960  2weeks       1      20   51200   3days" \
82184588Sdfr-o "match:Disk quotas for .*: $" \
83184588Sdfr		    env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -${q} -v
84184588Sdfr		atf_check -s exit:0 \
85184588Sdfr-o "match:--        0       10    40960                1      20   51200" \
86184588Sdfr		    env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -${q} /mnt
87184588Sdfr	done
88184588Sdfr
89184588Sdfr#check that we do not get positive reply for non-expected quota
90184588Sdfr	for q in ${fail} ; do
91184588Sdfr		local id=$(id -${q})
92184588Sdfr		atf_check -s exit:0 \
93184588Sdfr		   env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s10k/20 -h40M/50k ${id}
94184588Sdfr		atf_check -s exit:0 -o "not-match:/mnt" \
95184588Sdfr		    -o "not-match:Disk quotas for .*: $" \
96184588Sdfr		    -o "match:Disk quotas for .*: none$" \
97		    env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -${q} -v
98		atf_check -s exit:0 \
99-o "not-match:--        0        -        -" \
100		    env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -${q} /mnt
101	done
102	rump_quota_shutdown
103}
104
105set_quota_new()
106{
107	create_ffs_server $*
108	local q=$4
109	local expect
110	local fail
111
112	case ${q} in
113	user)
114		expect=u
115		fail=g
116		;;
117	group)
118		expect=g
119		fail=u
120		;;
121	both)
122		expect="u g"
123		fail=""
124		;;
125	*)
126		atf_fail "wrong quota type"
127		;;
128	esac
129
130#check that we can set the expected quota
131	for q in ${expect} ; do
132		local id=1
133		atf_check -s exit:0 \
134		   env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s10k/20 -h40M/50k \
135		   -t 120W/255D ${id}
136		atf_check -s exit:0 \
137-o "match:/mnt        0       10    40960  2years       0      20   51200 9months" \
138-o "match:Disk quotas for .*: $" \
139		    env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -${q} -v ${id}
140	done
141
142#check that we do not get positive reply for non-expected quota
143	for q in ${fail} ; do
144		local id=$(id -${q})
145		atf_check -s exit:0 \
146		   env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s10k/20 -h40M/50k ${id}
147		atf_check -s exit:0 -o "not-match:/mnt" \
148		    -o "not-match:Disk quotas for .*: $" \
149		    -o "match:Disk quotas for .*: none$" \
150		    env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -${q} -v ${id}
151	done
152	rump_quota_shutdown
153}
154
155set_quota_default()
156{
157	create_ffs_server $*
158	local q=$4
159	local expect
160	local fail
161
162	case ${q} in
163	user)
164		expect=u
165		fail=g
166		;;
167	group)
168		expect=g
169		fail=u
170		;;
171	both)
172		expect="u g"
173		fail=""
174		;;
175	*)
176		atf_fail "wrong quota type"
177		;;
178	esac
179
180#check that we can set the expected quota
181	for q in ${expect} ; do
182		local id="-d"
183		atf_check -s exit:0 \
184		   env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s10k/20 -h40M/50k \
185		   -t 2H2M/3540 ${id}
186		atf_check -s exit:0 \
187-o "match:/mnt        0       10    40960     2:2       0      20   51200      59" \
188-o "match:Default (user|group) disk quotas: $" \
189		    env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -${q} -v ${id}
190	done
191
192#check that we do not get positive reply for non-expected quota
193	for q in ${fail} ; do
194		local id="-d"
195		atf_check -s exit:0 \
196		   env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s10k/20 -h40M/50k ${id}
197		atf_check -s exit:0 -o "not-match:/mnt" \
198		    -o "not-match:Default (user|group) disk quotas: $" \
199		    -o "match:Default (user|group) disk quotas: none$" \
200		    env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -${q} -v ${id}
201	done
202	rump_quota_shutdown
203}
204