637c73b70388d4c285863dfb78b60cfa62e9e0b4
[xfstests-dev.git] / tests / generic / 097
1 #! /bin/bash
2 # FS QA Test No. 097. Modifed from UDFQA test 033.
3 #
4 # simple attr tests for EAs:
5 #  - set
6 #  - get
7 #  - list
8 #  - remove
9 # Basic testing.
10 #
11 #-----------------------------------------------------------------------
12 # Copyright (c) 2000-2004 Silicon Graphics, Inc.  All Rights Reserved.
13 #
14 # This program is free software; you can redistribute it and/or
15 # modify it under the terms of the GNU General Public License as
16 # published by the Free Software Foundation.
17 #
18 # This program is distributed in the hope that it would be useful,
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21 # GNU General Public License for more details.
22 #
23 # You should have received a copy of the GNU General Public License
24 # along with this program; if not, write the Free Software Foundation,
25 # Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
26 #
27 #-----------------------------------------------------------------------
28 #
29
30 seqfull=$0
31 seq=`basename $0`
32 seqres=$RESULT_DIR/$seq
33 echo "QA output created by $seq"
34
35 here=`pwd`
36 tmp=/tmp/$$
37 status=1        # failure is the default!
38 TARGET_DIR=
39 trap "_cleanup; exit \$status" 0 1 2 3 15
40
41 _cleanup()
42 {
43     rm -f $tmp.*
44     cd $TARGET_DIR
45     rm -f foo
46 }
47
48 _umount_and_mount()
49 {
50     cd /
51     umount $TARGET_DIR
52     if [ "$FSTYP" == "xfs" ]; then
53         _test_mount
54     else
55         _scratch_mount
56     fi
57     
58     cd $TARGET_DIR
59 }
60
61 # get standard environment, filters and checks
62 . ./common/rc
63 . ./common/filter
64
65 # link correct .out file
66 # This is done bacause udf and xfs print attrs in different orders.
67 rm -rf $seqfull.out
68 if [ "$FSTYP" == "xfs" ]; then
69     ln -s $seq.out.xfs $seqfull.out
70 else
71     ln -s $seq.out.udf $seqfull.out
72 fi
73
74 # real QA test starts here
75 _supported_fs generic
76 _supported_os IRIX
77
78 _require_test
79 _require_scratch
80 _require_attrs
81
82 TARGET_DIR=$SCRATCH_MNT
83 [ "$FSTYP" == "xfs" ] && TARGET_DIR=$TEST_DIR
84 cd $TARGET_DIR
85
86 echo "create file foo"
87 rm -f foo 
88 touch foo
89
90 echo "should be no EAs for foo:"
91 ${ATTR_PROG} -l foo
92
93 echo "set EA <noise,woof>:"
94 ${ATTR_PROG} -s noise -V woof foo
95
96 echo "set EA <colour,blue>:"
97 ${ATTR_PROG} -s colour -V blue foo
98
99 echo "set EA <size,small>:"
100 ${ATTR_PROG} -s size -V small foo
101
102 echo "list the EAs for foo: noise, colour, size" 
103 ${ATTR_PROG} -l foo
104
105 echo "check the list again for foo"
106 ${ATTR_PROG} -l foo
107
108 echo "unmount the FS and see if EAs are persistent"
109 _umount_and_mount
110
111 echo "check the list again for foo after umount/mount"
112 ${ATTR_PROG} -l foo
113
114 echo "get the value of the noise EA"
115 ${ATTR_PROG} -g noise foo
116
117 echo "get the value of the colour EA which was removed earlier"
118 ${ATTR_PROG} -g colour foo
119
120 echo "get the value of the size EA"
121 ${ATTR_PROG} -g size foo
122
123 echo "remove the colour EA on foo"
124 ${ATTR_PROG} -r colour foo
125
126 echo "list EAs for foo: noise, size"
127 ${ATTR_PROG} -l foo
128
129 echo "get the value of the noise EA"
130 ${ATTR_PROG} -g noise foo
131
132 echo "get the value of the colour EA which was removed earlier"
133 ${ATTR_PROG} -g colour foo
134
135 echo "get the value of the size EA"
136 ${ATTR_PROG} -g size foo
137
138 echo "list all the EAs again: noise, size"
139 ${ATTR_PROG} -l foo
140
141 echo "change the value of the size EA from small to huge"
142 ${ATTR_PROG} -s size -V huge foo
143
144 echo "get the size EA which should now have value huge"
145 ${ATTR_PROG} -g size foo
146
147 echo "list EAs: noise, size"
148 ${ATTR_PROG} -l foo
149
150 echo "remove the size EA from foo"
151 ${ATTR_PROG} -r size foo
152
153 echo "list EAs: noise (size EA has been removed)"
154 ${ATTR_PROG} -l foo
155
156 echo "get the noise EA: woof"
157 ${ATTR_PROG} -g noise foo
158
159 echo "try removing non-existent EA named woof"
160 ${ATTR_PROG} -r woof foo
161
162 echo "try removing already removed EA size"
163 ${ATTR_PROG} -r size foo
164
165 echo "list EAs: noise"
166 ${ATTR_PROG} -l foo
167
168 echo "try removing already removed EA colour"
169 ${ATTR_PROG} -r colour foo
170
171 echo "list EAs: noise"
172 ${ATTR_PROG} -l foo
173
174 echo "remove remaining EA noise"
175 ${ATTR_PROG} -r noise foo
176
177 echo "list EAs: should be no EAs left now"
178 ${ATTR_PROG} -l foo
179
180 echo "unmount the FS and see if EAs are persistent"
181 _umount_and_mount
182
183 echo "list EAs: should still be no EAs left"
184 ${ATTR_PROG} -l foo
185
186 echo ""
187 echo "*** Test out the root namespace ***"
188 echo ""
189
190 echo "set EA <root:colour,marone>:"
191 ${ATTR_PROG} -R -s colour -V marone foo
192
193 echo "set EA <user:colour,beige>:"
194 ${ATTR_PROG} -s colour -V beige foo
195
196 echo "set EA <user:vomit,pizza>:"
197 ${ATTR_PROG} -s vomit -V pizza foo
198
199 echo "set EA <root:noise,whack>:"
200 ${ATTR_PROG} -R -s noise -V whack foo
201
202 echo "list root EAs: <root:colour,noise>:"
203 ${ATTR_PROG} -R -l foo
204
205 echo "list user EAs: <user:colour,vomit>:"
206 ${ATTR_PROG} -l foo
207
208 echo "get root EA colour: marone"
209 ${ATTR_PROG} -R -g colour foo
210
211 echo "get root EA noise: whack"
212 ${ATTR_PROG} -R -g noise foo
213
214 echo "get root EA vomit which is a user EA => find nothing"
215 ${ATTR_PROG} -R -g vomit foo
216
217 echo ""
218 echo "unmount the FS and see if EAs are persistent"
219 echo ""
220 _umount_and_mount
221
222 echo "get root EA colour: marone"
223 ${ATTR_PROG} -R -g colour foo
224
225 echo "get root EA noise: whack"
226 ${ATTR_PROG} -R -g noise foo
227
228 echo "get user EA vomit: pizza" 
229 ${ATTR_PROG} -g vomit foo
230
231 echo "remove the root colour EA"
232 ${ATTR_PROG} -R -r colour foo
233
234 echo "list root EAs: <root:noise>:"
235 ${ATTR_PROG} -R -l foo
236
237 echo "list user EAs: <user:colour,vomit>:"
238 ${ATTR_PROG} -l foo
239
240 echo "remove the final root EA noise"
241 ${ATTR_PROG} -R -r noise foo
242
243 echo "list root EAs: none"
244 ${ATTR_PROG} -R -l foo
245
246 cd /
247
248 # success, all done
249 status=0
250 exit