📄 sanity.sh
字号:
#!/bin/bash## Run select tests by setting ONLY, or as arguments to the script.# Skip specific tests by setting EXCEPT.## e.g. ONLY="22 23" or ONLY="`seq 32 39`" or EXCEPT="31"set -eONLY=${ONLY:-"$*"}# bug number for skipped test: 13297 2108 9789 3637 9789 3561 12622 13310 10764ALWAYS_EXCEPT=${ALWAYS_EXCEPT:-"27u 42a 42b 42c 42d 45 51d 74b 75 $SANITY_EXCEPT" }# UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!# Tests that fail on uml, maybe elsewhere, FIXMECPU=`awk '/model/ {print $4}' /proc/cpuinfo`# buffer i/o errs sock spc runas[ "$CPU" = "UML" ] && EXCEPT="$EXCEPT 27m 27n 27o 27p 27q 27r 31d 54a 64b 99a 99b 99c 99d 99e 99f 101"case `uname -r` in2.4*) FSTYPE=${FSTYPE:-ext3}; ALWAYS_EXCEPT="$ALWAYS_EXCEPT 76" [ "$CPU" = "UML" ] && ALWAYS_EXCEPT="$ALWAYS_EXCEPT 105a";;2.6*) FSTYPE=${FSTYPE:-ldiskfs}; ALWAYS_EXCEPT="$ALWAYS_EXCEPT " ;;*) error "unsupported kernel" ;;esacSRCDIR=`dirname $0`export PATH=$PWD/$SRCDIR:$SRCDIR:$SRCDIR/../utils:$PATH:/sbinTMP=${TMP:-/tmp}CHECKSTAT=${CHECKSTAT:-"checkstat -v"}CREATETEST=${CREATETEST:-createtest}LFS=${LFS:-lfs}SETSTRIPE=${SETSTRIPE:-"$LFS setstripe"}GETSTRIPE=${GETSTRIPE:-"$LFS getstripe"}LSTRIPE=${LSTRIPE:-"$LFS setstripe"}LFIND=${LFIND:-"$LFS find"}LVERIFY=${LVERIFY:-ll_dirstripe_verify}LSTRIPEINFO=${LSTRIPEINFO:-ll_getstripe_info}LCTL=${LCTL:-lctl}MCREATE=${MCREATE:-mcreate}OPENFILE=${OPENFILE:-openfile}OPENUNLINK=${OPENUNLINK:-openunlink}RANDOM_READS=${RANDOM_READS:-"random-reads"}TOEXCL=${TOEXCL:-toexcl}TRUNCATE=${TRUNCATE:-truncate}MUNLINK=${MUNLINK:-munlink}SOCKETSERVER=${SOCKETSERVER:-socketserver}SOCKETCLIENT=${SOCKETCLIENT:-socketclient}IOPENTEST1=${IOPENTEST1:-iopentest1}IOPENTEST2=${IOPENTEST2:-iopentest2}MEMHOG=${MEMHOG:-memhog}DIRECTIO=${DIRECTIO:-directio}ACCEPTOR_PORT=${ACCEPTOR_PORT:-988}UMOUNT=${UMOUNT:-"umount -d"}CHECK_GRANT=${CHECK_GRANT:-"yes"}GRANT_CHECK_LIST=${GRANT_CHECK_LIST:-""}export NAME=${NAME:-local}SAVE_PWD=$PWDCLEANUP=${CLEANUP:-:}SETUP=${SETUP:-:}TRACE=${TRACE:-""}LUSTRE=${LUSTRE:-`dirname $0`/..}. $LUSTRE/tests/test-framework.shinit_test_env $@. ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}[ "$SLOW" = "no" ] && EXCEPT_SLOW="24o 27m 36f 36g 51b 51c 60c 63 64b 68 71 73 77f 78 101 103 115 120g 124b"SANITYLOG=${TESTSUITELOG:-$TMP/$(basename $0 .sh).log}FAIL_ON_ERROR=falsecleanup() { echo -n "cln.." pgrep ll_sa > /dev/null && { echo "There are ll_sa thread not exit!"; exit 20; } cleanupall ${FORCE} $* || { echo "FAILed to clean up"; exit 20; }}setup() { echo -n "mnt.." load_modules setupall || exit 10 echo "done"}check_kernel_version() { VERSION_FILE=version WANT_VER=$1 GOT_VER=$(lctl get_param -n $VERSION_FILE | awk '/kernel:/ {print $2}') [ $GOT_VER == "patchless" ] && return 0 [ $GOT_VER -ge $WANT_VER ] && return 0 log "test needs at least kernel version $WANT_VER, running $GOT_VER" return 1}if [ "$ONLY" == "cleanup" ]; then sh llmountcleanup.sh exit 0fi[ "$SANITYLOG" ] && rm -f $SANITYLOG || truecheck_and_setup_lustreDIR=${DIR:-$MOUNT}[ -z "`echo $DIR | grep $MOUNT`" ] && echo "$DIR not in $MOUNT" && exit 99LOVNAME=`lctl get_param -n llite.*.lov.common_name | tail -n 1`OSTCOUNT=`lctl get_param -n lov.$LOVNAME.numobd`STRIPECOUNT=`lctl get_param -n lov.$LOVNAME.stripecount`STRIPESIZE=`lctl get_param -n lov.$LOVNAME.stripesize`ORIGFREE=`lctl get_param -n lov.$LOVNAME.kbytesavail`MAXFREE=${MAXFREE:-$((200000 * $OSTCOUNT))}[ -f $DIR/d52a/foo ] && chattr -a $DIR/d52a/foo[ -f $DIR/d52b/foo ] && chattr -i $DIR/d52b/foorm -rf $DIR/[Rdfs][0-9]*# $RUNAS_ID may get set incorrectly somewhere else[ $UID -eq 0 -a $RUNAS_ID -eq 0 ] && error "\$RUNAS_ID set to 0, but \$UID is also 0!"check_runas_id $RUNAS_ID $RUNASbuild_test_filterecho "preparing for tests involving mounts"EXT2_DEV=${EXT2_DEV:-$TMP/SANITY.LOOP}touch $EXT2_DEVmke2fs -j -F $EXT2_DEV 8000 > /dev/nullecho # add a newline after mke2fs.umask 077OLDDEBUG="`sysctl -n lnet.debug 2> /dev/null`"sysctl -w lnet.debug=-1 2> /dev/null || truetest_0() { touch $DIR/$tfile $CHECKSTAT -t file $DIR/$tfile || error rm $DIR/$tfile $CHECKSTAT -a $DIR/$tfile || error}run_test 0 "touch .../$tfile ; rm .../$tfile ====================="test_0b() { chmod 0755 $DIR || error $CHECKSTAT -p 0755 $DIR || error}run_test 0b "chmod 0755 $DIR ============================="test_1a() { mkdir $DIR/d1 mkdir $DIR/d1/d2 $CHECKSTAT -t dir $DIR/d1/d2 || error}run_test 1a "mkdir .../d1; mkdir .../d1/d2 ====================="test_1b() { rmdir $DIR/d1/d2 rmdir $DIR/d1 $CHECKSTAT -a $DIR/d1 || error}run_test 1b "rmdir .../d1/d2; rmdir .../d1 ====================="test_2a() { mkdir $DIR/d2 touch $DIR/d2/f $CHECKSTAT -t file $DIR/d2/f || error}run_test 2a "mkdir .../d2; touch .../d2/f ======================"test_2b() { rm -r $DIR/d2 $CHECKSTAT -a $DIR/d2 || error}run_test 2b "rm -r .../d2; checkstat .../d2/f ======================"test_3a() { mkdir $DIR/d3 $CHECKSTAT -t dir $DIR/d3 || error}run_test 3a "mkdir .../d3 ======================================"test_3b() { if [ ! -d $DIR/d3 ]; then mkdir $DIR/d3 fi touch $DIR/d3/f $CHECKSTAT -t file $DIR/d3/f || error}run_test 3b "touch .../d3/f ===================================="test_3c() { rm -r $DIR/d3 $CHECKSTAT -a $DIR/d3 || error}run_test 3c "rm -r .../d3 ======================================"test_4a() { mkdir $DIR/d4 $CHECKSTAT -t dir $DIR/d4 || error}run_test 4a "mkdir .../d4 ======================================"test_4b() { if [ ! -d $DIR/d4 ]; then mkdir $DIR/d4 fi mkdir $DIR/d4/d2 $CHECKSTAT -t dir $DIR/d4/d2 || error}run_test 4b "mkdir .../d4/d2 ==================================="test_5() { mkdir $DIR/d5 mkdir $DIR/d5/d2 chmod 0707 $DIR/d5/d2 $CHECKSTAT -t dir -p 0707 $DIR/d5/d2 || error}run_test 5 "mkdir .../d5 .../d5/d2; chmod .../d5/d2 ============"test_6a() { touch $DIR/f6a chmod 0666 $DIR/f6a || error $CHECKSTAT -t file -p 0666 -u \#$UID $DIR/f6a || error}run_test 6a "touch .../f6a; chmod .../f6a ======================"test_6b() { [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID = UID = $UID -- skipping" && return if [ ! -f $DIR/f6a ]; then touch $DIR/f6a chmod 0666 $DIR/f6a fi $RUNAS chmod 0444 $DIR/f6a && error $CHECKSTAT -t file -p 0666 -u \#$UID $DIR/f6a || error}run_test 6b "$RUNAS chmod .../f6a (should return error) =="test_6c() { [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID = UID = $UID -- skipping" && return touch $DIR/f6c chown $RUNAS_ID $DIR/f6c || error $CHECKSTAT -t file -u \#$RUNAS_ID $DIR/f6c || error}run_test 6c "touch .../f6c; chown .../f6c ======================"test_6d() { [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID = UID = $UID -- skipping" && return if [ ! -f $DIR/f6c ]; then touch $DIR/f6c chown $RUNAS_ID $DIR/f6c fi $RUNAS chown $UID $DIR/f6c && error $CHECKSTAT -t file -u \#$RUNAS_ID $DIR/f6c || error}run_test 6d "$RUNAS chown .../f6c (should return error) =="test_6e() { [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID = UID = $UID -- skipping" && return touch $DIR/f6e chgrp $RUNAS_ID $DIR/f6e || error $CHECKSTAT -t file -u \#$UID -g \#$RUNAS_ID $DIR/f6e || error}run_test 6e "touch .../f6e; chgrp .../f6e ======================"test_6f() { [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID = UID = $UID -- skipping" && return if [ ! -f $DIR/f6e ]; then touch $DIR/f6e chgrp $RUNAS_ID $DIR/f6e fi $RUNAS chgrp $UID $DIR/f6e && error $CHECKSTAT -t file -u \#$UID -g \#$RUNAS_ID $DIR/f6e || error}run_test 6f "$RUNAS chgrp .../f6e (should return error) =="test_6g() { [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID = UID = $UID -- skipping" && return mkdir $DIR/d6g || error chmod 777 $DIR/d6g || error $RUNAS mkdir $DIR/d6g/d || error chmod g+s $DIR/d6g/d || error mkdir $DIR/d6g/d/subdir $CHECKSTAT -g \#$RUNAS_ID $DIR/d6g/d/subdir || error}run_test 6g "Is new dir in sgid dir inheriting group?"test_6h() { # bug 7331 [ $RUNAS_ID -eq $UID ] && skip "RUNAS_ID = UID = $UID -- skipping" && return touch $DIR/f6h || error "touch failed" chown $RUNAS_ID:$RUNAS_ID $DIR/f6h || error "initial chown failed" $RUNAS -G$RUNAS_ID chown $RUNAS_ID:0 $DIR/f6h && error "chown worked" $CHECKSTAT -t file -u \#$RUNAS_ID -g \#$RUNAS_ID $DIR/f6h || error}run_test 6h "$RUNAS chown RUNAS_ID.0 .../f6h (should return error)"test_7a() { mkdir $DIR/d7 $MCREATE $DIR/d7/f chmod 0666 $DIR/d7/f $CHECKSTAT -t file -p 0666 $DIR/d7/f || error}run_test 7a "mkdir .../d7; mcreate .../d7/f; chmod .../d7/f ===="test_7b() { if [ ! -d $DIR/d7 ]; then mkdir $DIR/d7 fi $MCREATE $DIR/d7/f2 echo -n foo > $DIR/d7/f2 [ "`cat $DIR/d7/f2`" = "foo" ] || error $CHECKSTAT -t file -s 3 $DIR/d7/f2 || error}run_test 7b "mkdir .../d7; mcreate d7/f2; echo foo > d7/f2 ====="test_8() { mkdir $DIR/d8 touch $DIR/d8/f chmod 0666 $DIR/d8/f $CHECKSTAT -t file -p 0666 $DIR/d8/f || error}run_test 8 "mkdir .../d8; touch .../d8/f; chmod .../d8/f ======="test_9() { mkdir $DIR/d9 mkdir $DIR/d9/d2 mkdir $DIR/d9/d2/d3 $CHECKSTAT -t dir $DIR/d9/d2/d3 || error}run_test 9 "mkdir .../d9 .../d9/d2 .../d9/d2/d3 ================"test_10() { mkdir $DIR/d10 mkdir $DIR/d10/d2 touch $DIR/d10/d2/f $CHECKSTAT -t file $DIR/d10/d2/f || error}run_test 10 "mkdir .../d10 .../d10/d2; touch .../d10/d2/f ======"test_11() { mkdir $DIR/d11 mkdir $DIR/d11/d2 chmod 0666 $DIR/d11/d2 chmod 0705 $DIR/d11/d2 $CHECKSTAT -t dir -p 0705 $DIR/d11/d2 || error}run_test 11 "mkdir .../d11 d11/d2; chmod .../d11/d2 ============"test_12() { mkdir $DIR/d12 touch $DIR/d12/f chmod 0666 $DIR/d12/f chmod 0654 $DIR/d12/f $CHECKSTAT -t file -p 0654 $DIR/d12/f || error}run_test 12 "touch .../d12/f; chmod .../d12/f .../d12/f ========"test_13() { mkdir $DIR/d13 dd if=/dev/zero of=$DIR/d13/f count=10 > $DIR/d13/f $CHECKSTAT -t file -s 0 $DIR/d13/f || error}run_test 13 "creat .../d13/f; dd .../d13/f; > .../d13/f ========"test_14() { mkdir $DIR/d14 touch $DIR/d14/f rm $DIR/d14/f $CHECKSTAT -a $DIR/d14/f || error}run_test 14 "touch .../d14/f; rm .../d14/f; rm .../d14/f ======="test_15() { mkdir $DIR/d15 touch $DIR/d15/f mv $DIR/d15/f $DIR/d15/f2 $CHECKSTAT -t file $DIR/d15/f2 || error}run_test 15 "touch .../d15/f; mv .../d15/f .../d15/f2 =========="test_16() { mkdir $DIR/d16 touch $DIR/d16/f rm -rf $DIR/d16/f $CHECKSTAT -a $DIR/d16/f || error}run_test 16 "touch .../d16/f; rm -rf .../d16/f ================="test_17a() { mkdir -p $DIR/d17 touch $DIR/d17/f ln -s $DIR/d17/f $DIR/d17/l-exist ls -l $DIR/d17 $CHECKSTAT -l $DIR/d17/f $DIR/d17/l-exist || error $CHECKSTAT -f -t f $DIR/d17/l-exist || error rm -f $DIR/d17/l-exist $CHECKSTAT -a $DIR/d17/l-exist || error}run_test 17a "symlinks: create, remove (real) =================="test_17b() { mkdir -p $DIR/d17 ln -s no-such-file $DIR/d17/l-dangle ls -l $DIR/d17 $CHECKSTAT -l no-such-file $DIR/d17/l-dangle || error $CHECKSTAT -fa $DIR/d17/l-dangle || error rm -f $DIR/d17/l-dangle $CHECKSTAT -a $DIR/d17/l-dangle || error}run_test 17b "symlinks: create, remove (dangling) =============="test_17c() { # bug 3440 - don't save failed open RPC for replay mkdir -p $DIR/d17 ln -s foo $DIR/d17/f17c cat $DIR/d17/f17c && error "opened non-existent symlink" || true}run_test 17c "symlinks: open dangling (should return error) ===="test_17d() {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -