print_summary () {
trap 0
[ "$TESTSUITE" == "lfsck" ] && return 0
- [ -n "$ONLY" ] && echo "WARNING: ONLY is set to ${ONLY}."
- local form="%-13s %-17s %s\n"
- printf "$form" "status" "script" "skipped tests E(xcluded) S(low)"
+ [ -n "$ONLY" ] && echo "WARNING: ONLY is set to $(echo $ONLY)"
+ local details
+ local form="%-13s %-17s %-9s %s %s\n"
+ printf "$form" "status" "script" "Total(sec)" "E(xcluded) S(low)"
echo "------------------------------------------------------------------------------------"
for O in $DEFAULT_SUITES; do
- local skipped=""
- local slow=""
O=$(echo $O | tr "-" "_" | tr "[:lower:]" "[:upper:]")
- local o=$(echo $O | tr "[:upper:]" "[:lower:]")
- o=${o//_/-}
+ [ "${!O}" = "no" ] && continue || true
+ local o=$(echo $O | tr "[:upper:]_" "[:lower:]-")
local log=${TMP}/${o}.log
- [ -f $log ] && skipped=$(grep excluded $log | awk '{ printf " %s", $3 }' | sed 's/test_//g')
- [ -f $log ] && slow=$(grep SLOW $log | awk '{ printf " %s", $3 }' | sed 's/test_//g')
- [ "${!O}" = "done" ] && \
- printf "$form" "Done" "$O" "E=$skipped" && \
- [ -n "$slow" ] && printf "$form" "-" "-" "S=$slow"
-
+ if is_sanity_benchmark $o; then
+ log=${TMP}/sanity-benchmark.log
+ fi
+ local slow=
+ local skipped=
+ local total=
+ local status=Unfinished
+ if [ -f $log ]; then
+ skipped=$(grep excluded $log | awk '{ printf " %s", $3 }' | sed 's/test_//g')
+ slow=$(egrep "^PASS|^FAIL" $log | tr -d "("| sed s/s\)$//g | sort -nr -k 3 | head -5 | awk '{ print $2":"$3"s" }')
+ total=$(grep duration $log | awk '{ print $2}')
+ if [ "${!O}" = "done" ]; then
+ status=Done
+ fi
+ if $DDETAILS; then
+ local durations=$(egrep "^PASS|^FAIL" $log | tr -d "("| sed s/s\)$//g | awk '{ print $2":"$3"|" }')
+ details=$(printf "%s\n%s %s %s\n" "$details" "DDETAILS" "$O" "$(echo $durations)")
+ fi
+ fi
+ printf "$form" $status "$O" "${total}" "E=$skipped"
+ printf "$form" "-" "-" "-" "S=$(echo $slow)"
done
for O in $DEFAULT_SUITES; do
O=$(echo $O | tr "-" "_" | tr "[:lower:]" "[:upper:]")
if [ "${!O}" = "no" ]; then
- # FIXME.
- # only for those tests suits which are run directly from acc-sm script:
- # bonnie, iozone, etc.
- if [ -f "$TESTSUITELOG" ] && grep FAIL $TESTSUITELOG | grep -q ' '$O ; then
- printf "$form" "UNFINISHED" "$O" ""
- else
- printf "$form" "Skipped" "$O" ""
- fi
+ printf "$form" "Skipped" "$O" ""
fi
done
- for O in $DEFAULT_SUITES; do
- O=$(echo $O | tr "-" "_" | tr "[:lower:]" "[:upper:]")
- [ "${!O}" = "done" -o "${!O}" = "no" ] || \
- printf "$form" "UNFINISHED" "$O" ""
- done
+ # print the detailed tests durations if DDETAILS=true
+ if $DDETAILS; then
+ echo "$details"
+ fi
}
init_test_env() {
shift $((OPTIND - 1))
ONLY=${ONLY:-$*}
+ # print the durations of each test if "true"
+ DDETAILS=${DDETAILS:-false}
[ "$TESTSUITELOG" ] && rm -f $TESTSUITELOG || true
rm -f $TMP/*active
}
eval set -- \$$optvar
if [ $# -eq 0 -a -n "$MODPROBECONF" ]; then
# Nothing in $MODOPTS_<MODULE>; try modprobe.conf
- set -- $(grep "^options\\s*\<${module}\>" $MODPROBECONF)
+ set -- $(grep -P "^options\\s+${BASE}" $MODPROBECONF)
# Get rid of "options $module"
(($# > 0)) && shift 2
}
zconf_mount() {
- local OPTIONS
local client=$1
local mnt=$2
- # Only supply -o to mount if we have options
- if [ -n "$MOUNTOPT" ]; then
- OPTIONS="-o $MOUNTOPT"
- fi
+ local OPTIONS=${3:-$MOUNTOPT}
+
local device=$MGSNID:/$FSNAME
if [ -z "$mnt" -o -z "$FSNAME" ]; then
echo Bad zconf mount command: opt=$OPTIONS dev=$device mnt=$mnt
local mnt=$2
local OPTIONS=${3:-$MOUNTOPT}
- # Only supply -o to mount if we have options
- if [ "$OPTIONS" ]; then
- OPTIONS="-o $OPTIONS"
- fi
local device=$MGSNID:/$FSNAME
if [ -z "$mnt" -o -z "$FSNAME" ]; then
echo Bad zconf mount command: opt=$OPTIONS dev=$device mnt=$mnt
}
# recovery-scale functions
-client_var_name() {
- echo __$(echo $1 | tr '-' 'X')
+node_var_name() {
+ echo __$(echo $1 | tr '-' '_' | tr '.' '_')
}
start_client_load() {
local client=$1
local load=$2
- local var=$(client_var_name $client)_load
+ local var=$(node_var_name $client)_load
eval export ${var}=$load
do_node $client "PATH=$PATH MOUNT=$MOUNT ERRORS_OK=$ERRORS_OK \
# only for remote client
check_client_load () {
local client=$1
- local var=$(client_var_name $client)_load
+ local var=$(node_var_name $client)_load
local TESTLOAD=run_${!var}.sh
ps auxww | grep -v grep | grep $client | grep -q "$TESTLOAD" || return 1
check_client_load $client
rc=${PIPESTATUS[0]}
if [ "$rc" != 0 -a "$expectedfail" ]; then
- local var=$(client_var_name $client)_load
+ local var=$(node_var_name $client)_load
start_client_load $client ${!var}
echo "Restarted client load ${!var}: on $client. Checking ..."
check_client_load $client
local facet=$1
do_facet $facet sync
df $MOUNT
+
+ # make sure there will be no seq change
+ local clients=${CLIENTS:-$HOSTNAME}
+ do_nodes $clients "f=${MOUNT}/fsa-\\\$(hostname); mcreate \\\$f; rm \\\$f"
+
local svc=${facet}_svc
do_facet $facet $LCTL --device %${!svc} notransno
do_facet $facet $LCTL --device %${!svc} readonly
# FIXME: remove hostname when 19215 fixed
do_nodes $clients "echo \\\$(hostname); grep ' '$MOUNT' ' /proc/mounts"
declare -a nfsexport=(`grep ' '$MOUNT' ' /proc/mounts | awk '{print $1}' | awk -F: '{print $1 " " $2}'`)
+ if [[ ${#nfsexport[@]} -eq 0 ]]; then
+ error_exit NFSCLIENT=$NFSCLIENT mode, but no NFS export found!
+ fi
do_nodes ${nfsexport[0]} "echo \\\$(hostname); df -T ${nfsexport[1]}"
return
fi
echo "$@" > $LOGDIR/err
}
+exit_status () {
+ local status=0
+ local log=$TESTSUITELOG
+
+ [ -f "$log" ] && grep -q FAIL $log && status=1
+ exit $status
+}
+
error() {
error_noexit "$@"
exit 1
skip () {
echo
log " SKIP: ${TESTSUITE} ${TESTNAME} $@"
+ [ "$ALWAYS_SKIPPED" ] && \
+ skip_logged ${TESTNAME} "$@" || true
[ "$TESTSUITELOG" ] && \
echo "${TESTSUITE}: SKIP: $TESTNAME $@" >> $TESTSUITELOG || true
}
log "excepting tests: `echo $EXCEPT $ALWAYS_EXCEPT`"
[ "$EXCEPT_SLOW" ] && \
log "skipping tests SLOW=no: `echo $EXCEPT_SLOW`"
- for E in $EXCEPT $ALWAYS_EXCEPT; do
+ for E in $EXCEPT; do
eval EXCEPT_${E}=true
done
+ for E in $ALWAYS_EXCEPT; do
+ eval EXCEPT_ALWAYS_${E}=true
+ done
for E in $EXCEPT_SLOW; do
eval EXCEPT_SLOW_${E}=true
done
# print a newline if the last test was skipped
export LAST_SKIPPED=
+export ALWAYS_SKIPPED=
#
# Main entry into test-framework. This is called with the name and
# description of a test. The name is used to find the function to run
TESTNAME=test_$1 skip "skipping excluded test $1 (base $base)"
return 0
fi
+ testname=EXCEPT_ALWAYS_$1
+ if [ ${!testname}x != x ]; then
+ LAST_SKIPPED="y"
+ ALWAYS_SKIPPED="y"
+ TESTNAME=test_$1 skip "skipping ALWAYS excluded test $1"
+ return 0
+ fi
+ testname=EXCEPT_ALWAYS_$base
+ if [ ${!testname}x != x ]; then
+ LAST_SKIPPED="y"
+ ALWAYS_SKIPPED="y"
+ TESTNAME=test_$1 skip "skipping ALWAYS excluded test $1 (base $base)"
+ return 0
+ fi
testname=EXCEPT_SLOW_$1
if [ ${!testname}x != x ]; then
LAST_SKIPPED="y"
fi
LAST_SKIPPED=
+ ALWAYS_SKIPPED=
run_one_logged $1 "$2"
return $?
return 1
}
+complete () {
+ equals_msg $1 test complete, duration $2 sec
+ [ -f "$TESTSUITELOG" ] && egrep .FAIL $TESTSUITELOG || true
+ echo duration $2 >>$TESTSUITELOG
+}
+
pass() {
# Set TEST_STATUS here; will be used for logging the result
if [ -f $LOGDIR/err ]; then
else
TEST_STATUS="PASS"
fi
- echo $TEST_STATUS " " $@
+ echo "$TEST_STATUS $@" 2>&1 | tee -a $TESTSUITELOG
}
check_mds() {
- FFREE=$(do_node $SINGLEMDS lctl get_param -n osd.*MDT*.filesfree | awk 'BEGIN{avail=0}; {avail+=$1}; END{print avail}')
- FTOTAL=$(do_node $SINGLEMDS lctl get_param -n osd.*MDT*.filestotal | awk 'BEGIN{avail=0}; {avail+=$1}; END{print avail}')
+ local FFREE=$(do_node $SINGLEMDS \
+ lctl get_param -n osd*.*MDT*.filesfree | calc_sum)
+ local FTOTAL=$(do_node $SINGLEMDS \
+ lctl get_param -n osd*.*MDT*.filestotal | calc_sum)
+
[ $FFREE -ge $FTOTAL ] && error "files free $FFREE > total $FTOTAL" || true
}
echo "test_$1 returned $RC" | tee $LOGDIR/err
duration=$((`date +%s` - $BEFORE))
- pass "(${duration}s)"
+ pass "$1" "(${duration}s)"
[ -f $LOGDIR/err ] && TEST_ERROR=$(cat $LOGDIR/err)
log_sub_test_end $TEST_STATUS $duration "$RC" "$TEST_ERROR"
return 0
}
+#
+# Print information of skipped tests to result.yml
+#
+skip_logged(){
+ log_sub_test_begin $1
+ log_sub_test_end "SKIP" "0" "0" "\"$2\""
+}
+
canonical_path() {
(cd `dirname $1`; echo $PWD/`basename $1`)
}
echo "Logging to local directory: $LOGDIR"
fi
- yml_nodes_file $LOGDIR
+ yml_nodes_file $LOGDIR >> $YAML_LOG
yml_results_file >> $YAML_LOG
}
}
log_sub_test_begin() {
- yml_log_sub_test_begin $@ >> $YAML_LOG
+ yml_log_sub_test_begin "$@" >> $YAML_LOG
}
log_sub_test_end() {
- yml_log_sub_test_end $@ >> $YAML_LOG
+ yml_log_sub_test_end "$@" >> $YAML_LOG
}
run_llverdev()
echo \\\$(basename \\\$dv);
fi;"
}
+
+is_sanity_benchmark() {
+ local benchmarks="dbench bonnie iozone fsx"
+ local suite=$1
+ for b in $benchmarks; do
+ if [ "$b" == "$suite" ]; then
+ return 0
+ fi
+ done
+ return 1
+}
+
+min_ost_size () {
+ $LCTL get_param -n osc.*.kbytesavail | sort -n | head -n1
+}
+