Whamcloud - gitweb
- merge 0.7rc1 from b_devel to HEAD (20030612 merge point)
[fs/lustre-release.git] / lustre / tests / sanity.sh
1 #!/bin/bash
2 set -e
3
4 SRCDIR=`dirname $0`
5 PATH=$PWD/$SRCDIR:$SRCDIR:$SRCDIR/../utils:$PATH
6
7 CHECKSTAT=${CHECKSTAT:-"./checkstat -v"}
8 CREATETEST=${CREATETEST:-createtest}
9 LFIND=${LFIND:-lfind}
10 LSTRIPE=${LSTRIPE:-lstripe}
11 MCREATE=${MCREATE:-mcreate}
12 TOEXCL=${TOEXCL:-toexcl}
13 TRUNCATE=${TRUNCATE:-truncate}
14
15 RUNAS_ID=${RUNAS_ID:-500}
16 RUNAS=${RUNAS:-"runas -u $RUNAS_ID"}
17
18 MOUNT=${MOUNT:-/mnt/lustre}
19 DIR=${DIR:-$MOUNT}
20 export NAME=$NAME
21 clean() {
22         echo -n "cln.."
23         sh llmountcleanup.sh > /dev/null || exit 20
24 }
25 CLEAN=${CLEAN:-clean}
26 start() {
27         echo -n "mnt.."
28         sh llrmount.sh > /dev/null || exit 10
29         echo "done"
30 }
31 START=${START:-start}
32
33 log() {
34         echo "$*"
35         lctl mark "$*" || /bin/true
36 }
37
38 error() { 
39     echo FAIL
40     exit 1
41 }
42
43 pass() { 
44     echo PASS
45 }
46
47 mount | grep $MOUNT || sh llmount.sh
48
49 echo preparing for tests involving mounts
50 EXT2_DEV=/tmp/SANITY.LOOP
51 dd if=/dev/zero of=$EXT2_DEV bs=1k count=1000
52 #losetup /dev/loop0 || losetup /dev/loop0 /tmp/SANITY.LOOP
53 #mke2fs -c /dev/loop0 100
54 #losetup -d /dev/loop0
55 mke2fs -F /tmp/SANITY.LOOP 
56
57
58 log '== touch .../f ; rm .../f ======================== test 0'
59 touch $DIR/f
60 $CHECKSTAT -t file $DIR/f || error 
61 rm $DIR/f
62 $CHECKSTAT -a $DIR/f || error
63 pass
64 $CLEAN
65 $START
66
67 log '== mkdir .../d1; mkdir .../d1/d2 ================= test 1'
68 mkdir $DIR/d1
69 mkdir $DIR/d1/d2
70 $CHECKSTAT -t dir $DIR/d1/d2 || error
71 pass
72 $CLEAN
73 $START
74
75 log '== rmdir .../d1/d2; rmdir .../d1 ================= test 1b'
76 rmdir $DIR/d1/d2
77 rmdir $DIR/d1
78 $CHECKSTAT -a $DIR/d1 || error
79 pass
80 $CLEAN
81 $START
82
83 log '== mkdir .../d2; touch .../d2/f ================== test 2'
84 mkdir $DIR/d2
85 touch $DIR/d2/f
86 $CHECKSTAT -t file $DIR/d2/f || error
87 pass
88 $CLEAN
89 $START
90
91 log '== rm -r .../d2; touch .../d2/f ================== test 2b'
92 rm -r $DIR/d2
93 $CHECKSTAT -a $DIR/d2 || error
94 pass
95 $CLEAN
96 $START
97
98 log '== mkdir .../d3 ================================== test 3'
99 mkdir $DIR/d3
100 $CHECKSTAT -t dir $DIR/d3 || error
101 pass
102 $CLEAN
103 $START
104 log '== touch .../d3/f ================================ test 3b'
105 touch $DIR/d3/f
106 $CHECKSTAT -t file $DIR/d3/f || error
107 pass
108 $CLEAN
109 $START
110 log '== rm -r .../d3 ================================== test 3c'
111 rm -r $DIR/d3
112 $CHECKSTAT -a $DIR/d3 || error
113 pass
114 $CLEAN
115 $START
116
117 log '== mkdir .../d4 ================================== test 4'
118 mkdir $DIR/d4
119 $CHECKSTAT -t dir $DIR/d4 || error
120 pass
121 $CLEAN
122 $START
123 log '== mkdir .../d4/d2 =============================== test 4b'
124 mkdir $DIR/d4/d2
125 $CHECKSTAT -t dir $DIR/d4/d2 || error
126 pass
127 $CLEAN
128 $START
129
130 log '== mkdir .../d5; mkdir .../d5/d2; chmod .../d5/d2 = test 5'
131 mkdir $DIR/d5
132 mkdir $DIR/d5/d2
133 chmod 0707 $DIR/d5/d2
134 $CHECKSTAT -t dir -p 0707 $DIR/d5/d2 || error
135 pass
136 $CLEAN
137 $START
138
139 log '== touch .../f6; chmod .../f6 ==================== test 6'
140 touch $DIR/f6
141 chmod 0666 $DIR/f6
142 $CHECKSTAT -t file -p 0666 $DIR/f6 || error
143 pass
144 $CLEAN
145 $START
146
147 log '== mkdir .../d7; mcreate .../d7/f; chmod .../d7/f = test 7'
148 mkdir $DIR/d7
149 $MCREATE $DIR/d7/f
150 chmod 0666 $DIR/d7/f
151 $CHECKSTAT -t file -p 0666 $DIR/d7/f || error
152 pass
153 $CLEAN
154 $START
155
156 log '== mkdir .../d7; mcreate .../d7/f2; echo foo > .../d7/f2 = test 7b'
157 $MCREATE $DIR/d7/f2
158 echo -n foo > $DIR/d7/f2
159 [ "`cat $DIR/d7/f2`" = "foo" ] || error
160 $CHECKSTAT -t file -s 3 $DIR/d7/f2 || error
161 pass
162 $CLEAN
163 $START
164
165 log '== mkdir .../d8; touch .../d8/f; chmod .../d8/f == test 8'
166 mkdir $DIR/d8
167 touch $DIR/d8/f
168 chmod 0666 $DIR/d8/f
169 $CHECKSTAT -t file -p 0666 $DIR/d8/f || error
170 pass
171 $CLEAN
172 $START
173
174
175 log '== mkdir .../d9 .../d9/d2 .../d9/d2/d3 =========== test 9'
176 mkdir $DIR/d9
177 mkdir $DIR/d9/d2
178 mkdir $DIR/d9/d2/d3
179 $CHECKSTAT -t dir $DIR/d9/d2/d3 || error
180 pass
181 $CLEAN
182 $START
183
184
185 log '== mkdir .../d10 .../d10/d2; touch .../d10/d2/f = test 10'
186 mkdir $DIR/d10
187 mkdir $DIR/d10/d2
188 touch $DIR/d10/d2/f
189 $CHECKSTAT -t file $DIR/d10/d2/f || error
190 pass
191 $CLEAN
192 $START
193
194 log '== mkdir .../d11 d11/d2; chmod .../d11/d2 ======= test 11'
195 mkdir $DIR/d11
196 mkdir $DIR/d11/d2
197 chmod 0666 $DIR/d11/d2
198 chmod 0705 $DIR/d11/d2
199 $CHECKSTAT -t dir -p 0705 $DIR/d11/d2 || error
200 pass
201 $CLEAN
202 $START
203
204 log '== mkdir .../d12; touch .../d12/f; chmod .../d12/f == test 12'
205 mkdir $DIR/d12
206 touch $DIR/d12/f
207 chmod 0666 $DIR/d12/f
208 chmod 0654 $DIR/d12/f
209 $CHECKSTAT -t file -p 0654 $DIR/d12/f || error
210 pass
211 $CLEAN
212 $START
213
214 log '== mkdir .../d13; creat .../d13/f;  .../d13/f; > .../d13/f == test 13'
215 mkdir $DIR/d13
216 dd if=/dev/zero of=$DIR/d13/f count=10
217 >  $DIR/d13/f
218 $CHECKSTAT -t file -s 0 $DIR/d13/f || error
219 pass
220 $CLEAN
221 $START
222
223 log '================================================== test 14'
224 mkdir $DIR/d14
225 touch $DIR/d14/f
226 rm $DIR/d14/f
227 $CHECKSTAT -a $DIR/d14/f || error
228 pass
229 $CLEAN
230 $START
231
232 log '================================================== test 15'
233 mkdir $DIR/d15
234 touch $DIR/d15/f
235 mv $DIR/d15/f $DIR/d15/f2
236 $CHECKSTAT -t file $DIR/d15/f2 || error
237 pass
238 $CLEAN
239 $START
240
241 log '================================================== test 16'
242 mkdir $DIR/d16
243 touch $DIR/d16/f
244 rm -rf $DIR/d16/f
245 $CHECKSTAT -a $DIR/d16/f || error
246 pass
247 $CLEAN
248 $START
249
250 log '== symlinks: create, remove (dangling and real) == test 17'
251 mkdir $DIR/d17
252 touch $DIR/d17/f
253 ln -s $DIR/d17/f $DIR/d17/l-exist
254 ln -s no-such-file $DIR/d17/l-dangle
255 ls -l $DIR/d17
256 $CHECKSTAT -l $DIR/d17/f $DIR/d17/l-exist || error
257 $CHECKSTAT -f -t f $DIR/d17/l-exist || error
258 $CHECKSTAT -l no-such-file $DIR/d17/l-dangle || error
259 $CHECKSTAT -fa $DIR/d17/l-dangle || error
260 rm -f $DIR/l-dangle
261 rm -f $DIR/l-exist
262 $CHECKSTAT -a $DIR/l-dangle || error
263 $CHECKSTAT -a $DIR/l-exist || error
264 pass
265 $CLEAN
266 $START
267
268 log "== touch .../f ; ls ... ========================= test 18"
269 touch $DIR/f
270 ls $DIR || error
271 pass
272 $CLEAN
273 $START
274
275 log "== touch .../f ; ls -l ... ====================== test 19"
276 touch $DIR/f
277 ls -l $DIR
278 rm $DIR/f
279 $CHECKSTAT -a $DIR/f || error
280 pass
281 $CLEAN
282 $START
283
284 log "== touch .../f ; ls -l ... ====================== test 20"
285 touch $DIR/f
286 rm $DIR/f
287 log "1 done"
288 touch $DIR/f
289 rm $DIR/f
290 log "2 done"
291 touch $DIR/f
292 rm $DIR/f
293 log "3 done"
294 $CHECKSTAT -a $DIR/f || error
295 pass
296 $CLEAN
297 $START
298
299 log '== write to dangling link ======================== test 21'
300 mkdir $DIR/d21
301 [ -f $DIR/d21/dangle ] && rm -f $DIR/d21/dangle
302 ln -s dangle $DIR/d21/link
303 echo foo >> $DIR/d21/link
304 cat $DIR/d21/dangle
305 $CHECKSTAT -t link $DIR/d21/link || error
306 $CHECKSTAT -f -t file $DIR/d21/link || error
307 pass
308 $CLEAN
309 $START
310
311 log '== unpack tar archive as non-root user =========== test 22'
312 mkdir $DIR/d22
313 [ $UID -ne 0 ] && RUNAS_ID="$UID"
314 [ $UID -ne 0 ] && RUNAS=""
315 chown $RUNAS_ID $DIR/d22
316 # Tar gets pissy if it can't access $PWD *sigh*
317 (cd /tmp ; $RUNAS tar cf - /etc/hosts /etc/sysconfig/network | $RUNAS tar xfC - $DIR/d22)
318 ls -lR $DIR/d22/etc
319 $CHECKSTAT -t dir $DIR/d22/etc || error
320 $CHECKSTAT -u \#$RUNAS_ID $DIR/d22/etc || error
321 pass
322 $CLEAN
323 $START
324
325
326 log '== O_CREAT|O_EXCL in subdir ====================== test 23'
327 mkdir $DIR/d23
328 $TOEXCL $DIR/d23/f23
329 $TOEXCL -e $DIR/d23/f23 || error
330 pass
331 $CLEAN
332 $START
333
334 echo '== rename sanity ================================= test24'
335 echo '-- same directory rename'
336 log '-- test 24-R1: touch a ; rename a b'
337 mkdir $DIR/R1
338 touch $DIR/R1/f
339 mv $DIR/R1/f $DIR/R1/g
340 $CHECKSTAT -t file $DIR/R1/g || error
341 pass
342 $CLEAN
343 $START
344
345 log '-- test 24-R2: touch a b ; rename a b;'
346 mkdir $DIR/R2
347 touch $DIR/R2/{f,g}
348 mv $DIR/R2/f $DIR/R2/g
349 $CHECKSTAT -a $DIR/R2/f || error
350 $CHECKSTAT -t file $DIR/R2/g || error
351 pass
352 $CLEAN
353 $START
354
355 log '-- test 24-R3: mkdir a  ; rename a b;'
356 mkdir $DIR/R3
357 mkdir $DIR/R3/f
358 mv $DIR/R3/f $DIR/R3/g
359 $CHECKSTAT -a $DIR/R3/f || error
360 $CHECKSTAT -t dir $DIR/R3/g || error
361 pass
362 $CLEAN
363 $START
364
365 log '-- test 24-R4: mkdir a b ; rename a b;'
366 mkdir $DIR/R4
367 mkdir $DIR/R4/{f,g}
368 perl -e "rename \"$DIR/R4/f\", \"$DIR/R4/g\";"
369 $CHECKSTAT -a $DIR/R4/f || error
370 $CHECKSTAT -t dir $DIR/R4/g || error
371 pass
372 $CLEAN
373 $START
374
375 echo '-- cross directory renames --' 
376 log '-- test 24-R5: touch a ; rename a b'
377 mkdir $DIR/R5{a,b}
378 touch $DIR/R5a/f
379 mv $DIR/R5a/f $DIR/R5b/g
380 $CHECKSTAT -a $DIR/R5a/f || error
381 $CHECKSTAT -t file $DIR/R5b/g || error
382 pass
383 $CLEAN
384 $START
385
386 log '-- test 24-R6: touch a ; rename a b'
387 mkdir $DIR/R6{a,b}
388 touch $DIR/R6a/f $DIR/R6b/g
389 mv $DIR/R6a/f $DIR/R6b/g
390 $CHECKSTAT -a $DIR/R6a/f || error
391 $CHECKSTAT -t file $DIR/R6b/g || error
392 pass
393 $CLEAN
394 $START
395
396 log '-- test 24-R7: touch a ; rename a b'
397 mkdir $DIR/R7{a,b}
398 mkdir $DIR/R7a/f
399 mv $DIR/R7a/f $DIR/R7b/g
400 $CHECKSTAT -a $DIR/R7a/f || error
401 $CHECKSTAT -t dir $DIR/R7b/g || error
402 pass
403 $CLEAN
404 $START
405
406 log '-- test 24-R8: touch a ; rename a b'
407 mkdir $DIR/R8{a,b}
408 mkdir $DIR/R8a/f $DIR/R8b/g
409 perl -e "rename \"$DIR/R8a/f\", \"$DIR/R8b/g\";"
410 $CHECKSTAT -a $DIR/R8a/f || error
411 $CHECKSTAT -t dir $DIR/R8b/g || error
412 pass
413 $CLEAN
414 $START
415
416 echo "-- rename error cases"
417 log "-- test 24-R9 target error: touch f ; mkdir a ; rename f a"
418 mkdir $DIR/R9
419 mkdir $DIR/R9/a
420 touch $DIR/R9/f
421 perl -e "rename \"$DIR/R9/f\", \"$DIR/R9/a\";"
422 $CHECKSTAT -t file $DIR/R9/f || error
423 $CHECKSTAT -t dir  $DIR/R9/a || error
424 $CHECKSTAT -a file $DIR/R9/a/f || error
425 pass
426 $CLEAN
427 $START
428
429 log "--test 24-R10 source does not exist" 
430 mkdir $DIR/R10
431 perl -e "rename \"$DIR/R10/f\", \"$DIR/R10/g\"" 
432 $CHECKSTAT -t dir $DIR/R10 || error
433 $CHECKSTAT -a $DIR/R10/f || error
434 $CHECKSTAT -a $DIR/R10/g || error
435 pass
436 $CLEAN
437 $START
438
439 echo '== symlink sanity ================================ test25'
440 log "--test 25.1 create file in symlinked directory"
441 mkdir $DIR/d25
442 ln -s d25 $DIR/s25
443 touch $DIR/s25/foo
444 pass
445 $CLEAN
446 $START
447
448 log "--test 25.2 lookup file in symlinked directory"
449 $CHECKSTAT -t file $DIR/s25/foo
450 pass
451 $CLEAN
452 $START
453
454 log "--test 26 multiple component symlink"
455 mkdir $DIR/d26
456 mkdir $DIR/d26/d26-2
457 ln -s d26/d26-2 $DIR/s26
458 touch $DIR/s26/foo
459 pass
460 $CLEAN
461 $START
462
463 log "--test 26.1 multiple component symlink at the end of a lookup"
464 ln -s d26/d26-2/foo $DIR/s26-2
465 touch $DIR/s26-2
466 pass
467 $CLEAN
468 $START
469
470 log "--test 26.2 a chain of symlinks"
471 mkdir $DIR/d26.2
472 touch $DIR/d26.2/foo
473 ln -s d26.2 $DIR/s26.2-1
474 ln -s s26.2-1 $DIR/s26.2-2
475 ln -s s26.2-2 $DIR/s26.2-3
476 chmod 0666 $DIR/s26.2-3/foo
477 pass
478 $CLEAN
479 $START
480
481 # recursive symlinks (bug 439)
482 log "--test 26.3 create multiple component recursive symlink"
483 ln -s d26-3/foo $DIR/d26-3
484 pass
485 $CLEAN
486 $START
487
488 log "--test 26.3 unlink multiple component recursive symlink"
489 rm $DIR/d26-3
490 pass
491 $CLEAN
492 $START
493
494 echo '== stripe sanity ================================= test27'
495 log "--test 27.1 create one stripe"
496 mkdir $DIR/d27
497 $LSTRIPE $DIR/d27/f0 8192 0 1
498 $CHECKSTAT -t file $DIR/d27/f0
499 log "--test 27.2 write to one stripe file"
500 cp /etc/hosts $DIR/d27/f0
501 pass
502
503 log "--test 27.3 create two stripe file f01"
504 $LSTRIPE $DIR/d27/f01 8192 0 2
505 log "--test 27.4 write to two stripe file file f01"
506 dd if=/dev/zero of=$DIR/d27/f01 bs=4k count=4
507 pass
508
509 log "--test 27.5 create file with default settings"
510 $LSTRIPE $DIR/d27/fdef 0 -1 0
511 $CHECKSTAT -t file $DIR/d27/fdef
512 #dd if=/dev/zero of=$DIR/d27/fdef bs=4k count=4
513
514 log "--test 27.6 lstripe existing file (should return error)"
515 $LSTRIPE $DIR/d27/f12 8192 1 2
516 ! $LSTRIPE $DIR/d27/f12 8192 1 2
517 $CHECKSTAT -t file $DIR/d27/f12
518 #dd if=/dev/zero of=$DIR/d27/f12 bs=4k count=4
519 pass
520
521
522 log "--test 27.7 lstripe with bad stripe size (should return error on LOV)"
523 $LSTRIPE $DIR/d27/fbad 100 1 2 || /bin/true
524 dd if=/dev/zero of=$DIR/d27/f12 bs=4k count=4
525 pass
526 $CLEAN
527 $START
528
529 log "--test 27.8 mcreate file without objects to test lfind"
530 $MCREATE $DIR/d27/fnone || error
531
532 log "--test 27.9 lfind "
533 $LFIND $DIR/d27
534 pass
535 $CLEAN
536 $START
537
538 log '== create/mknod/mkdir with bad file types ======== test28'
539 mkdir $DIR/d28
540 $CREATETEST $DIR/d28/ct || error
541 pass
542
543 log '== IT_GETATTR regression  ======================== test29'
544 mkdir $DIR/d29
545 touch $DIR/d29/foo
546 ls -l $DIR/d29
547 MDCDIR=${MDCDIR:-/proc/fs/lustre/ldlm/ldlm/MDC_*}
548 LOCKCOUNTORIG=`cat $MDCDIR/lock_count`
549 LOCKUNUSEDCOUNTORIG=`cat $MDCDIR/lock_unused_count`
550 ls -l $DIR/d29
551 LOCKCOUNTCURRENT=`cat $MDCDIR/lock_count`
552 LOCKUNUSEDCOUNTCURRENT=`cat $MDCDIR/lock_unused_count`
553 if [ $LOCKCOUNTCURRENT -gt $LOCKCOUNTORIG ] || [ $LOCKUNUSEDCOUNTCURRENT -gt $LOCKUNUSEDCOUNTORIG ]; then
554     error
555 fi
556 pass
557 $CLEAN
558 $START
559
560 log '== run binary from Lustre (execve) =============== test30'
561 cp `which ls` $DIR
562 $DIR/ls /
563 $CLEAN
564 $START
565
566 log '== open-unlink file ============================== test31'
567 ./openunlink $DIR/f31 $DIR/f31 || error
568 pass
569
570
571 log '== more mountpoints and symlinks ================= test32'
572
573 log '-- test 32-R1: stat d32/ext2-mountpoint/..'
574 [ -e $DIR/d32 ] && rm -fr $DIR/d32
575 mkdir -p $DIR/d32/ext2-mountpoint 
576 mount -t ext2 -o loop $EXT2_DEV $DIR/d32/ext2-mountpoint  
577 $CHECKSTAT -t dir $DIR/d32/ext2-mountpoint/.. || error  
578 umount $DIR/d32/ext2-mountpoint/
579 pass
580 $CLEAN
581 $START
582
583 log '-- test 32-R2: open d32/ext2-mountpoint/..'
584 [ -e $DIR/d32 ] && rm -fr $DIR/d32
585 mkdir -p $DIR/d32/ext2-mountpoint 
586 mount -t ext2 -o loop $EXT2_DEV $DIR/d32/ext2-mountpoint  
587 ls -al $DIR/d32/ext2-mountpoint/.. || error
588 umount $DIR/d32/ext2-mountpoint/
589 pass
590 $CLEAN
591 $START
592  
593 log '-- test 32-R3: stat d32/ext2-mountpoint/../d2/test_dir'
594 [ -e $DIR/d32 ] && rm -fr $DIR/d32
595 mkdir -p $DIR/d32/ext2-mountpoint 
596 mount -t ext2 -o loop $EXT2_DEV $DIR/d32/ext2-mountpoint  
597 mkdir -p $DIR/d32/d2/test_dir    
598 $CHECKSTAT -t dir $DIR/d32/ext2-mountpoint/../d2/test_dir || error
599 umount $DIR/d32/ext2-mountpoint/
600 pass
601 $CLEAN
602 $START
603
604 log '-- test 32-R4: open d32/ext2-mountpoint/../d2/test_dir'
605 [ -e $DIR/d32 ] && rm -fr $DIR/d32
606 mkdir -p $DIR/d32/ext2-mountpoint 
607 mount -t ext2 -o loop $EXT2_DEV $DIR/d32/ext2-mountpoint  
608 mkdir -p $DIR/d32/d2/test_dir    
609 ls -al $DIR/d32/ext2-mountpoint/../d2/test_dir || error
610 umount $DIR/d32/ext2-mountpoint/
611 pass
612 $CLEAN
613 $START
614
615 log '-- test 32-R5: stat d32/symlink->tmp/symlink->lustre-subdir'
616 [ -e $DIR/d32 ] && rm -fr $DIR/d32
617 mkdir -p $DIR/d32/tmp    
618 TMP_DIR=$DIR/d32/tmp       
619 ln -s $DIR/d32 $TMP_DIR/symlink11 
620 ln -s $TMP_DIR/symlink11 $TMP_DIR/../symlink01 
621 $CHECKSTAT -t link $DIR/d32/tmp/symlink11 || error
622 $CHECKSTAT -t link $DIR/d32/symlink01 || error
623 pass
624 $CLEAN
625 $START
626
627 log '-- test 32-R6: open d32/symlink->tmp/symlink->lustre-subdir'
628 [ -e $DIR/d32 ] && rm -fr $DIR/d32
629 mkdir -p $DIR/d32/tmp    
630 TMP_DIR=$DIR/d32/tmp       
631 ln -s $DIR/d32 $TMP_DIR/symlink11 
632 ln -s $TMP_DIR/symlink11 $TMP_DIR/../symlink01 
633 ls $DIR/d32/tmp/symlink11  || error
634 ls $DIR/d32/symlink01 || error
635 pass
636 $CLEAN
637 $START
638
639 log '-- test 32-R7: stat d32/symlink->tmp/symlink->lustre-subdir/test_dir'
640 [ -e $DIR/d32 ] && rm -fr $DIR/d32
641 [ -e $DIR/test_dir ] && rm -fr $DIR/test_dir
642 mkdir -p $DIR/test_dir 
643 mkdir -p $DIR/d32/tmp    
644 TMP_DIR=$DIR/d32/tmp       
645 ln -s $DIR/test_dir $TMP_DIR/symlink12 
646 ln -s $TMP_DIR/symlink12 $TMP_DIR/../symlink02 
647 $CHECKSTAT -t link $DIR/d32/tmp/symlink12 || error
648 $CHECKSTAT -t link $DIR/d32/symlink02 || error
649 $CHECKSTAT -t dir -f $DIR/d32/tmp/symlink12 || error
650 $CHECKSTAT -t dir -f $DIR/d32/symlink02 || error
651 pass
652 $CLEAN
653 $START
654
655 log '-- test 32-R8: open d32/symlink->tmp/symlink->lustre-subdir/test_dir'
656 [ -e $DIR/d32 ] && rm -fr $DIR/d32
657 [ -e $DIR/test_dir ] && rm -fr $DIR/test_dir
658 mkdir -p $DIR/test_dir 
659 mkdir -p $DIR/d32/tmp    
660 TMP_DIR=$DIR/d32/tmp       
661 ln -s $DIR/test_dir $TMP_DIR/symlink12 
662 ln -s $TMP_DIR/symlink12 $TMP_DIR/../symlink02 
663 ls $DIR/d32/tmp/symlink12 || error
664 ls $DIR/d32/symlink02  || error
665 pass
666 $CLEAN
667 $START
668
669 log '-- test 32-R9: stat d32/ext2-mountpoint/../test_file'
670 [ -e $DIR/d32 ] && rm -fr $DIR/d32
671 mkdir -p $DIR/d32/ext2-mountpoint 
672 mount -t ext2 -o loop $EXT2_DEV $DIR/d32/ext2-mountpoint  
673 touch $DIR/d32/test_file
674 $CHECKSTAT -t file $DIR/d32/ext2-mountpoint/../test_file || error  
675 umount $DIR/d32/ext2-mountpoint  
676 pass
677 $CLEAN
678 $START
679
680 log '-- test 32-R10: open d32/ext2-mountpoint/../test_file'
681 [ -e $DIR/d32 ] && rm -fr $DIR/d32
682 mkdir -p $DIR/d32/ext2-mountpoint 
683 mount -t ext2 -o loop $EXT2_DEV $DIR/d32/ext2-mountpoint  
684 touch $DIR/d32/test_file
685 cat $DIR/d32/ext2-mountpoint/../test_file || error
686 umount $DIR/d32/ext2-mountpoint/
687 pass
688 $CLEAN
689 $START
690
691 log '-- test 32-R11: stat d32/ext2-mountpoint/../d2/test_file'
692 [ -e $DIR/d32 ] && rm -fr $DIR/d32
693 mkdir -p $DIR/d32/ext2-mountpoint 
694 mount -t ext2 -o loop $EXT2_DEV $DIR/d32/ext2-mountpoint  
695 mkdir -p $DIR/d32/d2
696 touch $DIR/d32/d2/test_file
697 $CHECKSTAT -t file $DIR/d32/ext2-mountpoint/../d2/test_file || error
698 umount $DIR/d32/ext2-mountpoint/
699 pass
700 $CLEAN
701 $START
702
703 log '-- test 32-R12: open d32/ext2-mountpoint/../d2/test_file'
704 [ -e $DIR/d32 ] && rm -fr $DIR/d32
705 mkdir -p $DIR/d32/ext2-mountpoint 
706 mount -t ext2 -o loop $EXT2_DEV $DIR/d32/ext2-mountpoint  
707 mkdir -p $DIR/d32/d2
708 touch $DIR/d32/d2/test_file
709 cat  $DIR/d32/ext2-mountpoint/../d2/test_file || error
710 umount $DIR/d32/ext2-mountpoint/
711 pass
712 $CLEAN
713 $START
714
715 log '-- test 32-R13: stat d32/symlink->tmp/symlink->lustre-root'
716 [ -e $DIR/d32 ] && rm -fr $DIR/d32
717 mkdir -p $DIR/d32/tmp    
718 TMP_DIR=$DIR/d32/tmp       
719 ln -s $DIR $TMP_DIR/symlink11 
720 ln -s $TMP_DIR/symlink11 $TMP_DIR/../symlink01 
721 $CHECKSTAT -t link $DIR/d32/tmp/symlink11 || error
722 $CHECKSTAT -t link $DIR/d32/symlink01 || error
723 pass
724 $CLEAN
725 $START
726
727 log '-- test 32-R14: open d32/symlink->tmp/symlink->lustre-root'
728 [ -e $DIR/d32 ] && rm -fr $DIR/d32
729 mkdir -p $DIR/d32/tmp    
730 TMP_DIR=$DIR/d32/tmp       
731 ln -s $DIR $TMP_DIR/symlink11 
732 ln -s $TMP_DIR/symlink11 $TMP_DIR/../symlink01 
733 ls -l $DIR/d32/tmp/symlink11  || error
734 ls -l $DIR/d32/symlink01 || error
735 pass
736 $CLEAN
737 $START
738
739 log '-- test 32-R15: stat d32/symlink->tmp/symlink->lustre-root/test_file'
740 [ -e $DIR/d32 ] && rm -fr $DIR/d32
741 [ -e $DIR/test_file ] && rm -fr $DIR/test_file
742 touch $DIR/test_file 
743 mkdir -p $DIR/d32/tmp    
744 TMP_DIR=$DIR/d32/tmp       
745 ln -s $DIR/test_file $TMP_DIR/symlink12 
746 ln -s $TMP_DIR/symlink12 $TMP_DIR/../symlink02 
747 $CHECKSTAT -t link $DIR/d32/tmp/symlink12 || error
748 $CHECKSTAT -t link $DIR/d32/symlink02 || error
749 $CHECKSTAT -t file -f $DIR/d32/tmp/symlink12 || error
750 $CHECKSTAT -t file -f $DIR/d32/symlink02 || error
751 pass
752 $CLEAN
753 $START
754
755 log '-- test 32-R16: open d32/symlink->tmp/symlink->lustre-root/test_file'
756 [ -e $DIR/d32 ] && rm -fr $DIR/d32
757 [ -e $DIR/test_file ] && rm -fr $DIR/test_file
758 touch $DIR/test_file 
759 mkdir -p $DIR/d32/tmp    
760 TMP_DIR=$DIR/d32/tmp       
761 ln -s $DIR/test_file $TMP_DIR/symlink12 
762 ln -s $TMP_DIR/symlink12 $TMP_DIR/../symlink02 
763 cat $DIR/d32/tmp/symlink12 || error
764 cat $DIR/d32/symlink02  || error
765 pass
766 $CLEAN
767 $START
768
769 log '-- test 33: write file with mode 444 (should return error)'
770 #   chmod 444 /mnt/lustre/somefile
771 #   open(/mnt/lustre/somefile, O_RDWR)
772 #   Should return -1
773 [ $UID -ne 0 ] && RUNAS_ID="$UID"
774 [ $UID -ne 0 ] && RUNAS=""
775 [ -e $DIR/test_33_file ] && rm -fr $DIR/test_33_file
776 touch $DIR/test_33_file
777 chmod 444 $DIR/test_33_file
778 chown $RUNAS_ID $DIR/test_33_file
779 $RUNAS openfile -f O_RDWR $DIR/test_33_file && error
780 pass
781 $CLEAN
782 $START
783
784 if [ -n "$BUG1360" ]; then
785 log '-- test 34: execute a file with mode 444 (should return error)'
786 [ $UID -ne 0 ] && RUNAS_ID="$UID"
787 [ $UID -ne 0 ] && RUNAS=""
788 [ -e $DIR/test_35_file ] && rm -fr $DIR/test_35_file
789 cp /bin/sh $DIR/test_35_file
790 chmod 444 $DIR/test_35_file
791 chown $RUNAS_ID $DIR/test_35_file
792 $DIR/test_35_file && error
793 pass
794 $CLEAN
795 $START
796 else
797 echo "Skipping test for 1360: set \$BUG_1360 to run it (fail cleanup, likely)."
798 fi
799
800 if [ -n "$BUG_1365" ]; then
801 log '-- test 35: truncate file that has not been opened'
802 $MCREATE $DIR/f
803 $TRUNCATE $DIR/f 100
804 rm $DIR/f
805 pass
806 $CLEAN
807 $START
808 else
809 echo "Skipping test for 1365: set \$BUG_1365 to run it (and crash, likely)."
810 fi
811
812 log '-- test 36: cvs operations'
813 [ $UID -ne 0 ] && RUNAS_ID="$UID"
814 [ $UID -ne 0 ] && RUNAS=""
815 mkdir -p $DIR/cvsroot
816 log '-- test 36-1: cvs init'
817 cvs -d $DIR/cvsroot init 
818 $CLEAN
819 $START
820 log '-- test 36-2: cvs import'
821 (cd /etc/init.d ; cvs -d $DIR/cvsroot import -m "nomesg"  reposname vtag rtag )
822 $CLEAN
823 $START
824 log '-- test 36-3: cvs checkout'
825 (cd $DIR ; cvs -d $DIR/cvsroot co reposname )
826 $CLEAN
827 $START
828 log '-- test 36-4: cvs add'
829 (cd $DIR/reposname ; touch foo34 ; cvs add -m 'addmsg' foo34 )
830 $CLEAN
831 $START
832 log '-- test 36-5: cvs update'
833 (cd $DIR/reposname ; cvs update )
834 $CLEAN
835 $START
836 log '-- test 36-5: cvs commit'
837 #
838 # XXX change this: use a non rooot users
839 (cd $DIR/reposname ; cvs commit -m 'nomsg'  foo32 )
840 pass
841 $CLEAN
842 $START
843
844 log '== cleanup ============================================='
845 rm -r $DIR/[Rdfs][1-9]* $DIR/ls
846
847 echo '======================= finished ======================='