Whamcloud - gitweb
LU-16500 utils: 'lfs migrate' should select new OSTs
[fs/lustre-release.git] / lustre / tests / auster
index 5a4e73d..4fefde8 100755 (executable)
@@ -1,12 +1,20 @@
 #!/bin/bash
 #!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+
+#
+# This file is part of Lustre, http://www.lustre.org/
+#
+# lustre/tests/auster
+#
+# Drive lustre tests
 #
 #
+
 #
 #
-# auster - drive lustre tests
 # TODO
 #  1. --time-limt <seconds>  add per test time limit, kill test if it runs to long
 #  2. Read list of tests to run from a file. same syntax as cli, but one test per line
 #  3. Run test on remote node
 # TODO
 #  1. --time-limt <seconds>  add per test time limit, kill test if it runs to long
 #  2. Read list of tests to run from a file. same syntax as cli, but one test per line
 #  3. Run test on remote node
-#  4. Use long opts for auster options
+#
 
 set -e
 
 
 set -e
 
@@ -14,25 +22,30 @@ export TF_FAIL=/tmp/tf.fail
 export TF_SKIP=/tmp/tf.skip
 
 usage() {
 export TF_SKIP=/tmp/tf.skip
 
 usage() {
-    less -F <<EOF
+       less -F <<EOF
 Usage ${0##*/} [options]  suite [suite options] [suite [suite options]]
 Run Lustre regression tests suites.
 Usage ${0##*/} [options]  suite [suite options] [suite [suite options]]
 Run Lustre regression tests suites.
-      -c CONFIG Test environment config file
-      -d LOGDIR Top level directory for logs
-      -D FULLLOGDIR Full directory for logs
-      -f STR    Config name (cfg/<name>.sh)
-      -g GROUP  Test group file (Overrides tests listed on command line)
-      -S TESTSUITE First test suite to run allows for restarts
-      -i N      Repeat tests N times (default 1). A new directory
-                will be created under LOGDIR for each iteration.
-      -k        Don't stop when subtests fail
-      -R        Remount lustre between tests
-      -r        Reformat (during initial configuration if needed)
-      -s        SLOW=yes
-      -v        Verbose mode
-      -l        Send logs to the Maloo database after run
-                  (can be done later by running maloo_upload.sh)
-      -h        This help.
+      -c, --config CONFIG   Test environment config file
+      -C, --client-only     Run client-side sanity tests against an already setup
+                            filesystem. Users must define FSNAME and mgs_HOST manually.
+      -d, --log-dir LOGDIR            Top level directory for logs
+      -D, --full-log-dir FULLLOGDIR   Full directory for logs
+      -f, --cfg-name STR    Config name (cfg/<name>.sh)
+      -g, --group GROUP     Test group file (Overrides tests listed on command line)
+      -S, --suite TESTSUITE           First test suite to run allows for restarts
+      -H, --honor           Honor the EXCEPT and ALWAYS_EXCEPT list when --only is used
+      -i, --repeat N        Repeat tests N times (default 1). A new directory
+                            will be created under LOGDIR for each iteration.
+      -k  --no-stop         Don't stop when subtests fail
+      -R, --remount         Remount lustre between tests
+      -r, --reformat        Reformat (during initial configuration if needed)
+      -s  --slow            SLOW=yes
+      -v, --verbose         Verbose mode
+      -l, --send-logs       Send logs to the Maloo database after run
+                              (can be done later by running maloo_upload.sh)
+      -L, --lang            Script language of test suite. Default: bash
+      -N, --no-setup        No setup. Do not setup Lustre prior to executing test suite.
+      -h, --help            This help.
 
 Suite options
 These are suite specific options that can be specified after each suite on
 
 Suite options
 These are suite specific options that can be specified after each suite on
@@ -55,8 +68,12 @@ Run all tests in the regression group 5 times using large config.
 
   auster -f large -g test-groups/regression -i 5
 
 
   auster -f large -g test-groups/regression -i 5
 
+Run the client-only tests from sanity.
+
+  FSNAME=myfilesystem mgs_HOST=1.2.3.4 auster -C sanity
+
 EOF
 EOF
-    exit
+       exit
 }
 
 dry_run=false
 }
 
 dry_run=false
@@ -65,28 +82,63 @@ verbose=false
 repeat_count=1
 upload_logs=false
 reformat=false
 repeat_count=1
 upload_logs=false
 reformat=false
+script_lang=bash
 test_logs_dir=/tmp/test_logs/$(date +%Y-%m-%d)/$(date +%H%M%S)
 test_logs_dir=/tmp/test_logs/$(date +%Y-%m-%d)/$(date +%H%M%S)
-export ${SLOW:=no}
-export ${NAME:=local}
-while getopts "c:d:D:nkf:S:g:i:rRslhv" opt
+export HONOR_EXCEPT=
+export do_setup=true
+export client_tests_only=false
+export "${SLOW:=no}"
+export "${NAME:=local}"
+
+# Replace long option with corresponding short option
+for arg in "$@"; do
+       shift
+       case "$arg" in
+               --config) set -- "$@" '-c';;
+               --client-only) set -- "$@" '-C';;
+               --log-dir) set -- "$@" '-d';;
+               --full-log-dir) set -- "$@" '-D';;
+               --group) set -- "$@" '-g';;
+               --suite) set -- "$@" '-S';;
+               --no-stop) set -- "$@" '-k';;
+               --verbose) set -- "$@" '-v';;
+               --honor) set -- "$@" '-H';;
+               --repeat) set -- "$@" '-i';;
+               --cfg-name) set -- "$@" '-f';;
+               --remount) set -- "$@" '-R';;
+               --reformat) set -- "$@" '-r';;
+               --slow) set -- "$@" '-s';;
+               --send-logs) set -- "$@" '-l';;
+               --lang) set -- "$@" '-L';;
+               --no-setup) set -- "$@" '-N';;
+               --help) set -- "$@" '-h';;
+               *) set -- "$@" "$arg";;
+       esac
+done
+
+while getopts "c:Cd:D:nkf:S:g:Hi:rRslL:Nhv" opt
 do
 do
