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