X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftests%2Fsanity-gss.sh;h=a6c816606f2ac2bae598de94e5c06212830ebd23;hb=ed716e80d614e70a69e73a5781fafa8cf8abffbb;hp=69d23c761ed46986d1e4472ad74fcaa4a7c27321;hpb=3192e52a89946f12fd36d28a686c169d01d36e64;p=fs%2Flustre-release.git diff --git a/lustre/tests/sanity-gss.sh b/lustre/tests/sanity-gss.sh index 69d23c7..a6c8166 100644 --- a/lustre/tests/sanity-gss.sh +++ b/lustre/tests/sanity-gss.sh @@ -12,8 +12,6 @@ ONLY=${ONLY:-"$*"} ALWAYS_EXCEPT=${ALWAYS_EXCEPT:-"$SANITY_GSS_EXCEPT"} # UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT! -[ "$SLOW" = "no" ] && EXCEPT_SLOW="100 101" - # Tests that fail on uml CPU=`awk '/model/ {print $4}' /proc/cpuinfo` [ "$CPU" = "UML" ] && EXCEPT="$EXCEPT" @@ -36,17 +34,12 @@ LUSTRE=${LUSTRE:-`dirname $0`/..} init_test_env $@ . ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh} -if [ $UID -ne 0 ]; then - echo "Warning: running as non-root uid $UID" - RUNAS_ID="$UID" - RUNAS="" -else - RUNAS_ID=${RUNAS_ID:-500} - RUNAS=${RUNAS:-"runas -u $RUNAS_ID"} +remote_mds_nodsh && skip "remote MDS with nodsh" && exit 0 - # $RUNAS_ID may get set incorrectly somewhere else - [ $RUNAS_ID -eq 0 ] && error "\$RUNAS_ID set to 0, but \$UID is also 0!" -fi +[ "$SLOW" = "no" ] && EXCEPT_SLOW="100 101" + +# $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!" # remove $SEC, we'd like to control everything by ourselves unset SEC @@ -67,29 +60,35 @@ cnt_all2mdt=0 cnt_all2all=0 DBENCH_PID=0 PROC_CLI="srpc.info" +# Escape "." to use lctl +PROC_CLI=${PROC_CLI//\./\*} # set manually GSS=true GSS_KRB5=true +prepare_krb5_creds() { + echo prepare krb5 cred + rm -f $KRB5_CRED_SAVE + echo RUNAS=$RUNAS + $RUNAS krb5_login.sh || exit 1 + [ -f $KRB5_CRED ] || exit 2 + echo CRED=$KRB5_CRED + cp $KRB5_CRED $KRB5_CRED_SAVE +} + +prepare_krb5_creds + # we want double mount MOUNT_2=${MOUNT_2:-"yes"} cleanup_and_setup_lustre -rm -rf $DIR/${TESTSUITE}/[df][0-9]* rm -rf $DIR/[df][0-9]* check_runas_id $RUNAS_ID $RUNAS build_test_filter -prepare_krb5_creds() { - rm -f $KRB5_CRED_SAVE - $RUNAS krb5_login.sh || exit 1 - [ -f $KRB5_CRED ] || exit 2 - cp $KRB5_CRED $KRB5_CRED_SAVE -} - combination() { local M=$1 @@ -150,17 +149,45 @@ set_rule() count_flvr() { - output=$1 - flavor=$2 + local output=$1 + local flavor=$2 + local count=0 + + rpc_flvr=`echo $flavor | awk -F - '{ print $1 }'` + bulkspec=`echo $flavor | awk -F - '{ print $2 }'` + + count=`echo "$output" | grep "rpc flavor" | grep $rpc_flvr | wc -l` + + if [ "x$bulkspec" != "x" ]; then + algs=`echo $bulkspec | awk -F : '{ print $2 }'` + + if [ "x$algs" != "x" ]; then + bulk_count=`echo "$output" | grep "bulk flavor" | grep $algs | wc -l` + else + bulk=`echo $bulkspec | awk -F : '{ print $1 }'` + if [ $bulk == "bulkn" ]; then + bulk_count=`echo "$output" | grep "bulk flavor" \ + | grep "null/null" | wc -l` + elif [ $bulk == "bulki" ]; then + bulk_count=`echo "$output" | grep "bulk flavor" \ + | grep "/null" | grep -v "null/" | wc -l` + else + bulk_count=`echo "$output" | grep "bulk flavor" \ + | grep -v "/null" | grep -v "null/" | wc -l` + fi + fi - echo "$output" | grep rpc | grep $flavor | wc -l + [ $bulk_count -lt $count ] && count=$bulk_count + fi + + echo $count } flvr_cnt_cli2mdt() { local flavor=$1 - output=`do_facet client cat $LPROC/mdc/*-MDT*-mdc-*/$PROC_CLI 2>/dev/null` + output=`do_facet client lctl get_param -n mdc.*-MDT*-mdc-*.$PROC_CLI 2>/dev/null` count_flvr "$output" $flavor } @@ -168,7 +195,7 @@ flvr_cnt_cli2ost() { local flavor=$1 - output=`do_facet client cat $LPROC/osc/*OST*-osc-[^M][^D][^T]*/$PROC_CLI 2>/dev/null` + output=`do_facet client lctl get_param -n osc.*OST*-osc-[^M][^D][^T]*.$PROC_CLI 2>/dev/null` count_flvr "$output" $flavor } @@ -183,7 +210,7 @@ flvr_cnt_mdt2mdt() fi for num in `seq $MDSCOUNT`; do - output=`do_facet mds$num cat $LPROC/mdc/*-MDT*-mdc[0-9]*/$PROC_CLI 2>/dev/null` + output=`do_facet mds$num lctl get_param -n mdc.*-MDT*-mdc[0-9]*.$PROC_CLI 2>/dev/null` tmpcnt=`count_flvr "$output" $flavor` cnt=$((cnt + tmpcnt)) done @@ -196,7 +223,7 @@ flvr_cnt_mdt2ost() local cnt=0 for num in `seq $MDSCOUNT`; do - output=`do_facet mds$num cat $LPROC/osc/*OST*-osc-MDT*/$PROC_CLI 2>/dev/null` + output=`do_facet mds$num lctl get_param -n osc.*OST*-osc-MDT*.$PROC_CLI 2>/dev/null` tmpcnt=`count_flvr "$output" $flavor` cnt=$((cnt + tmpcnt)) done @@ -261,23 +288,24 @@ wait_flavor() restore_to_default_flavor() { - local proc=$LPROC/mgs/MGS/live/$FSNAME + local proc="mgs.MGS.live.$FSNAME" echo "restoring to default flavor..." - nrule=`do_facet mgs cat $proc 2>/dev/null | grep "$FSNAME.srpc.flavor." | wc -l` + nrule=`do_facet mgs lctl get_param -n $proc 2>/dev/null | grep ".srpc.flavor." | wc -l` # remove all existing rules if any if [ $nrule -ne 0 ]; then - echo "remove existing $nrule rules" - for rule in `do_facet mgs cat $proc 2>/dev/null | grep "$FSNAME.srpc.flavor."`; do + echo "$nrule existing rules" + for rule in `do_facet mgs lctl get_param -n $proc 2>/dev/null | grep ".srpc.flavor."`; do + echo "remove rule: $rule" spec=`echo $rule | awk -F = '{print $1}'` do_facet mgs "$LCTL conf_param $spec=" done fi # verify no rules left - nrule=`do_facet mgs cat $proc 2>/dev/null | grep "$FSNAME.srpc.flavor." | wc -l` + nrule=`do_facet mgs lctl get_param -n $proc 2>/dev/null | grep ".srpc.flavor." | wc -l` [ $nrule -ne 0 ] && error "still $nrule rules left" # wait for default flavor to be applied @@ -308,7 +336,7 @@ set_flavor_all() start_dbench() { NPROC=`cat /proc/cpuinfo 2>/dev/null | grep ^processor | wc -l` - [ $NPROC -lt 2 ] && NPROC=2 + [ $NPROC -gt 2 ] && NPROC=2 sh rundbench $NPROC 1>/dev/null & DBENCH_PID=$! sleep 2 @@ -381,7 +409,6 @@ check_multiple_gss_daemons() { fi } -prepare_krb5_creds calc_connection_cnt umask 077 @@ -566,10 +593,15 @@ test_5() { run_test 5 "lsvcgssd dead, operations lead to recovery" test_6() { + local nfile=10 + mkdir $DIR/d6 || error "mkdir $DIR/d6 failed" - cp -a /etc/* $DIR/d6/ || error "cp failed" + for ((i=0; i<$nfile; i++)); do + dd if=/dev/zero of=$DIR/d6/file$i bs=8k count=1 || error "dd file$i failed" + done ls -l $DIR/d6/* > /dev/null || error "ls failed" rm -rf $DIR2/d6/* || error "rm failed" + rmdir $DIR2/d6/ || error "rmdir failed" } run_test 6 "test basic DLM callback works" @@ -606,6 +638,128 @@ test_7() { } run_test 7 "exercise enlarge_reqbuf()" +test_8() +{ + debugsave + sysctl -w lnet.debug="other" + $LCTL dk > /dev/null + + # sleep sometime in ctx handle + do_facet mds sysctl -w lustre.fail_val=60 +#define OBD_FAIL_SEC_CTX_HDL_PAUSE 0x1204 + do_facet mds sysctl -w lustre.fail_loc=0x1204 + + $RUNAS $LFS flushctx || error "can't flush ctx" + + $RUNAS df $DIR & + DFPID=$! + echo "waiting df (pid $TOUCHPID) to finish..." + sleep 2 # give df a chance to really trigger context init rpc + do_facet mds sysctl -w lustre.fail_loc=0 + wait $DFPID || error "df should have succeeded" + + $LCTL dk | grep "Early reply #" || error "No early reply" + debugrestore +} +run_test 8 "Early reply sent for slow gss context negotiation" + +# +# following tests will manipulate flavors and may end with any flavor set, +# so each test should not assume any start flavor. +# + +test_50() { + local sample=$TMP/sanity-gss-8 + local tdir=$MOUNT/dir8 + local iosize="256K" + local hash_algs="adler32 crc32 md5 sha1 sha256 sha384 sha512 wp256 wp384 wp512" + + # create sample file with aligned size for direct i/o + dd if=/dev/zero of=$sample bs=$iosize count=1 || error + dd conv=notrunc if=/etc/termcap of=$sample bs=$iosize count=1 || error + + rm -rf $tdir + mkdir $tdir || error "create dir $tdir" + + restore_to_default_flavor + + for alg in $hash_algs; do + echo "Testing $alg..." + flavor=krb5i-bulki:$alg/null + set_rule $FSNAME any cli2ost $flavor + wait_flavor cli2ost $flavor $cnt_cli2ost + + dd if=$sample of=$tdir/$alg oflag=direct,dsync bs=$iosize || error "$alg write" + diff $sample $tdir/$alg || error "$alg read" + done + + rm -rf $tdir + rm -f $sample +} +run_test 50 "verify bulk hash algorithms works" + +test_51() { + local s1=$TMP/sanity-gss-9.1 + local s2=$TMP/sanity-gss-9.2 + local s3=$TMP/sanity-gss-9.3 + local s4=$TMP/sanity-gss-9.4 + local tdir=$MOUNT/dir9 + local s1_size=4194304 # n * pagesize (4M) + local s2_size=512 # n * blksize + local s3_size=111 # n * blksize + m + local s4_size=5 # m + local cipher_algs="arc4 aes128 aes192 aes256 cast128 cast256 twofish128 twofish256" + + # create sample files for each situation + rm -f $s1 $s2 $s2 $s4 + dd if=/dev/urandom of=$s1 bs=1M count=4 || error + dd if=/dev/urandom of=$s2 bs=$s2_size count=1 || error + dd if=/dev/urandom of=$s3 bs=$s3_size count=1 || error + dd if=/dev/urandom of=$s4 bs=$s4_size count=1 || error + + rm -rf $tdir + mkdir $tdir || error "create dir $tdir" + + restore_to_default_flavor + + # + # different bulk data alignment will lead to different behavior of + # the implementation: (n > 0; 0 < m < encryption_block_size) + # - full page i/o + # - partial page, size = n * encryption_block_size + # - partial page, size = n * encryption_block_size + m + # - partial page, size = m + # + for alg in $cipher_algs; do + echo "Testing $alg..." + flavor=krb5p-bulkp:sha1/$alg + set_rule $FSNAME any cli2ost $flavor + wait_flavor cli2ost $flavor $cnt_cli2ost + + # sync write + dd if=$s1 of=$tdir/$alg.1 oflag=dsync bs=1M || error "write $alg.1" + dd if=$s2 of=$tdir/$alg.2 oflag=dsync || error "write $alg.2" + dd if=$s3 of=$tdir/$alg.3 oflag=dsync || error "write $alg.3" + dd if=$s4 of=$tdir/$alg.4 oflag=dsync || error "write $alg.4" + + # remount client + umount_client $MOUNT + umount_client $MOUNT2 + mount_client $MOUNT + mount_client $MOUNT2 + + # read & compare + diff $tdir/$alg.1 $s1 || error "read $alg.1" + diff $tdir/$alg.2 $s2 || error "read $alg.2" + diff $tdir/$alg.3 $s3 || error "read $alg.3" + diff $tdir/$alg.4 $s4 || error "read $alg.4" + done + + rm -rf $tdir + rm -f $sample +} +run_test 51 "bulk data alignment test under encryption mode" + test_90() { if [ "$SLOW" = "no" ]; then total=10 @@ -613,6 +767,10 @@ test_90() { total=60 fi + restore_to_default_flavor + set_rule $FSNAME any any krb5p + wait_flavor all2all krb5p $cnt_all2all + start_dbench for ((n=0;n<$total;n++)); do @@ -634,7 +792,7 @@ test_99() { # # general rules # - nrule_old=`do_facet mgs cat $LPROC/mgs/MGS/live/$FSNAME 2>/dev/null \ + nrule_old=`do_facet mgs lctl get_param -n mgs.MGS.live.$FSNAME 2>/dev/null \ | grep "$FSNAME.srpc.flavor." | wc -l` echo "original general rules: $nrule_old" @@ -646,7 +804,7 @@ test_99() { set_rule $FSNAME elan$i any || error "remove rule $i" done - nrule_new=`do_facet mgs cat $LPROC/mgs/MGS/live/$FSNAME 2>/dev/null \ + nrule_new=`do_facet mgs lctl get_param -n mgs.MGS.live.$FSNAME 2>/dev/null \ | grep "$FSNAME.srpc.flavor." | wc -l` if [ $nrule_new != $nrule_old ]; then error "general rule: $nrule_new != $nrule_old" @@ -655,7 +813,7 @@ test_99() { # # target-specific rules # - nrule_old=`do_facet mgs cat $LPROC/mgs/MGS/live/$FSNAME 2>/dev/null \ + nrule_old=`do_facet mgs lctl get_param -n mgs.MGS.live.$FSNAME 2>/dev/null \ | grep "$FSNAME-MDT0000.srpc.flavor." | wc -l` echo "original target rules: $nrule_old" @@ -667,7 +825,7 @@ test_99() { set_rule $FSNAME-MDT0000 elan$i any || error "remove rule $i" done - nrule_new=`do_facet mgs cat $LPROC/mgs/MGS/live/$FSNAME 2>/dev/null \ + nrule_new=`do_facet mgs lctl get_param -n mgs.MGS.live.$FSNAME 2>/dev/null \ | grep "$FSNAME-MDT0000.srpc.flavor." | wc -l` if [ $nrule_new != $nrule_old ]; then error "general rule: $nrule_new != $nrule_old"