-    case "$opt" in
-        c) export CONFIG=$OPTARG;;
-        d) test_logs_dir=$OPTARG/$(date +%Y-%m-%d)/$(date +%H%M%S);;
-        D) test_logs_dir=$OPTARG;;
-        g) test_group_file=$OPTARG;;
-        S) FIRST_SUITE=$OPTARG;;
-        k) export FAIL_ON_ERROR=false;;
-        n) dry_run=:;;
-        v) verbose=:;;
-        i) repeat_count=$OPTARG;;
-        f) NAME=$OPTARG;;
-        R) do_reset=:;;
-        r) reformat=:;;
-       s) export SLOW=yes;;
-        l) upload_logs=true;;
-        h|\?) usage;;
-    esac
+       case "$opt" in
+               c) export CONFIG=$OPTARG;;
+               C) client_tests_only=true;;
+               d) test_logs_dir=$OPTARG/$(date +%Y-%m-%d)/$(date +%H%M%S);;
+               D) test_logs_dir=$OPTARG;;
+               g) test_group_file=$OPTARG;;
+               S) FIRST_SUITE=$OPTARG;;
+               k) export FAIL_ON_ERROR=false;;
+               n) dry_run=:;;
+               v) verbose=:;;
+               H) export HONOR_EXCEPT="y";;
+               i) repeat_count=$OPTARG;;
+               f) NAME=$OPTARG;;
+               R) do_reset=:;;
+               r) reformat=:;;
+               s) export SLOW=yes;;
+               l) upload_logs=true;;
+               L) script_lang=$OPTARG;;
+               N) do_setup=false;;
+               h|\?) usage;;
+       esac
 done
 
 # If a test_group_file is specified, then ignore rest of command line
 done
 
 # If a test_group_file is specified, then ignore rest of command line
@@ -97,215 +149,21 @@ else
     shift $((OPTIND -1))
 fi
 
     shift $((OPTIND -1))
 fi
 
