Whamcloud - gitweb
LU-1201 checksum: add libcfs crypto hash
[fs/lustre-release.git] / lustre / tests / sanity.sh
index f8d3123..6214363 100644 (file)
@@ -1,6 +1,4 @@
 #!/bin/bash
-# -*- mode: Bash; tab-width: 4; indent-tabs-mode: t; -*-
-# vim:autoindent:shiftwidth=4:tabstop=4:
 #
 # Run select tests by setting ONLY, or as arguments to the script.
 # Skip specific tests by setting EXCEPT.
@@ -2427,6 +2425,8 @@ test_39i() {
 run_test 39i "write, rename, stat =============================="
 
 test_39j() {
+       debugsave
+       lctl set_param debug=-1
        touch $DIR1/$tfile
        sleep 1
 
@@ -2447,6 +2447,7 @@ test_39j() {
                cancel_lru_locks osc
                if [ $i = 0 ] ; then echo "repeat after cancel_lru_locks"; fi
        done
+       debugrestore
 }
 run_test 39j "write, rename, close, stat ======================="
 
@@ -4695,7 +4696,7 @@ test_77i() { # bug 13805
        for VALUE in `lctl get_param osc.*osc-[^mM]*.checksum_type`; do
                PARAM=`echo ${VALUE[0]} | cut -d "=" -f1`
                algo=`lctl get_param -n $PARAM | sed 's/.*\[\(.*\)\].*/\1/g'`
-               [ "$algo" = "crc32" ] || error "algo set to $algo instead of crc32"
+               [ "$algo" = "adler" ] || error "algo set to $algo instead of adler"
        done
        remount_client $MOUNT
 }
@@ -5525,6 +5526,22 @@ test_102k() {
 }
 run_test 102k "setfattr without parameter of value shouldn't cause a crash"
 
+test_102l() {
+       # LU-532 trusted. xattr is invisible to non-root
+       local testfile=$DIR/$tfile
+
+       touch $testfile
+
+       echo "listxattr as user..."
+       chown $RUNAS_ID $testfile
+       $RUNAS getfattr -d -m '.*' $testfile 2>&1 |
+           grep -q "trusted" &&
+               error "$testfile trusted xattrs are user visible"
+
+       return 0;
+}
+run_test 102l "listxattr filter test =================================="
+
 cleanup_test102
 
 run_acl_subtest()
@@ -7301,6 +7318,9 @@ check_stats() {
 test_133a() {
        remote_ost_nodsh && skip "remote OST with nodsh" && return
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
+
+       do_facet $SINGLEMDS $LCTL list_param mdt.*.rename_stats ||
+               { skip "MDS doesn't support rename stats"; return; }
        local testdir=$DIR/${tdir}/stats_testdir
        mkdir -p $DIR/${tdir}
 
@@ -7447,6 +7467,9 @@ get_rename_size() {
 test_133d() {
     remote_ost_nodsh && skip "remote OST with nodsh" && return
     remote_mds_nodsh && skip "remote MDS with nodsh" && return
+    do_facet $SINGLEMDS $LCTL list_param mdt.*.rename_stats ||
+        { skip "MDS doesn't support rename stats"; return; }
+
     local testdir1=$DIR/${tdir}/stats_testdir1
     local testdir2=$DIR/${tdir}/stats_testdir2
 
@@ -7997,6 +8020,8 @@ changelog_chmask()
 
 test_160() {
     remote_mds_nodsh && skip "remote MDS with nodsh" && return
+    [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.0) ] ||
+        { skip "Need MDS version at least 2.2.0"; return; }
     USER=$(do_facet $SINGLEMDS $LCTL --device $MDT0 changelog_register -n)
     echo "Registered as changelog user $USER"
     do_facet $SINGLEMDS $LCTL get_param -n mdd.$MDT0.changelog_users | \
@@ -8689,6 +8714,106 @@ test_204h() {
 }
 run_test 204h "Print raw stripe count and size ============="
 
+# Figure out which job scheduler is being used, if any,
+# or use a fake one
+if [ -n "$SLURM_JOB_ID" ]; then # SLURM
+       JOBENV=SLURM_JOB_ID
+elif [ -n "$LSB_JOBID" ]; then # Load Sharing Facility
+       JOBENV=LSB_JOBID
+elif [ -n "$PBS_JOBID" ]; then # PBS/Maui/Moab
+       JOBENV=PBS_JOBID
+elif [ -n "$LOADL_STEPID" ]; then # LoadLeveller
+       JOBENV=LOADL_STEP_ID
+elif [ -n "$JOB_ID" ]; then # Sun Grid Engine
+       JOBENV=JOB_ID
+else
+       JOBENV=FAKE_JOBID
+fi
+
+verify_jobstats() {
+       local cmd=$1
+       local target=$2
+
+       # clear old jobstats
+       do_facet $SINGLEMDS lctl set_param mdt.*.job_stats="clear"
+       do_facet ost0 lctl set_param obdfilter.*.job_stats="clear"
+
+       # use a new JobID for this test, or we might see an old one
+       [ "$JOBENV" = "FAKE_JOBID" ] && FAKE_JOBID=test_id.$testnum.$RANDOM
+
+       JOBVAL=${!JOBENV}
+       log "Test: $cmd"
+       log "Using JobID environment variable $JOBENV=$JOBVAL"
+
+       if [ $JOBENV = "FAKE_JOBID" ]; then
+               FAKE_JOBID=$JOBVAL $cmd
+       else
+               $cmd
+       fi
+
+       if [ "$target" = "mdt" -o "$target" = "both" ]; then
+               FACET="$SINGLEMDS" # will need to get MDS number for DNE
+               do_facet $FACET lctl get_param mdt.*.job_stats |
+                       grep $JOBVAL || error "No job stats found on MDT $FACET"
+       fi
+       if [ "$target" = "ost" -o "$target" = "both" ]; then
+               FACET=ost0
+               do_facet $FACET lctl get_param obdfilter.*.job_stats |
+                       grep $JOBVAL || error "No job stats found on OST $FACET"
+       fi
+}
+
+test_205() { # Job stats
+       local cmd
+       OLD_JOBENV=`$LCTL get_param -n jobid_var`
+       if [ $OLD_JOBENV != $JOBENV ]; then
+               do_facet mgs $LCTL conf_param $FSNAME.sys.jobid_var=$JOBENV
+               wait_update $HOSTNAME "$LCTL get_param -n jobid_var" \
+                       $JOBENV || return 1
+       fi
+
+       # mkdir
+       cmd="mkdir $DIR/$tfile"
+       verify_jobstats "$cmd" "mdt"
+       # rmdir
+       cmd="rm -fr $DIR/$tfile"
+       verify_jobstats "$cmd" "mdt"
+       # mknod
+       cmd="mknod $DIR/$tfile c 1 3"
+       verify_jobstats "$cmd" "mdt"
+       # unlink
+       cmd="rm -f $DIR/$tfile"
+       verify_jobstats "$cmd" "mdt"
+       # open & close
+       cmd="$SETSTRIPE -i 0 -c 1 $DIR/$tfile"
+       verify_jobstats "$cmd" "mdt"
+       # setattr
+       cmd="touch $DIR/$tfile"
+       verify_jobstats "$cmd" "both"
+       # write
+       cmd="dd if=/dev/zero of=$DIR/$tfile bs=1M count=1 oflag=sync"
+       verify_jobstats "$cmd" "ost"
+       # read
+       cmd="dd if=$DIR/$tfile of=/dev/null bs=1M count=1 iflag=direct"
+       verify_jobstats "$cmd" "ost"
+       # truncate
+       cmd="$TRUNCATE $DIR/$tfile 0"
+       verify_jobstats "$cmd" "both"
+       # rename
+       cmd="mv -f $DIR/$tfile $DIR/jobstats_test_rename"
+       verify_jobstats "$cmd" "mdt"
+
+       # cleanup
+       rm -f $DIR/jobstats_test_rename
+
+       if [ $OLD_JOBENV != $JOBENV ]; then
+               do_facet mgs $LCTL conf_param $FSNAME.sys.jobid_var=$OLD_JOBENV
+               wait_update $HOSTNAME "$LCTL get_param -n jobid_var" \
+                       $OLD_JOBENV || return 1
+       fi
+}
+run_test 205 "Verify job stats"
+
 test_212() {
        size=`date +%s`
        size=$((size % 8192 + 1))
@@ -8768,12 +8893,12 @@ check_lnet_proc_entry() {
 }
 
 test_215() { # for bugs 18102, 21079, 21517
-       local N='(0|[1-9][0-9]*)'   # non-negative numeric
-       local P='[1-9][0-9]*'       # positive numeric
-       local I='(0|-?[1-9][0-9]*)' # any numeric (0 | >0 | <0)
-       local NET='[a-z][a-z0-9]*'  # LNET net like o2ib2
-       local ADDR='[0-9.]+'        # LNET addr like 10.0.0.1
-       local NID="$ADDR@$NET"      # LNET nid like 10.0.0.1@o2ib2
+       local N='(0|[1-9][0-9]*)'       # non-negative numeric
+       local P='[1-9][0-9]*'           # positive numeric
+       local I='(0|-?[1-9][0-9]*|NA)'  # any numeric (0 | >0 | <0) or NA if no value
+       local NET='[a-z][a-z0-9]*'      # LNET net like o2ib2
+       local ADDR='[0-9.]+'            # LNET addr like 10.0.0.1
+       local NID="$ADDR@$NET"          # LNET nid like 10.0.0.1@o2ib2
 
        local L1 # regexp for 1st line
        local L2 # regexp for 2nd line (optional)
@@ -9071,6 +9196,8 @@ test_225a () {
        if [ -z ${MDSSURVEY} ]; then
               skip_env "mds-survey not found" && return
        fi
+       [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.51) ] ||
+            { skip "Need MDS version at least 2.2.51"; return; }
 
        local mds=$(facet_host $SINGLEMDS)
        local target=$(do_nodes $mds 'lctl dl' | \
@@ -9093,6 +9220,8 @@ test_225b () {
        if [ -z ${MDSSURVEY} ]; then
               skip_env "mds-survey not found" && return
        fi
+       [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.51) ] ||
+            { skip "Need MDS version at least 2.2.51"; return; }
 
        if [ $($LCTL dl | grep -c osc) -eq 0 ]; then
               skip_env "Need to mount OST to test" && return
@@ -9115,6 +9244,59 @@ test_225b () {
 }
 run_test 225b "Metadata survey sanity with stripe_count = 1"
 
+mcreate_path2fid () {
+       local mode=$1
+       local major=$2
+       local minor=$3
+       local name=$4
+       local desc=$5
+       local path=$DIR/$tdir/$name
+       local fid
+       local rc
+       local fid_path
+
+       $MCREATE --mode=$1 --major=$2 --minor=$3 $path || \
+               error "error: cannot create $desc"
+
+       fid=$($LFS path2fid $path)
+       rc=$?
+       [ $rc -ne 0 ] && error "error: cannot get fid of a $desc"
+
+       fid_path=$($LFS fid2path $DIR $fid)
+       rc=$?
+       [ $rc -ne 0 ] && error "error: cannot get path of a $desc by fid"
+
+       [ "$path" == "$fid_path" ] || \
+               error "error: fid2path returned \`$fid_path', expected \`$path'"
+}
+
+test_226 () {
+       rm -rf $DIR/$tdir
+       mkdir -p $DIR/$tdir
+
+       mcreate_path2fid 0010666 0 0 fifo "FIFO"
+       mcreate_path2fid 0020666 1 3 null "character special file (null)"
+       mcreate_path2fid 0020666 1 255 none "character special file (no device)"
+       mcreate_path2fid 0040666 0 0 dir "directory"
+       mcreate_path2fid 0060666 7 0 loop0 "block special file (loop)"
+       mcreate_path2fid 0100666 0 0 file "regular file"
+       mcreate_path2fid 0120666 0 0 link "symbolic link"
+       mcreate_path2fid 0140666 0 0 sock "socket"
+}
+run_test 226 "call path2fid and fid2path on files of all type"
+
+# LU-1299 Executing or running ldd on a truncated executable does not
+# cause an out-of-memory condition.
+test_227() {
+       dd if=`which date` of=$MOUNT/date bs=1k count=1
+       chmod +x $MOUNT/date
+
+       $MOUNT/date > /dev/null
+       ldd $MOUNT/date > /dev/null
+       rm -f $MOUNT/date
+}
+run_test 227 "running truncated executable does not cause OOM"
+
 #
 # tests that do cleanup/setup should be run at the end
 #