export GSS_PIPEFS=false
export IDENTITY_UPCALL=default
export QUOTA_AUTO=1
+export JOBSTATS_AUTO=${JOBSTATS_AUTO:-1}
+export JOBID_VAR=${JOBID_VAR:-"procname_uid"}
# LOAD_LLOOP: LU-409: only load llite_lloop module if kernel < 2.6.32 or
# LOAD_LLOOP is true. LOAD_LLOOP is false by default.
. $LUSTRE/tests/functions.sh
. $LUSTRE/tests/yaml.sh
+export LD_LIBRARY_PATH=${LUSTRE}/utils:${LD_LIBRARY_PATH}
+
LUSTRE_TESTS_CFG_DIR=${LUSTRE_TESTS_CFG_DIR:-${LUSTRE}/tests/cfg}
EXCEPT_LIST_FILE=${EXCEPT_LIST_FILE:-${LUSTRE_TESTS_CFG_DIR}/tests-to-skip.sh}
}
check_cpt_number() {
+ local facet=$1
local ncpts
- ncpts=$(lctl get_param -n cpu_partition_table 2>/dev/null| wc -l)
+ ncpts=$(do_facet $facet "lctl get_param -n " \
+ "cpu_partition_table 2>/dev/null| wc -l" || echo 1)
+
if [ $ncpts -eq 0 ]; then
echo "1"
else
}
init_param_vars () {
- remote_mds_nodsh ||
- TIMEOUT=$(do_facet $SINGLEMDS "lctl get_param -n timeout")
+ remote_mds_nodsh ||
+ TIMEOUT=$(do_facet $SINGLEMDS "lctl get_param -n timeout")
- log "Using TIMEOUT=$TIMEOUT"
+ log "Using TIMEOUT=$TIMEOUT"
- osc_ensure_active $SINGLEMDS $TIMEOUT
- osc_ensure_active client $TIMEOUT
+ osc_ensure_active $SINGLEMDS $TIMEOUT
+ osc_ensure_active client $TIMEOUT
- if [ $QUOTA_AUTO -ne 0 ]; then
- if [ "$ENABLE_QUOTA" ]; then
- echo "enable quota as required"
- setup_quota $MOUNT || return 2
- else
- echo "disable quota as required"
- $LFS quotaoff -ug $MOUNT > /dev/null 2>&1
- fi
- fi
+ local jobid_var
+ if [ -z "$(lctl get_param -n mdc.*.connect_flags | grep jobstats)" ]; then
+ jobid_var="none"
+ elif [ $JOBSTATS_AUTO -ne 0 ]; then
+ echo "enable jobstats, set job scheduler as $JOBID_VAR"
+ jobid_var=$JOBID_VAR
+ else
+ jobid_var=`$LCTL get_param -n jobid_var`
+ if [ $jobid_var != "disable" ]; then
+ echo "disable jobstats as required"
+ jobid_var="disable"
+ else
+ jobid_var="none"
+ fi
+ fi
- return 0
+ if [ $jobid_var == $JOBID_VAR -o $jobid_var == "disable" ]; then
+ do_facet mgs $LCTL conf_param $FSNAME.sys.jobid_var=$jobid_var
+ wait_update $HOSTNAME "$LCTL get_param -n jobid_var" \
+ $jobid_var || return 1
+ fi
+
+ if [ $QUOTA_AUTO -ne 0 ]; then
+ if [ "$ENABLE_QUOTA" ]; then
+ echo "enable quota as required"
+ setup_quota $MOUNT || return 2
+ else
+ echo "disable quota as required"
+ $LFS quotaoff -ug $MOUNT > /dev/null 2>&1
+ fi
+ fi
+ return 0
}
nfs_client_mode () {
local ostidx
local dev
+ [[ $(lustre_version_code $SINGLEMDS) -ne $(version_code 2.2.0) ]] ||
+ { skip "Lustre 2.2.0 lacks the patch for LU-1255"; exit 0; }
+
check_shared_dir $SHARED_DIRECTORY ||
error "$SHARED_DIRECTORY isn't a shared directory"
}
exit_status () {
- local status=0
- local log=$TESTSUITELOG
+ local status=0
+ local log=$TESTSUITELOG
- [ -f "$log" ] && grep -q FAIL: $log && status=1
- exit $status
+ [ -f "$log" ] && grep -q FAIL $log && status=1
+ exit $status
}
error() {
error_noexit "$@"
}
+error_and_remount() {
+ error_noexit "$@"
+ remount_client $MOUNT
+ exit 1
+}
+
skip_env () {
$FAIL_ON_SKIP_ENV && error false $@ || skip $@
}
-skip () {
- echo
- log " SKIP: ${TESTSUITE} ${TESTNAME} $@"
- [ "$ALWAYS_SKIPPED" ] && \
- skip_logged ${TESTNAME} "$@" || true
- [ "$TESTSUITELOG" ] && \
- echo "${TESTSUITE}: SKIP: $TESTNAME $@" >> $TESTSUITELOG || true
+skip() {
+ echo
+ log " SKIP: $TESTSUITE $TESTNAME $@"
+
+ if [[ -n "$ALWAYS_SKIPPED" ]]; then
+ skip_logged $TESTNAME "$@"
+ else
+ mkdir -p $LOGDIR
+ echo "$@" > $LOGDIR/skip
+ fi
+
+ [[ -n "$TESTSUITELOG" ]] &&
+ echo "$TESTSUITE: SKIP: $TESTNAME $@" >> $TESTSUITELOG || true
}
build_test_filter() {
echo -n "."
return 0
fi
+
+ LAST_SKIPPED="y"
+ ALWAYS_SKIPPED="y"
testname=EXCEPT_$1
if [ ${!testname}x != x ]; then
- LAST_SKIPPED="y"
TESTNAME=test_$1 skip "skipping excluded test $1"
return 0
fi
testname=EXCEPT_$base
if [ ${!testname}x != x ]; then
- LAST_SKIPPED="y"
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"
TESTNAME=test_$1 skip "skipping SLOW test $1"
return 0
fi
testname=EXCEPT_SLOW_$base
if [ ${!testname}x != x ]; then
- LAST_SKIPPED="y"
TESTNAME=test_$1 skip "skipping SLOW test $1 (base $base)"
return 0
fi
}
pass() {
- # Set TEST_STATUS here; will be used for logging the result
- if [ -f $LOGDIR/err ]; then
- TEST_STATUS="FAIL"
- else
- TEST_STATUS="PASS"
- fi
- echo "$TEST_STATUS $@" 2>&1 | tee -a $TESTSUITELOG
+ # Set TEST_STATUS here. It will be used for logging the result.
+ TEST_STATUS="PASS"
+
+ if [[ -f $LOGDIR/err ]]; then
+ TEST_STATUS="FAIL"
+ elif [[ -f $LOGDIR/skip ]]; then
+ TEST_STATUS="SKIP"
+ fi
+ echo "$TEST_STATUS $@" 2>&1 | tee -a $TESTSUITELOG
}
check_mds() {
# - test result is saved to data file
#
run_one_logged() {
- local BEFORE=`date +%s`
- local TEST_ERROR
- local name=${TESTSUITE}.test_${1}.test_log.$(hostname -s).log
- local test_log=$LOGDIR/$name
- rm -rf $LOGDIR/err
- local SAVE_UMASK=`umask`
- umask 0022
-
- echo
- log_sub_test_begin test_${1}
- (run_one $1 "$2") 2>&1 | tee -i $test_log
- local RC=${PIPESTATUS[0]}
-
- [ $RC -ne 0 ] && [ ! -f $LOGDIR/err ] && \
- echo "test_$1 returned $RC" | tee $LOGDIR/err
-
- duration=$((`date +%s` - $BEFORE))
- pass "$1" "(${duration}s)"
- [ -f $LOGDIR/err ] && TEST_ERROR=$(cat $LOGDIR/err)
- log_sub_test_end $TEST_STATUS $duration "$RC" "$TEST_ERROR"
+ local BEFORE=`date +%s`
+ local TEST_ERROR
+ local name=${TESTSUITE}.test_${1}.test_log.$(hostname -s).log
+ local test_log=$LOGDIR/$name
+ rm -rf $LOGDIR/err
+ rm -rf $LOGDIR/skip
+ local SAVE_UMASK=`umask`
+ umask 0022
+
+ echo
+ log_sub_test_begin test_${1}
+ (run_one $1 "$2") 2>&1 | tee -i $test_log
+ local RC=${PIPESTATUS[0]}
+
+ [ $RC -ne 0 ] && [ ! -f $LOGDIR/err ] && \
+ echo "test_$1 returned $RC" | tee $LOGDIR/err
+
+ duration=$((`date +%s` - $BEFORE))
+ pass "$1" "(${duration}s)"
+
+ if [[ -f $LOGDIR/err ]]; then
+ TEST_ERROR=$(cat $LOGDIR/err)
+ elif [[ -f $LOGDIR/skip ]]; then
+ TEST_ERROR=$(cat $LOGDIR/skip)
+ fi
+ log_sub_test_end $TEST_STATUS $duration "$RC" "$TEST_ERROR"
- if [ -f $LOGDIR/err ]; then
- $FAIL_ON_ERROR && exit $RC
- fi
+ if [ -f $LOGDIR/err ]; then
+ $FAIL_ON_ERROR && exit $RC
+ fi
- umask $SAVE_UMASK
+ umask $SAVE_UMASK
- return $RC
+ 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\""
+ log_sub_test_begin $1
+ shift
+ log_sub_test_end "SKIP" "0" "0" "$@"
}
canonical_path() {
do_nodev $nfsserver lfs setstripe "$@"
}
+# Check and add a test group.
+add_group() {
+ local group_id=$1
+ local group_name=$2
+ local rc=0
+
+ local gid=$(getent group $group_name | cut -d: -f3)
+ if [[ -n "$gid" ]]; then
+ [[ "$gid" -eq "$group_id" ]] || {
+ error_noexit "inconsistent group ID:" \
+ "new: $group_id, old: $gid"
+ rc=1
+ }
+ else
+ groupadd -g $group_id $group_name
+ rc=${PIPESTATUS[0]}
+ fi
+
+ return $rc
+}
+
+# Check and add a test user.
+add_user() {
+ local user_id=$1
+ shift
+ local user_name=$1
+ shift
+ local group_name=$1
+ shift
+ local home=$1
+ shift
+ local opts="$@"
+ local rc=0
+
+ local uid=$(getent passwd $user_name | cut -d: -f3)
+ if [[ -n "$uid" ]]; then
+ if [[ "$uid" -eq "$user_id" ]]; then
+ local dir=$(getent passwd $user_name | cut -d: -f6)
+ if [[ "$dir" != "$home" ]]; then
+ mkdir -p $home
+ usermod -d $home $user_name
+ rc=${PIPESTATUS[0]}
+ fi
+ else
+ error_noexit "inconsistent user ID:" \
+ "new: $user_id, old: $uid"
+ rc=1
+ fi
+ else
+ mkdir -p $home
+ useradd -M -u $user_id -d $home -g $group_name $opts $user_name
+ rc=${PIPESTATUS[0]}
+ fi
+
+ return $rc
+}
+
check_runas_id_ret() {
local myRC=0
local myRUNAS_UID=$1