]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/netbsd-tests/fs/ffs/t_setquota.sh
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / netbsd-tests / fs / ffs / t_setquota.sh
1 # $NetBSD: t_setquota.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 be; do
29   for v in 1 2; do
30     for q in "user" "group"; do
31       test_case_root set_${e}_${v}_${q} set_quota \
32          "set quota with ${q} enabled" -b ${e} ${v} ${q}
33       test_case_root set_new_${e}_${v}_${q} set_quota_new \
34          "set quota for new id with ${q} enabled" -b ${e} ${v} ${q}
35       test_case_root set_default_${e}_${v}_${q} set_quota_default \
36          "set default quota with ${q} enabled" -b ${e} ${v} ${q}
37     done
38     test_case_root set_${e}_${v}_"both" set_quota \
39          "set quota with both enabled" -b ${e} ${v} "both"
40     test_case_root set_new_${e}_${v}_"both" set_quota_new \
41          "set quota for new id with both enabled" -b ${e} ${v} "both"
42     test_case_root set_new_${e}_${v}_"both_log" set_quota_new \
43          "set quota for new id with both enabled, WAPBL" -bl ${e} ${v} "both"
44     test_case_root set_default_${e}_${v}_"both" set_quota_default \
45          "set default quota with both enabled" -b ${e} ${v} "both"
46   done
47 done
48
49 set_quota()
50 {
51         create_ffs_server $*
52         local q=$4
53         local expect
54         local fail
55
56         case ${q} in
57         user)
58                 expect=u
59                 fail=g
60                 ;;
61         group)
62                 expect=g
63                 fail=u
64                 ;;
65         both)
66                 expect="u g"
67                 fail=""
68                 ;;
69         *)
70                 atf_fail "wrong quota type"
71                 ;;
72         esac
73
74 #check that we can set the expected quota
75         for q in ${expect} ; do
76                 local id=$(id -${q})
77                 atf_check -s exit:0 \
78                    env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s10k/20 -h40M/50k \
79                    -t 2W/3D ${id}
80                 atf_check -s exit:0 \
81 -o "match:/mnt        0       10    40960  2weeks       1      20   51200   3days" \
82 -o "match:Disk quotas for .*: $" \
83                     env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -${q} -v
84                 atf_check -s exit:0 \
85 -o "match:--        0       10    40960                1      20   51200" \
86                     env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -${q} /mnt
87         done
88
89 #check that we do not get positive reply for non-expected quota
90         for q in ${fail} ; do
91                 local id=$(id -${q})
92                 atf_check -s exit:0 \
93                    env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s10k/20 -h40M/50k ${id}
94                 atf_check -s exit:0 -o "not-match:/mnt" \
95                     -o "not-match:Disk quotas for .*: $" \
96                     -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
105 set_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
155 set_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 }