Imported Upstream version 2.4.46
[platform/upstream/attr.git] / test / attr.test
1 Tests for extended attributes on file systems.
2
3 Execute this test using the `run' script in this directory:
4
5         run attr.text
6
7 Try various valid and invalid names
8         
9         $ mkdir d
10         $ cd d
11
12         $ touch f
13         $ setfattr -n user -v value f
14         > setfattr: f: Operation not supported
15         
16         $ setfattr -n user. -v value f
17         > setfattr: f: Invalid argument
18         
19         $ setfattr -n user.name f
20         $ getfattr -d f
21         > # file: f
22         > user.name
23         > 
24         
25         $ setfattr -n user.n -v value f
26         $ rm f
27
28
29 Editing values
30
31         $ touch f
32         $ setfattr -n user.vvvvvvvvvvvv -v vvvvvvvvvvvv f
33         $ setfattr -n user.wwwwwwww -v wwwwwwww f
34         $ setfattr -n user.xxxx -v xxxx f
35         $ getfattr -d f
36         > # file: f
37         > user.vvvvvvvvvvvv="vvvvvvvvvvvv"
38         > user.wwwwwwww="wwwwwwww"
39         > user.xxxx="xxxx"
40         > 
41         
42         $ setfattr -n user.wwwwwwww -v wwww f
43         $ getfattr -d f
44         > # file: f
45         > user.vvvvvvvvvvvv="vvvvvvvvvvvv"
46         > user.wwwwwwww="wwww"
47         > user.xxxx="xxxx"
48         > 
49         
50         $ setfattr -n user.xxxx -v xxxxxxxx f
51         $ getfattr -d f
52         > # file: f
53         > user.vvvvvvvvvvvv="vvvvvvvvvvvv"
54         > user.wwwwwwww="wwww"
55         > user.xxxx="xxxxxxxx"
56         > 
57         
58         $ rm f
59
60 Value encodings
61
62         $ touch f
63         $ setfattr -n user.name -v 0xbabe f
64         $ setfattr -n user.name2 -v 0s3q2+7w== f
65         $ setfattr -n user.name3 -v 0xdeface f
66         $ getfattr -d -e hex f
67         > # file: f
68         > user.name=0xbabe
69         > user.name2=0xdeadbeef
70         > user.name3=0xdeface
71         > 
72         
73         $ getfattr -d -e base64 f
74         > # file: f
75         > user.name=0sur4=
76         > user.name2=0s3q2+7w==
77         > user.name3=0s3vrO
78         > 
79         
80         $ rm f
81
82 Everything with one file
83
84         $ touch f
85         $ setfattr -n user.novalue f
86         $ setfattr -n user.somename -v somevalue f
87         $ setfattr -n user.somename -v somevalue f
88         $ setfattr -n user.longername -v longervalue f
89         $ setfattr -n user.short -v value f
90         $ setfattr -n user.novalue-yet f
91         $ ls -s f
92         > 4 f
93         
94         $ getfattr -d f
95         > # file: f
96         > user.longername="longervalue"
97         > user.novalue
98         > user.novalue-yet
99         > user.short="value"
100         > user.somename="somevalue"
101         > 
102         
103         $ setfattr -n user.novalue-yet -v avalue-now f
104         $ getfattr -d f
105         > # file: f
106         > user.longername="longervalue"
107         > user.novalue
108         > user.novalue-yet="avalue-now"
109         > user.short="value"
110         > user.somename="somevalue"
111         > 
112         
113         $ setfattr -x user.noname f
114         > setfattr: f: No such attribute
115         
116         $ setfattr -x user.somename f
117         $ setfattr -x user.short f
118         $ getfattr -d f
119         > # file: f
120         > user.longername="longervalue"
121         > user.novalue
122         > user.novalue-yet="avalue-now"
123         > 
124         
125         $ setfattr -x user.longername f
126         $ setfattr -x user.novalue f
127         $ setfattr -x user.novalue-yet f
128         $ getfattr -d f
129         $ ls -s f
130         > 0 f
131         
132         $ rm f
133
134 Test extended attribute block sharing
135
136         $ touch f g h
137         $ setfattr -n user.novalue f g h
138         $ getfattr f g h | ../sort-getfattr-output
139         > # file: f
140         > user.novalue
141         >
142         > # file: g
143         > user.novalue
144         >
145         > # file: h
146         > user.novalue
147         >
148
149         $ setfattr -n user.name -v value f
150         $ getfattr f g h | ../sort-getfattr-output
151         > # file: f
152         > user.name
153         > user.novalue
154         >
155         > # file: g
156         > user.novalue
157         >
158         > # file: h
159         > user.novalue
160         >
161
162         $ getfattr -d f g h | ../sort-getfattr-output
163         > # file: f
164         > user.name="value"
165         > user.novalue
166         > 
167         > # file: g
168         > user.novalue
169         > 
170         > # file: h
171         > user.novalue
172         > 
173
174         $ setfattr -n user.name -v value g
175         $ getfattr f g h | ../sort-getfattr-output
176         > # file: f
177         > user.name
178         > user.novalue
179         > 
180         > # file: g
181         > user.name
182         > user.novalue
183         > 
184         > # file: h
185         > user.novalue
186         >
187
188         $ setfattr -x user.novalue h
189         $ getfattr f g h | ../sort-getfattr-output
190         > # file: f
191         > user.name
192         > user.novalue
193         >
194         > # file: g
195         > user.name
196         > user.novalue
197         >
198
199         $ rm f g h
200
201 Attributes of symlinks vs. the files pointed to
202
203         $ touch f
204         $ ln -s f l
205         $ setfattr -n user.filename -v f l
206         $ setfattr -n user.filename -v l l
207         $ setfattr -h -n user.filename -v l l
208         > setfattr: l: Operation not permitted
209         
210         $ getfattr -d f l | ../sort-getfattr-output
211         > # file: f
212         > user.filename="l"
213         > 
214         > # file: l
215         > user.filename="l"
216         > 
217
218         $ rm f
219
220 Tests for file name that contain special characters
221
222         $ touch "f "
223         $ setfattr -n user.name -v value "f "
224         $ getfattr -d "f "
225         > # file: f 
226         > user.name="value"
227         >
228
229         $ rm "f "
230
231 Tests for attribute names that contains special characters
232
233         $ touch f
234         $ setfattr -n "user.sp ace" -v value f
235         $ setfattr -n "user.special " -v value f
236         $ getfattr f
237         > # file: f
238         > user.sp ace
239         > user.special 
240         >
241
242         $ getfattr -d f
243         > # file: f
244         > user.sp ace="value"
245         > user.special ="value"
246         >
247
248         $ setfattr -x "user.sp ace" f
249         $ setfattr -n "user.sp ace" -v value f
250         $ setfattr -x "user.sp ace" f
251         $ setfattr -x "user.special     " f
252         $ rm f
253
254         $ cd ..
255         $ rm -rf d
256
257 Tests for proper path recursion reported by Tony Ernst <tee@sgi.com> bnc#457660
258
259         $ mkdir -p 1/2/3
260         $ setfattr -n "user.9" 1
261         $ setfattr -n "user.a" 1
262         $ setfattr -n "user.9" 1/2
263         $ setfattr -n "user.a" 1/2
264         $ setfattr -n "user.9" 1/2/3
265         $ setfattr -n "user.a" 1/2/3
266
267         $ getfattr -h -L -R -m '.' -e hex 1 | ./sort-getfattr-output
268         > # file: 1
269         > user.9
270         > user.a
271         >
272         > # file: 1/2
273         > user.9
274         > user.a
275         >
276         > # file: 1/2/3
277         > user.9
278         > user.a
279         >
280
281         $ getfattr -h -P -R -m '.' -e hex 1/2 | ./sort-getfattr-output
282         > # file: 1/2
283         > user.9
284         > user.a
285         >
286         > # file: 1/2/3
287         > user.9
288         > user.a
289         >
290
291         $ rm -R 1
292
293 Test for proper recursion of directory structures with -L -P -R
294
295         $ mkdir -p 1/sub
296         $ mkdir 1/link
297         $ touch 1/link/link-file
298         $ touch 1/sub/sub-file
299         $ ln -s `pwd`/1/link 1/sub/link
300         $ setfattr -n "user.a" 1
301         $ setfattr -n "user.a" 1/link/link-file
302         $ setfattr -n "user.a" 1/link
303         $ setfattr -n "user.a" 1/sub/sub-file
304         $ setfattr -n "user.a" 1/sub
305         $ getfattr -P -R 1 | ./sort-getfattr-output
306         > # file: 1
307         > user.a
308         >
309         > # file: 1/link
310         > user.a
311         >
312         > # file: 1/link/link-file
313         > user.a
314         >
315         > # file: 1/sub
316         > user.a
317         >
318         > # file: 1/sub/link
319         > user.a
320         >
321         > # file: 1/sub/sub-file
322         > user.a
323         >
324
325         $ getfattr -R -P 1/sub | ./sort-getfattr-output
326         > # file: 1/sub
327         > user.a
328         >
329         > # file: 1/sub/link
330         > user.a
331         >
332         > # file: 1/sub/sub-file
333         > user.a
334         >
335
336         $ getfattr -L -R 1 | ./sort-getfattr-output
337         > # file: 1
338         > user.a
339         >
340         > # file: 1/link
341         > user.a
342         >
343         > # file: 1/link/link-file
344         > user.a
345         >
346         > # file: 1/sub
347         > user.a
348         >
349         > # file: 1/sub/link
350         > user.a
351         >
352         > # file: 1/sub/link/link-file
353         > user.a
354         >
355         > # file: 1/sub/sub-file
356         > user.a
357         >
358
359         $ getfattr -R 1/sub/link | ./sort-getfattr-output
360         > # file: 1/sub/link
361         > user.a
362         >
363         > # file: 1/sub/link/link-file
364         > user.a
365         >
366
367         $ getfattr -L -R 1/sub/link | ./sort-getfattr-output
368         > # file: 1/sub/link
369         > user.a
370         >
371         > # file: 1/sub/link/link-file
372         > user.a
373         >
374
375         $ rm -R 1