diff --git a/cts/cts-regression b/cts/cts-regression index 751787ce0e..48a11ccc49 100755 --- a/cts/cts-regression +++ b/cts/cts-regression @@ -1,213 +1,207 @@ #!/bin/bash # # cts-regression # # Convenience wrapper for running any of the Pacemaker regression tests # USAGE_TEXT="Usage: cts-regression [] [ ...] Options: --help Display this text, then exit -V, --verbose Increase test verbosity -v, --valgrind Run test commands under valgrind Tests (default tests are 'pengine cli lrmd'): pengine Policy engine cli Command-line tools lrmd Local resource manager pacemaker_remote Local resource manager in remote mode fencing Fencing daemon all Synonym for 'pengine cli lrmd fencing'" -test_home="$(dirname $0)" +test_home="$(dirname $(readlink -e $0))" valgrind="" verbose="" tests="" # These constants must track crm_exit_t values CRM_EX_OK=0 CRM_EX_ERROR=1 CRM_EX_NOT_INSTALLED=5 CRM_EX_USAGE=64 -if [ "$test_home" = "." ]; then - test_home="$PWD" -fi - function info() { printf "$*\n" } function error() { printf " * ERROR: $*\n" } function run_as_root() { CMD="$1" shift ARGS="$@" # Test might not be executable if run from source directory chmod a+x $CMD CMD="$CMD $ARGS $verbose" if [ $EUID -eq 0 ]; then $CMD elif [ -z $TRAVIS ]; then # sudo doesn't work in buildbot, su doesn't work in travis echo "Enter the root password..." su root -c "$CMD" else echo "Enter the root password if prompted..." sudo -- $CMD fi } add_test() { local TEST="$1" case "$TEST" in pengine|lrmd|pacemaker_remote|fencing|cli) if [[ ! $tests =~ $TEST ]]; then tests="$tests $TEST" fi ;; *) error "unknown test: $TEST" echo echo "$USAGE_TEXT" exit $CRM_EX_USAGE ;; esac } run_test() { local t="$1" info "Executing the $t regression tests" info "============================================================" case $t in pengine) if [ -x $test_home/pengine/regression.sh ]; then $test_home/pengine/regression.sh $verbose $valgrind rc=$? else error "pengine regression test not found" rc=$CRM_EX_NOT_INSTALLED fi ;; lrmd) if [ -x $test_home/lrmd/regression.py ]; then run_as_root $test_home/lrmd/regression.py rc=$? else error "lrmd regression test not found" rc=$CRM_EX_NOT_INSTALLED fi ;; pacemaker_remote) if [ -x $test_home/lrmd/regression.py ]; then run_as_root $test_home/lrmd/regression.py -R rc=$? else error "pacemaker_remote regression test not found" rc=$CRM_EX_NOT_INSTALLED fi ;; fencing) if [ -x $test_home/fencing/regression.py ]; then run_as_root $test_home/fencing/regression.py rc=$? else error "fencing regression test not found" rc=$CRM_EX_NOT_INSTALLED fi ;; cli) if [ -x $test_home/cli/regression.sh ]; then $test_home/cli/regression.sh $verbose $valgrind rc=$? elif [ -x $test_home/tools/regression.sh ]; then $test_home/tools/regression.sh $verbose $valgrind rc=$? else error "cli regression test not found" rc=$CRM_EX_NOT_INSTALLED fi ;; esac info "============================================================" info "" info "" return $rc } run_tests() { TESTS="$1" local TEST local TEST_RC local FAILED FAILED="" for TEST in $TESTS; do run_test $TEST TEST_RC=$? if [ $TEST_RC -ne 0 ]; then info "$TEST regression tests failed ($TEST_RC)" FAILED="$FAILED $TEST" fi done if [ -n "$FAILED" ]; then error "failed regression tests: $FAILED" return $CRM_EX_ERROR fi return $CRM_EX_OK } -info "Test home is:\t$test_home" - while [ $# -gt 0 ] ; do case "$1" in --help) echo "$USAGE_TEXT" exit $CRM_EX_OK ;; -V|--verbose) verbose="-V" shift ;; -v|--valgrind) valgrind="-v" shift ;; pengine|lrmd|pacemaker_remote|fencing|cli) add_test $1 shift ;; all) add_test pengine add_test cli add_test lrmd add_test fencing shift ;; *) error "unknown option: $1" echo echo "$USAGE_TEXT" exit $CRM_EX_USAGE ;; esac done if [ -z "$tests" ]; then add_test pengine add_test cli add_test lrmd fi run_tests $tests