Whamcloud - gitweb
Merge b_md to HEAD for 0.5.19 release.
[fs/lustre-release.git] / lustre / tests / sanity.sh
1 #!/bin/bash
2
3 set -e
4
5 CHECKSTAT=${CHECKSTAT:-"./checkstat -v"}
6 MOUNT=${MOUNT:-/mnt/lustre}
7 export NAME=$NAME
8 clean() {
9         echo -n "cln.."
10         sh llmountcleanup.sh > /dev/null
11 }
12 CLEAN=${CLEAN:-clean}
13 start() {
14         echo -n "mnt.."
15         sh llrmount.sh > /dev/null
16         echo -n "done"
17 }
18 START=${START:-start}
19
20 error () { 
21     echo FAIL
22     exit 1
23 }
24
25 pass() { 
26     echo PASS
27 }
28
29 mount | grep $MOUNT || $START
30
31 echo '== touch .../f ; rm .../f ======================== test 0'
32 touch $MOUNT/f
33 $CHECKSTAT -t file $MOUNT/f || error 
34 rm $MOUNT/f
35 $CHECKSTAT -a $MOUNT/f || error
36 pass
37 $CLEAN
38 $START
39
40 echo '== mkdir .../d1; mkdir .../d1/d2 ================= test 1'
41 mkdir $MOUNT/d1
42 mkdir $MOUNT/d1/d2
43 $CHECKSTAT -t dir $MOUNT/d1/d2 || error
44 pass
45 $CLEAN
46 $START
47
48 echo '== rmdir .../d1/d2; rmdir .../d1 ================= test 1b'
49 rmdir $MOUNT/d1/d2
50 rmdir $MOUNT/d1
51 $CHECKSTAT -a $MOUNT/d1 || error
52 pass
53 $CLEAN
54 $START
55
56 echo '== mkdir .../d2; touch .../d2/f ================== test 2'
57 mkdir $MOUNT/d2
58 touch $MOUNT/d2/f
59 $CHECKSTAT -t file $MOUNT/d2/f || error
60 pass
61 $CLEAN
62 $START
63
64 echo '== rm -r .../d2; touch .../d2/f ================== test 2b'
65 rm -r $MOUNT/d2
66 $CHECKSTAT -a $MOUNT/d2 || error
67 pass
68 $CLEAN
69 $START
70
71 echo '== mkdir .../d3 ================================== test 3'
72 mkdir $MOUNT/d3
73 $CHECKSTAT -t dir $MOUNT/d3 || error
74 pass
75 $CLEAN
76 $START
77 echo '== touch .../d3/f ================================ test 3b'
78 touch $MOUNT/d3/f
79 $CHECKSTAT -t file $MOUNT/d3/f || error
80 pass
81 $CLEAN
82 $START
83 echo '== rm -r .../d3 ================================== test 3c'
84 rm -r $MOUNT/d3
85 $CHECKSTAT -a $MOUNT/d3 || error
86 pass
87 $CLEAN
88 $START
89
90 echo '== mkdir .../d4 ================================== test 4'
91 mkdir $MOUNT/d4
92 $CHECKSTAT -t dir $MOUNT/d4 || error
93 pass
94 $CLEAN
95 $START
96 echo '== mkdir .../d4/d2 =============================== test 4b'
97 mkdir $MOUNT/d4/d2
98 $CHECKSTAT -t dir $MOUNT/d4/d2 || error
99 pass
100 $CLEAN
101 $START
102
103 echo '== mkdir .../d5; mkdir .../d5/d2; chmod .../d5/d2 = test 5'
104 mkdir $MOUNT/d5
105 mkdir $MOUNT/d5/d2
106 chmod 0666 $MOUNT/d5/d2
107 $CHECKSTAT -t dir -p 0666 $MOUNT/d5/d2 || error
108 pass
109 $CLEAN
110 $START
111
112 echo '== touch .../f6; chmod .../f6 ==================== test 6'
113 touch $MOUNT/f6
114 chmod 0666 $MOUNT/f6
115 $CHECKSTAT -t file -p 0666 $MOUNT/f6 || error
116 pass
117 $CLEAN
118 $START
119
120 echo '== mkdir .../d7; mcreate .../d7/f; chmod .../d7/f = test 7'
121 mkdir $MOUNT/d7
122 ./mcreate $MOUNT/d7/f
123 chmod 0666 $MOUNT/d7/f
124 $CHECKSTAT -t file -p 0666 $MOUNT/d7/f || error
125 pass
126 $CLEAN
127 $START
128
129 echo '== mkdir .../d8; touch .../d8/f; chmod .../d8/f == test 8'
130 mkdir $MOUNT/d8
131 touch $MOUNT/d8/f
132 chmod 0666 $MOUNT/d8/f
133 $CHECKSTAT -t file -p 0666 $MOUNT/d8/f || error
134 pass
135 $CLEAN
136 $START
137
138
139 echo '== mkdir .../d9 .../d9/d2 .../d9/d2/d3 =========== test 9'
140 mkdir $MOUNT/d9
141 mkdir $MOUNT/d9/d2
142 mkdir $MOUNT/d9/d2/d3
143 $CHECKSTAT -t dir $MOUNT/d9/d2/d3 || error
144 pass
145 $CLEAN
146 $START
147
148
149 echo '== mkdir .../d10 .../d10/d2; touch .../d10/d2/f = test 10'
150 mkdir $MOUNT/d10
151 mkdir $MOUNT/d10/d2
152 touch $MOUNT/d10/d2/f
153 $CHECKSTAT -t file $MOUNT/d10/d2/f || error
154 pass
155 $CLEAN
156 $START
157
158 echo '== mkdir .../d11 d11/d2; chmod .../d11/d2 ======= test 11'
159 mkdir $MOUNT/d11
160 mkdir $MOUNT/d11/d2
161 chmod 0666 $MOUNT/d11/d2
162 chmod 0555 $MOUNT/d11/d2
163 $CHECKSTAT -t dir -p 0555 $MOUNT/d11/d2 || error
164 pass
165 $CLEAN
166 $START
167
168 echo '== mkdir .../d12; touch .../d12/f; chmod .../d12/f == test 12'
169 mkdir $MOUNT/d12
170 touch $MOUNT/d12/f
171 chmod 0666 $MOUNT/d12/f
172 chmod 0555 $MOUNT/d12/f
173 $CHECKSTAT -t file -p 0555 $MOUNT/d12/f || error
174 pass
175 $CLEAN
176 $START
177
178 echo '== mkdir .../d13; cp /etc/passwd .../d13/f; > .../d13/f == test 13'
179 mkdir $MOUNT/d13
180 cp /etc/hosts $MOUNT/d13/f
181 >  $MOUNT/d13/f
182 $CHECKSTAT -t file -s 0 $MOUNT/d13/f || error
183 pass
184 $CLEAN
185 $START
186
187
188 echo '================================================== test 14'
189 mkdir $MOUNT/d14
190 touch $MOUNT/d14/f
191 rm $MOUNT/d14/f
192 $CHECKSTAT -a $MOUNT/d14/f || error
193 pass
194 $CLEAN
195 $START
196
197
198 echo '================================================== test 15'
199 mkdir $MOUNT/d15
200 touch $MOUNT/d15/f
201 mv $MOUNT/d15/f $MOUNT/d15/f2
202 $CHECKSTAT -t file $MOUNT/d15/f2 || error
203 pass
204 $CLEAN
205 $START
206
207 echo '================================================== test 16'
208 mkdir $MOUNT/d16
209 touch $MOUNT/d16/f
210 rm -rf $MOUNT/d16/f
211 $CHECKSTAT -a $MOUNT/d16/f || error
212 pass
213 $CLEAN
214 $START
215
216 echo '== symlinks: create, remove (dangling and real) == test 17'
217 mkdir $MOUNT/d17
218 touch $MOUNT/d17/f
219 ln -s $MOUNT/d17/f $MOUNT/d17/l-exist
220 ln -s no-such-file $MOUNT/d17/l-dangle
221 ls -l $MOUNT/d17
222 $CHECKSTAT -l $MOUNT/d17/f $MOUNT/d17/l-exist || error
223 $CHECKSTAT -f -t f $MOUNT/d17/l-exist || error
224 $CHECKSTAT -l no-such-file $MOUNT/d17/l-dangle || error
225 $CHECKSTAT -fa $MOUNT/d17/l-dangle || error
226 rm -f $MOUNT/l-dangle
227 rm -f $MOUNT/l-exist
228 $CHECKSTAT -a $MOUNT/l-dangle || error
229 $CHECKSTAT -a $MOUNT/l-exist || error
230 pass
231 $CLEAN
232 $START
233
234 echo "== touch .../f ; ls ... ========================= test 18"
235 touch $MOUNT/f
236 ls $MOUNT || error
237 pass
238 $CLEAN
239 $START
240
241 echo "== touch .../f ; ls -l ... ====================== test 19"
242 touch $MOUNT/f
243 ls -l $MOUNT
244 rm $MOUNT/f
245 $CHECKSTAT -a $MOUNT/f || error
246 pass
247 $CLEAN
248 $START
249
250 echo "== touch .../f ; ls -l ... ====================== test 20"
251 touch $MOUNT/f
252 rm $MOUNT/f
253 echo "1 done"
254 touch $MOUNT/f
255 rm $MOUNT/f
256 echo "2 done"
257 touch $MOUNT/f
258 rm $MOUNT/f
259 echo "3 done"
260 $CHECKSTAT -a $MOUNT/f || error
261 pass
262 $CLEAN
263 $START
264
265 echo '== write to dangling link ======================== test 21'
266 mkdir $MOUNT/d21
267 [ -f $MOUNT/d21/dangle ] && rm -f $MOUNT/d21/dangle
268 ln -s dangle $MOUNT/d21/link
269 echo foo >> $MOUNT/d21/link
270 cat $MOUNT/d21/dangle
271 $CHECKSTAT -t link $MOUNT/d21/link || error
272 $CHECKSTAT -f -t file $MOUNT/d21/link || error
273 pass
274 $CLEAN
275 $START
276
277 echo '== unpack tar archive as non-root user =========== test 22'
278 mkdir $MOUNT/d22
279 which sudo && chown 4711 $MOUNT/d22
280 SUDO=`which sudo 2> /dev/null` && SUDO="$SUDO -u #4711" || SUDO=""
281 $SUDO tar cf - /etc/hosts /etc/sysconfig/network | $SUDO tar xfC - $MOUNT/d22
282 ls -lR $MOUNT/d22/etc
283 $CHECKSTAT -t dir $MOUNT/d22/etc || error
284 [ -z "$SUDO" ] || $CHECKSTAT -u \#4711 $MOUNT/d22/etc || error
285 pass
286 $CLEAN
287 $START
288
289 echo '== O_CREAT|O_EXCL in subdir ====================== test 23'
290 mkdir $MOUNT/d23
291 ./toexcl $MOUNT/d23/f23
292 ./toexcl -e $MOUNT/d23/f23 || error
293 pass
294 $CLEAN
295 $START
296
297 echo '== rename sanity ================================= test24'
298 echo '-- same directory rename'
299 echo '-- test 24-R1: touch a ; rename a b'
300 mkdir $MOUNT/R1
301 touch $MOUNT/R1/f
302 mv $MOUNT/R1/f $MOUNT/R1/g
303 $CHECKSTAT -t file $MOUNT/R1/g || error
304 pass
305 $CLEAN
306 $START
307
308 echo '-- test 24-R2: touch a b ; rename a b;'
309 mkdir $MOUNT/R2
310 touch $MOUNT/R2/{f,g}
311 mv $MOUNT/R2/f $MOUNT/R2/g
312 $CHECKSTAT -a $MOUNT/R2/f || error
313 $CHECKSTAT -t file $MOUNT/R2/g || error
314 pass
315 $CLEAN
316 $START
317
318 echo '-- test 24-R3: mkdir a  ; rename a b;'
319 mkdir $MOUNT/R3
320 mkdir $MOUNT/R3/f
321 mv $MOUNT/R3/f $MOUNT/R3/g
322 $CHECKSTAT -a $MOUNT/R3/f || error
323 $CHECKSTAT -t dir $MOUNT/R3/g || error
324 pass
325 $CLEAN
326 $START
327
328 echo '-- test 24-R4: mkdir a b ; rename a b;'
329 mkdir $MOUNT/R4
330 mkdir $MOUNT/R4/{f,g}
331 perl -e "rename \"$MOUNT/R4/f\", \"$MOUNT/R4/g\";"
332 $CHECKSTAT -a $MOUNT/R4/f || error
333 $CHECKSTAT -t dir $MOUNT/R4/g || error
334 pass
335 $CLEAN
336 $START
337
338 echo '-- cross directory renames --' 
339 echo '-- test 24-R5: touch a ; rename a b'
340 mkdir $MOUNT/R5{a,b}
341 touch $MOUNT/R5a/f
342 mv $MOUNT/R5a/f $MOUNT/R5b/g
343 $CHECKSTAT -a $MOUNT/R5a/f || error
344 $CHECKSTAT -t file $MOUNT/R5b/g || error
345 pass
346 $CLEAN
347 $START
348
349 echo '-- test 24-R6: touch a ; rename a b'
350 mkdir $MOUNT/R6{a,b}
351 touch $MOUNT/R6a/f $MOUNT/R6b/g
352 mv $MOUNT/R6a/f $MOUNT/R6b/g
353 $CHECKSTAT -a $MOUNT/R6a/f || error
354 $CHECKSTAT -t file $MOUNT/R6b/g || error
355 pass
356 $CLEAN
357 $START
358
359 echo '-- test 24-R7: touch a ; rename a b'
360 mkdir $MOUNT/R7{a,b}
361 mkdir $MOUNT/R7a/f
362 mv $MOUNT/R7a/f $MOUNT/R7b/g
363 $CHECKSTAT -a $MOUNT/R7a/f || error
364 $CHECKSTAT -t dir $MOUNT/R7b/g || error
365 pass
366 $CLEAN
367 $START
368
369 echo '-- test 24-R8: touch a ; rename a b'
370 mkdir $MOUNT/R8{a,b}
371 mkdir $MOUNT/R8a/f $MOUNT/R8b/g
372 perl -e "rename \"$MOUNT/R8a/f\", \"$MOUNT/R8b/g\";"
373 $CHECKSTAT -a $MOUNT/R8a/f || error
374 $CHECKSTAT -t dir $MOUNT/R8b/g || error
375 pass
376 $CLEAN
377 $START
378
379 echo "-- rename error cases"
380 echo "-- test 24-R9 target error: touch f ; mkdir a ; rename f a"
381 mkdir $MOUNT/R9
382 mkdir $MOUNT/R9/a
383 touch $MOUNT/R9/f
384 perl -e "rename \"$MOUNT/R9/f\", \"$MOUNT/R9/a\";"
385 $CHECKSTAT -t file $MOUNT/R9/f || error
386 $CHECKSTAT -t dir  $MOUNT/R9/a || error
387 $CHECKSTAT -a file $MOUNT/R9/a/f || error
388 pass
389 $CLEAN
390 $START
391
392 echo "--test 24-R10 source does not exist" 
393 mkdir $MOUNT/R10
394 perl -e "rename \"$MOUNT/R10/f\", \"$MOUNT/R10/g\"" 
395 $CHECKSTAT -t dir $MOUNT/R10 || error
396 $CHECKSTAT -a $MOUNT/R10/f || error
397 $CHECKSTAT -a $MOUNT/R10/g || error
398 pass
399 $CLEAN
400 $START
401
402 echo '== symlink sanity ================================ test25'
403 echo "--test 25.1 create file in symlinked directory"
404 mkdir $MOUNT/d25
405 ln -s d25 $MOUNT/s25
406 touch $MOUNT/s25/foo
407 pass
408 $CLEAN
409 $START
410
411 echo "--test 25.2 lookup file in symlinked directory"
412 $CHECKSTAT -t file $MOUNT/s25/foo
413 pass
414 $CLEAN
415 $START
416
417 echo "--test 26 multiple component symlink"
418 mkdir $MOUNT/d26
419 mkdir $MOUNT/d26/d26-2
420 ln -s d26/d26-2 $MOUNT/s26
421 touch $MOUNT/s26/foo
422 pass
423 $CLEAN
424 $START
425
426 echo "--test 26.1 multiple component symlink at the end of a lookup"
427 ln -s d26/d26-2/foo $MOUNT/s26-2
428 touch $MOUNT/s26-2
429 pass
430 $CLEAN
431 $START
432
433 echo "--test 26.2 a chain of symlinks"
434 mkdir $MOUNT/d26.2
435 touch $MOUNT/d26.2/foo
436 ln -s d26.2 $MOUNT/s26.2-1
437 ln -s s26.2-1 $MOUNT/s26.2-2
438 ln -s s26.2-2 $MOUNT/s26.2-3
439 chmod 0666 $MOUNT/s26.2-3/foo
440 pass
441 $CLEAN
442 $START
443
444 echo '== stripe sanity ================================= test27'
445 echo "--test 26.1 create one stripe"
446 mkdir $MOUNT/d27
447 ../utils/lstripe $MOUNT/d27/f0 4096 0 1
448 $CHECKSTAT -t file $MOUNT/d27/f0
449 echo "--test 26.2 write to one stripe file"
450 cp /etc/hosts $MOUNT/d27/f0
451 pass
452 $CLEAN
453 $START
454
455 echo "--test 26.3 create two stripes"
456 ../utils/lstripe $MOUNT/d27/f01 4096 0 2
457 echo "--test 26.4 write to two stripe file"
458 cp /etc/hosts $MOUNT/d27/f01
459 pass
460 $CLEAN
461 $START
462
463 echo "--test 26.5 lstripe existing file (should return error)"
464 ../utils/lstripe $MOUNT/d27/f12 4096 1 2
465 ! ../utils/lstripe $MOUNT/d27/f12 4096 1 2
466 pass
467 $CLEAN
468 $START
469
470 echo "--test 26.6 lfind "
471 ../utils/lfind $MOUNT/d27
472 pass
473 $CLEAN
474 $START
475
476
477 echo '== cleanup ============================================='
478 rm -r $MOUNT/[Rdfs][1-9]*
479
480 echo '======================= finished ======================='
481 exit