-#
-# Various paramters for the tests scripts
-#
-#: ${SIZE:=$((RAMKB * 2))}
-#: ${RSIZE:=512}
-#: ${UID:=1000}
-#: ${MOUNT=/mnt/lustre}
-#: ${MOUNT2:=${MOUNT}2}
-#: ${COUNT:=1000}
-#: ${TMP:=/tmp}
-
-reset_lustre() {
-    if $do_reset; then
-        stopall
-        setupall
-    fi
-}
-
 STARTTIME=`date +%s`
 
 : ${LUSTRE:=$(cd $(dirname $0)/..; echo $PWD)}
 . $LUSTRE/tests/test-framework.sh
 init_test_env
 
 STARTTIME=`date +%s`
 
 : ${LUSTRE:=$(cd $(dirname $0)/..; echo $PWD)}
 . $LUSTRE/tests/test-framework.sh
 init_test_env
 
-print_summary () {
-    trap 0
-    local form="%-13s %-17s %s\n"
-    printf "$form" "status" "script" "skipped tests E(xcluded) S(low)"
-    echo "------------------------------------------------------------------------------------"
-    echo "Done!"
-}
-
-
-setup_if_needed() {
-       nfs_client_mode && return
-       AUSTER_CLEANUP=false
-
-       local MOUNTED=$(mounted_lustre_filesystems)
-       if $(echo $MOUNTED' ' | grep -w -q $MOUNT' '); then
-               check_config_clients $MOUNT
-               # init_facets_vars
-               # init_param_vars
-               return
-       fi
-
-       echo "Lustre is not mounted, trying to do setup ... "
-       $reformat && CLEANUP_DM_DEV=true formatall
-       setupall
-
-       MOUNTED=$(mounted_lustre_filesystems)
-       if ! $(echo $MOUNTED' ' | grep -w -q $MOUNT' '); then
-               echo "Lustre is not mounted after setup! "
-               exit 1
-       fi
-       AUSTER_CLEANUP=true
-}
-
-cleanup_if_needed() {
-       if $AUSTER_CLEANUP; then
-               cleanupall
-       fi
-}
-
-find_script_in_path() {
-    target=$1
-    path=$2
-    for dir in $(tr : " " <<< $path); do
-        if [ -f $dir/$target ]; then
-            echo $dir/$target
-            return 0
-        fi
-        if [ -f $dir/$target.sh ]; then
-            echo $dir/$target.sh
-            return 0
-        fi
-    done
-    return 1
-}
-
-title() {
-    log "-----============= acceptance-small: "$*" ============----- `date`"
-}
-
-doit() {
-    if $dry_run; then
-        printf "Would have run: %s\n" "$*"
-        return 0
-    fi
-    if $verbose; then
-        printf "Running: %s\n" "$*"
-    fi
-    "$@"
-}
-
-
-run_suite() {
-       local suite_name=$1
-       local suite_script=$2
-       title $suite_name
-       log_test $suite_name
-
-       rm -f $TF_FAIL
-       touch $TF_SKIP
-       local start_ts=$(date +%s)
-       doit bash $suite_script
-       local rc=$?
-       local duration=$(($(date +%s) - $start_ts))
-
-       local status="PASS"
-       if [[ $rc -ne 0 || -f $TF_FAIL ]]; then
-               status="FAIL"
-       elif [[ -f $TF_SKIP ]]; then
-               status="SKIP"
-       fi
-       log_test_status $duration $status
-       [[ ! -f $TF_SKIP ]] || rm -f $TF_SKIP
-
-       reset_lustre
-}
-
-run_suite_logged() {
-    local suite_name=${1%.sh}
-    local suite=$(echo ${suite_name} | tr "[:lower:]-" "[:upper:]_")
-
-    suite_script=$(find_script_in_path $suite_name $LUSTRE/tests)
-
-    if [[ -z $suite_script ]]; then
-        echo "Can't find test script for $suite_name"
-        return 1
-    fi
-
-    echo "run_suite $suite_name $suite_script"
-    local log_name=${suite_name}.suite_log.$(hostname -s).log
-    if $verbose; then
-        run_suite $suite_name $suite_script 2>&1 |tee  $LOGDIR/$log_name
-    else
-        run_suite $suite_name $suite_script > $LOGDIR/$log_name 2>&1
-    fi
-
-}
-
-#
-# Add this to test-framework somewhere.
-reset_logging() {
-    export LOGDIR=$1
-    unset YAML_LOG
-    init_logging
-}
-
-split_commas() {
-    echo "${*//,/ }"
-}
-
-run_suites() {
-    local n=0
-    local argv=("$@")
-    while ((n < repeat_count)); do
-        local RC=0
-        local logdir=${test_logs_dir}
-        local first_suite=$FIRST_SUITE
-        ((repeat_count > 1)) && logdir="$logdir/$n"
-        reset_logging $logdir
-        set -- "${argv[@]}"
-        while [[ -n $1 ]]; do
-            unset ONLY EXCEPT START_AT STOP_AT
-            local opts=""
-            local time_limit=""
-            #echo "argv: $*"
-            suite=$1
-            shift;
-            while [[ -n $1 ]]; do
-                case "$1" in
-                    --only)
-                        shift;
-                        export ONLY=$(split_commas $1)
-                        opts+="ONLY=$ONLY ";;
-                    --except)
-                        shift;
-                        export EXCEPT=$(split_commas $1)
-                        opts+="EXCEPT=$EXCEPT ";;
-                    --start-at)
-                        shift;
-                        export START_AT=$1
-                        opts+="START_AT=$START_AT ";;
-                    --stop-at)
-                        shift;
-                        export STOP_AT=$1
-                        opts+="STOP_AT=$STOP_AT ";;
-                    --time-limit)
-                        shift;
-                        time_limit=$1;;
-                    *)
-                        break;;
-                esac
-                shift
-            done
-            if [ "x"$first_suite == "x" ] || [ $first_suite == $suite ]; then   # If first_suite not set or this is the first suite
-                echo "running: $suite $opts"
-                run_suite_logged $suite || RC=$?
-                unset first_suite
-                echo $suite returned $RC
-            fi
-        done
-        if $upload_logs; then
-            $upload_script $LOGDIR
-        fi
-        n=$((n + 1))
-    done
-}
+# Set CLIENTONLY, while trying to discover some common
+# variables so the test runner doesn't need do this
+# manually
+if $client_tests_only; then
+       export CLIENTONLY=true;
+       export FSTYPE=${FSTYPE:-ldiskfs};
+       export MDSCOUNT="$(( $($LFS mdts | wc -l) - 1 ))"
+       export OSTCOUNT="$(( $($LFS osts | wc -l) - 1 ))"
+fi
 
 if [ $upload_logs = true ] ; then
     upload_script=$(find_script_in_path maloo_upload.sh $PATH:$LUSTRE/tests)
 
 if [ $upload_logs = true ] ; then
     upload_script=$(find_script_in_path maloo_upload.sh $PATH:$LUSTRE/tests)
@@ -324,9 +182,17 @@ fi
 export NAME MOUNT START CLEAN
 . ${CONFIG:-$LUSTRE/tests/cfg/$NAME.sh}
 
 export NAME MOUNT START CLEAN
 . ${CONFIG:-$LUSTRE/tests/cfg/$NAME.sh}
 
-assert_env mds_HOST
-assert_env ost_HOST OSTCOUNT
-assert_env FSNAME MOUNT MOUNT2
+# Only need to know where (MOUNT) and how (mgs_HOST) to
+# mount Lustre for client-side only tests
+if $client_tests_only; then
+       assert_env mgs_HOST
+else
+       assert_env mds_HOST
+       assert_env ost_HOST OSTCOUNT
+       assert_env MOUNT2
+fi
+
+assert_env FSNAME MOUNT
 
 echo "Started at `date`"
 setup_if_needed
 
 echo "Started at `date`"
 setup_if_needed