mirror of
https://github.com/samba-team/samba.git
synced 2025-02-28 01:58:17 +03:00
ctdb/tests/scripts: Promote scripts/run_tests
The wrapper is not needed anymore. Signed-off-by: Martin Schwenke <martin@meltin.net> Reviewed-by: Michael Adam <obnox@samba.org>
This commit is contained in:
parent
318f2cf912
commit
3c81066105
@ -1,13 +1,311 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
|
||||
test_dir=$(dirname "$0")
|
||||
usage() {
|
||||
cat <<EOF
|
||||
Usage: $0 [OPTIONS] [TESTS]
|
||||
|
||||
Options:
|
||||
-A Use "cat -A" to print test output (only some tests)
|
||||
-c Run integration tests on a cluster
|
||||
-C Clean up - kill daemons and remove TEST_VAR_DIR when done
|
||||
-d Print descriptions of tests instead of filenames (dodgy!)
|
||||
-D Show diff between failed/expected test output (some tests only)
|
||||
-e Exit on the first test failure
|
||||
-H No headers - for running single test with other wrapper
|
||||
-N Don't print summary of tests results after running all tests
|
||||
-q Quiet - don't show tests being run (hint: use with -s)
|
||||
-S Enable socket wrapper
|
||||
-v Verbose - print test output for non-failures (only some tests)
|
||||
-V <dir> Use <dir> as TEST_VAR_DIR
|
||||
-x Trace this script with the -x option
|
||||
-X Trace certain scripts run by tests using -x (only some tests)
|
||||
EOF
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Print a message and exit.
|
||||
die ()
|
||||
{
|
||||
echo "$1" >&2 ; exit ${2:-1}
|
||||
}
|
||||
|
||||
######################################################################
|
||||
|
||||
with_summary=true
|
||||
with_desc=false
|
||||
quiet=false
|
||||
exit_on_fail=false
|
||||
no_header=false
|
||||
socket_wrapper=false
|
||||
|
||||
export TEST_VERBOSE=false
|
||||
export TEST_COMMAND_TRACE=false
|
||||
export TEST_CAT_RESULTS_OPTS=""
|
||||
export TEST_DIFF_RESULTS=false
|
||||
export TEST_LOCAL_DAEMONS
|
||||
[ -n "$TEST_LOCAL_DAEMONS" ] || TEST_LOCAL_DAEMONS=3
|
||||
export TEST_VAR_DIR=""
|
||||
export TEST_CLEANUP=false
|
||||
|
||||
temp=$(getopt -n "$prog" -o "AcCdDehHNqSvV:xX" -l help -- "$@")
|
||||
|
||||
[ $? != 0 ] && usage
|
||||
|
||||
eval set -- "$temp"
|
||||
|
||||
while true ; do
|
||||
case "$1" in
|
||||
-A) TEST_CAT_RESULTS_OPTS="-A" ; shift ;;
|
||||
-c) TEST_LOCAL_DAEMONS="" ; shift ;;
|
||||
-C) TEST_CLEANUP=true ; shift ;;
|
||||
-d) with_desc=true ; shift ;; # 4th line of output is description
|
||||
-D) TEST_DIFF_RESULTS=true ; shift ;;
|
||||
-e) exit_on_fail=true ; shift ;;
|
||||
-H) no_header=true ; shift ;;
|
||||
-N) with_summary=false ; shift ;;
|
||||
-q) quiet=true ; shift ;;
|
||||
-S) socket_wrapper=true ; shift ;;
|
||||
-v) TEST_VERBOSE=true ; shift ;;
|
||||
-V) TEST_VAR_DIR="$2" ; shift 2 ;;
|
||||
-x) set -x; shift ;;
|
||||
-X) TEST_COMMAND_TRACE=true ; shift ;;
|
||||
--) shift ; break ;;
|
||||
*) usage ;;
|
||||
esac
|
||||
done
|
||||
|
||||
case $(basename "$0") in
|
||||
*run_cluster_tests*)
|
||||
opts="-c"
|
||||
# Running on a cluster... same as -c
|
||||
TEST_LOCAL_DAEMONS=""
|
||||
;;
|
||||
*)
|
||||
opts=""
|
||||
esac
|
||||
|
||||
exec "${test_dir}/scripts/run_tests" $opts "$@"
|
||||
if $quiet ; then
|
||||
show_progress() { cat >/dev/null ; }
|
||||
else
|
||||
show_progress() { cat ; }
|
||||
fi
|
||||
|
||||
######################################################################
|
||||
|
||||
ctdb_test_begin ()
|
||||
{
|
||||
local name="$1"
|
||||
|
||||
teststarttime=$(date '+%s')
|
||||
testduration=0
|
||||
|
||||
echo "--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--"
|
||||
echo "Running test $name ($(date '+%T'))"
|
||||
echo "--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--"
|
||||
}
|
||||
|
||||
ctdb_test_end ()
|
||||
{
|
||||
local name="$1" ; shift
|
||||
local status="$1" ; shift
|
||||
# "$@" is command-line
|
||||
|
||||
local interp="SKIPPED"
|
||||
local statstr=" (reason $*)"
|
||||
if [ -n "$status" ] ; then
|
||||
if [ $status -eq 0 ] ; then
|
||||
interp="PASSED"
|
||||
statstr=""
|
||||
echo "ALL OK: $*"
|
||||
else
|
||||
interp="FAILED"
|
||||
statstr=" (status $status)"
|
||||
fi
|
||||
fi
|
||||
|
||||
testduration=$(($(date +%s)-$teststarttime))
|
||||
|
||||
echo "=========================================================================="
|
||||
echo "TEST ${interp}: ${name}${statstr} (duration: ${testduration}s)"
|
||||
echo "=========================================================================="
|
||||
|
||||
}
|
||||
|
||||
ctdb_test_run ()
|
||||
{
|
||||
local name="$1" ; shift
|
||||
|
||||
[ -n "$1" ] || set -- "$name"
|
||||
|
||||
$no_header || ctdb_test_begin "$name"
|
||||
|
||||
local status=0
|
||||
"$@" || status=$?
|
||||
|
||||
$no_header || ctdb_test_end "$name" "$status" "$*"
|
||||
|
||||
return $status
|
||||
}
|
||||
|
||||
######################################################################
|
||||
|
||||
tests_total=0
|
||||
tests_passed=0
|
||||
tests_failed=0
|
||||
summary=""
|
||||
|
||||
if ! which mktemp >/dev/null 2>&1 ; then
|
||||
# Not perfect, but it will do...
|
||||
mktemp ()
|
||||
{
|
||||
_dir=false
|
||||
if [ "$1" = "-d" ] ; then
|
||||
_dir=true
|
||||
fi
|
||||
_t="${TMPDIR:-/tmp}/tmp.$$.$RANDOM"
|
||||
(
|
||||
umask 077
|
||||
if $_dir ; then
|
||||
mkdir "$_t"
|
||||
else
|
||||
>"$_t"
|
||||
fi
|
||||
)
|
||||
echo "$_t"
|
||||
}
|
||||
fi
|
||||
|
||||
tf=$(mktemp)
|
||||
sf=$(mktemp)
|
||||
|
||||
set -o pipefail
|
||||
|
||||
run_one_test ()
|
||||
{
|
||||
_f="$1"
|
||||
|
||||
[ -x "$_f" ] || die "test \"$_f\" is not executable"
|
||||
tests_total=$(($tests_total + 1))
|
||||
|
||||
ctdb_test_run "$_f" | tee "$tf" | show_progress
|
||||
status=$?
|
||||
if [ $status -eq 0 ] ; then
|
||||
tests_passed=$(($tests_passed + 1))
|
||||
else
|
||||
tests_failed=$(($tests_failed + 1))
|
||||
fi
|
||||
if $with_summary ; then
|
||||
if [ $status -eq 0 ] ; then
|
||||
_t=" PASSED "
|
||||
else
|
||||
_t="*FAILED*"
|
||||
fi
|
||||
if $with_desc ; then
|
||||
desc=$(tail -n +4 $tf | head -n 1)
|
||||
_f="$desc"
|
||||
fi
|
||||
echo "$_t $_f" >>"$sf"
|
||||
fi
|
||||
}
|
||||
|
||||
find_and_run_one_test ()
|
||||
{
|
||||
_t="$1"
|
||||
_dir="$2"
|
||||
|
||||
_f="${_dir}${_dir:+/}${_t}"
|
||||
|
||||
if [ -d "$_f" ] ; then
|
||||
for _i in $(ls "${_f%/}/"*".sh" 2>/dev/null) ; do
|
||||
run_one_test "$_i"
|
||||
if $exit_on_fail && [ $status -ne 0 ] ; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
# No tests found? Not a tests directory! Not found...
|
||||
[ -n "$status" ] || status=127
|
||||
elif [ -f "$_f" ] ; then
|
||||
run_one_test "$_f"
|
||||
else
|
||||
status=127
|
||||
fi
|
||||
}
|
||||
|
||||
# Following 2 lines may be modified by installation script
|
||||
export CTDB_TESTS_ARE_INSTALLED=false
|
||||
test_dir=$(dirname "$0")
|
||||
|
||||
if [ -z "$TEST_VAR_DIR" ] ; then
|
||||
if $CTDB_TESTS_ARE_INSTALLED ; then
|
||||
TEST_VAR_DIR=$(mktemp -d)
|
||||
else
|
||||
TEST_VAR_DIR="${test_dir}/var"
|
||||
fi
|
||||
fi
|
||||
mkdir -p "$TEST_VAR_DIR"
|
||||
|
||||
# Must be absolute
|
||||
TEST_VAR_DIR=$(cd "$TEST_VAR_DIR"; echo "$PWD")
|
||||
echo "TEST_VAR_DIR=$TEST_VAR_DIR"
|
||||
|
||||
if $socket_wrapper ; then
|
||||
export SOCKET_WRAPPER_DIR="${TEST_VAR_DIR}/sw"
|
||||
mkdir -p "$SOCKET_WRAPPER_DIR"
|
||||
fi
|
||||
|
||||
export TEST_SCRIPTS_DIR="${test_dir}/scripts"
|
||||
|
||||
# If no tests specified then run some defaults
|
||||
if [ -z "$1" ] ; then
|
||||
if [ -n "$TEST_LOCAL_DAEMONS" ] ; then
|
||||
set -- onnode takeover tool eventscripts simple
|
||||
else
|
||||
set -- simple complex
|
||||
fi
|
||||
fi
|
||||
|
||||
for f ; do
|
||||
find_and_run_one_test "$f"
|
||||
|
||||
if [ $status -eq 127 ] ; then
|
||||
# Find the the top-level tests directory
|
||||
tests_dir=$(dirname $(cd $TEST_SCRIPTS_DIR; echo $PWD))
|
||||
# Strip off current directory from beginning, if there, just
|
||||
# to make paths more friendly.
|
||||
tests_dir=${tests_dir#$PWD/}
|
||||
find_and_run_one_test "$f" "$tests_dir"
|
||||
fi
|
||||
|
||||
if [ $status -eq 127 ] ; then
|
||||
die "test \"$f\" is not recognised"
|
||||
fi
|
||||
|
||||
if $exit_on_fail && [ $status -ne 0 ] ; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
rm -f "$tf"
|
||||
|
||||
if $with_summary ; then
|
||||
echo
|
||||
cat "$sf"
|
||||
echo
|
||||
echo "${tests_passed}/${tests_total} tests passed"
|
||||
fi
|
||||
|
||||
rm -f "$sf"
|
||||
|
||||
echo
|
||||
|
||||
if $TEST_CLEANUP ; then
|
||||
echo "Removing TEST_VAR_DIR=$TEST_VAR_DIR"
|
||||
rm -rf "$TEST_VAR_DIR"
|
||||
else
|
||||
echo "Not cleaning up TEST_VAR_DIR=$TEST_VAR_DIR"
|
||||
fi
|
||||
|
||||
if $no_header || $exit_on_fail ; then
|
||||
exit $status
|
||||
elif [ $tests_failed -gt 0 ] ; then
|
||||
exit 1
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
|
@ -1,311 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
Usage: $0 [OPTIONS] [TESTS]
|
||||
|
||||
Options:
|
||||
-A Use "cat -A" to print test output (only some tests)
|
||||
-c Run integration tests on a cluster
|
||||
-C Clean up - kill daemons and remove TEST_VAR_DIR when done
|
||||
-d Print descriptions of tests instead of filenames (dodgy!)
|
||||
-D Show diff between failed/expected test output (some tests only)
|
||||
-e Exit on the first test failure
|
||||
-H No headers - for running single test with other wrapper
|
||||
-N Don't print summary of tests results after running all tests
|
||||
-q Quiet - don't show tests being run (hint: use with -s)
|
||||
-S Enable socket wrapper
|
||||
-v Verbose - print test output for non-failures (only some tests)
|
||||
-V <dir> Use <dir> as TEST_VAR_DIR
|
||||
-x Trace this script with the -x option
|
||||
-X Trace certain scripts run by tests using -x (only some tests)
|
||||
EOF
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Print a message and exit.
|
||||
die ()
|
||||
{
|
||||
echo "$1" >&2 ; exit ${2:-1}
|
||||
}
|
||||
|
||||
######################################################################
|
||||
|
||||
with_summary=true
|
||||
with_desc=false
|
||||
quiet=false
|
||||
exit_on_fail=false
|
||||
no_header=false
|
||||
socket_wrapper=false
|
||||
|
||||
export TEST_VERBOSE=false
|
||||
export TEST_COMMAND_TRACE=false
|
||||
export TEST_CAT_RESULTS_OPTS=""
|
||||
export TEST_DIFF_RESULTS=false
|
||||
export TEST_LOCAL_DAEMONS
|
||||
[ -n "$TEST_LOCAL_DAEMONS" ] || TEST_LOCAL_DAEMONS=3
|
||||
export TEST_VAR_DIR=""
|
||||
export TEST_CLEANUP=false
|
||||
|
||||
temp=$(getopt -n "$prog" -o "AcCdDehHNqSvV:xX" -l help -- "$@")
|
||||
|
||||
[ $? != 0 ] && usage
|
||||
|
||||
eval set -- "$temp"
|
||||
|
||||
while true ; do
|
||||
case "$1" in
|
||||
-A) TEST_CAT_RESULTS_OPTS="-A" ; shift ;;
|
||||
-c) TEST_LOCAL_DAEMONS="" ; shift ;;
|
||||
-C) TEST_CLEANUP=true ; shift ;;
|
||||
-d) with_desc=true ; shift ;; # 4th line of output is description
|
||||
-D) TEST_DIFF_RESULTS=true ; shift ;;
|
||||
-e) exit_on_fail=true ; shift ;;
|
||||
-H) no_header=true ; shift ;;
|
||||
-N) with_summary=false ; shift ;;
|
||||
-q) quiet=true ; shift ;;
|
||||
-S) socket_wrapper=true ; shift ;;
|
||||
-v) TEST_VERBOSE=true ; shift ;;
|
||||
-V) TEST_VAR_DIR="$2" ; shift 2 ;;
|
||||
-x) set -x; shift ;;
|
||||
-X) TEST_COMMAND_TRACE=true ; shift ;;
|
||||
--) shift ; break ;;
|
||||
*) usage ;;
|
||||
esac
|
||||
done
|
||||
|
||||
case $(basename "$0") in
|
||||
*run_cluster_tests*)
|
||||
# Running on a cluster... same as -c
|
||||
TEST_LOCAL_DAEMONS=""
|
||||
;;
|
||||
esac
|
||||
|
||||
if $quiet ; then
|
||||
show_progress() { cat >/dev/null ; }
|
||||
else
|
||||
show_progress() { cat ; }
|
||||
fi
|
||||
|
||||
######################################################################
|
||||
|
||||
ctdb_test_begin ()
|
||||
{
|
||||
local name="$1"
|
||||
|
||||
teststarttime=$(date '+%s')
|
||||
testduration=0
|
||||
|
||||
echo "--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--"
|
||||
echo "Running test $name ($(date '+%T'))"
|
||||
echo "--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--"
|
||||
}
|
||||
|
||||
ctdb_test_end ()
|
||||
{
|
||||
local name="$1" ; shift
|
||||
local status="$1" ; shift
|
||||
# "$@" is command-line
|
||||
|
||||
local interp="SKIPPED"
|
||||
local statstr=" (reason $*)"
|
||||
if [ -n "$status" ] ; then
|
||||
if [ $status -eq 0 ] ; then
|
||||
interp="PASSED"
|
||||
statstr=""
|
||||
echo "ALL OK: $*"
|
||||
else
|
||||
interp="FAILED"
|
||||
statstr=" (status $status)"
|
||||
fi
|
||||
fi
|
||||
|
||||
testduration=$(($(date +%s)-$teststarttime))
|
||||
|
||||
echo "=========================================================================="
|
||||
echo "TEST ${interp}: ${name}${statstr} (duration: ${testduration}s)"
|
||||
echo "=========================================================================="
|
||||
|
||||
}
|
||||
|
||||
ctdb_test_run ()
|
||||
{
|
||||
local name="$1" ; shift
|
||||
|
||||
[ -n "$1" ] || set -- "$name"
|
||||
|
||||
$no_header || ctdb_test_begin "$name"
|
||||
|
||||
local status=0
|
||||
"$@" || status=$?
|
||||
|
||||
$no_header || ctdb_test_end "$name" "$status" "$*"
|
||||
|
||||
return $status
|
||||
}
|
||||
|
||||
######################################################################
|
||||
|
||||
tests_total=0
|
||||
tests_passed=0
|
||||
tests_failed=0
|
||||
summary=""
|
||||
|
||||
if ! which mktemp >/dev/null 2>&1 ; then
|
||||
# Not perfect, but it will do...
|
||||
mktemp ()
|
||||
{
|
||||
_dir=false
|
||||
if [ "$1" = "-d" ] ; then
|
||||
_dir=true
|
||||
fi
|
||||
_t="${TMPDIR:-/tmp}/tmp.$$.$RANDOM"
|
||||
(
|
||||
umask 077
|
||||
if $_dir ; then
|
||||
mkdir "$_t"
|
||||
else
|
||||
>"$_t"
|
||||
fi
|
||||
)
|
||||
echo "$_t"
|
||||
}
|
||||
fi
|
||||
|
||||
tf=$(mktemp)
|
||||
sf=$(mktemp)
|
||||
|
||||
set -o pipefail
|
||||
|
||||
run_one_test ()
|
||||
{
|
||||
_f="$1"
|
||||
|
||||
[ -x "$_f" ] || die "test \"$_f\" is not executable"
|
||||
tests_total=$(($tests_total + 1))
|
||||
|
||||
ctdb_test_run "$_f" | tee "$tf" | show_progress
|
||||
status=$?
|
||||
if [ $status -eq 0 ] ; then
|
||||
tests_passed=$(($tests_passed + 1))
|
||||
else
|
||||
tests_failed=$(($tests_failed + 1))
|
||||
fi
|
||||
if $with_summary ; then
|
||||
if [ $status -eq 0 ] ; then
|
||||
_t=" PASSED "
|
||||
else
|
||||
_t="*FAILED*"
|
||||
fi
|
||||
if $with_desc ; then
|
||||
desc=$(tail -n +4 $tf | head -n 1)
|
||||
_f="$desc"
|
||||
fi
|
||||
echo "$_t $_f" >>"$sf"
|
||||
fi
|
||||
}
|
||||
|
||||
find_and_run_one_test ()
|
||||
{
|
||||
_t="$1"
|
||||
_dir="$2"
|
||||
|
||||
_f="${_dir}${_dir:+/}${_t}"
|
||||
|
||||
if [ -d "$_f" ] ; then
|
||||
for _i in $(ls "${_f%/}/"*".sh" 2>/dev/null) ; do
|
||||
run_one_test "$_i"
|
||||
if $exit_on_fail && [ $status -ne 0 ] ; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
# No tests found? Not a tests directory! Not found...
|
||||
[ -n "$status" ] || status=127
|
||||
elif [ -f "$_f" ] ; then
|
||||
run_one_test "$_f"
|
||||
else
|
||||
status=127
|
||||
fi
|
||||
}
|
||||
|
||||
# Following 2 lines may be modified by installation script
|
||||
export CTDB_TESTS_ARE_INSTALLED=false
|
||||
test_dir=$(dirname "$0")
|
||||
|
||||
if [ -z "$TEST_VAR_DIR" ] ; then
|
||||
if $CTDB_TESTS_ARE_INSTALLED ; then
|
||||
TEST_VAR_DIR=$(mktemp -d)
|
||||
else
|
||||
TEST_VAR_DIR="${test_dir}/var"
|
||||
fi
|
||||
fi
|
||||
mkdir -p "$TEST_VAR_DIR"
|
||||
|
||||
# Must be absolute
|
||||
TEST_VAR_DIR=$(cd "$TEST_VAR_DIR"; echo "$PWD")
|
||||
echo "TEST_VAR_DIR=$TEST_VAR_DIR"
|
||||
|
||||
if $socket_wrapper ; then
|
||||
export SOCKET_WRAPPER_DIR="${TEST_VAR_DIR}/sw"
|
||||
mkdir -p "$SOCKET_WRAPPER_DIR"
|
||||
fi
|
||||
|
||||
export TEST_SCRIPTS_DIR="${test_dir}/scripts"
|
||||
|
||||
# If no tests specified then run some defaults
|
||||
if [ -z "$1" ] ; then
|
||||
if [ -n "$TEST_LOCAL_DAEMONS" ] ; then
|
||||
set -- onnode takeover tool eventscripts simple
|
||||
else
|
||||
set -- simple complex
|
||||
fi
|
||||
fi
|
||||
|
||||
for f ; do
|
||||
find_and_run_one_test "$f"
|
||||
|
||||
if [ $status -eq 127 ] ; then
|
||||
# Find the the top-level tests directory
|
||||
tests_dir=$(dirname $(cd $TEST_SCRIPTS_DIR; echo $PWD))
|
||||
# Strip off current directory from beginning, if there, just
|
||||
# to make paths more friendly.
|
||||
tests_dir=${tests_dir#$PWD/}
|
||||
find_and_run_one_test "$f" "$tests_dir"
|
||||
fi
|
||||
|
||||
if [ $status -eq 127 ] ; then
|
||||
die "test \"$f\" is not recognised"
|
||||
fi
|
||||
|
||||
if $exit_on_fail && [ $status -ne 0 ] ; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
rm -f "$tf"
|
||||
|
||||
if $with_summary ; then
|
||||
echo
|
||||
cat "$sf"
|
||||
echo
|
||||
echo "${tests_passed}/${tests_total} tests passed"
|
||||
fi
|
||||
|
||||
rm -f "$sf"
|
||||
|
||||
echo
|
||||
|
||||
if $TEST_CLEANUP ; then
|
||||
echo "Removing TEST_VAR_DIR=$TEST_VAR_DIR"
|
||||
rm -rf "$TEST_VAR_DIR"
|
||||
else
|
||||
echo "Not cleaning up TEST_VAR_DIR=$TEST_VAR_DIR"
|
||||
fi
|
||||
|
||||
if $no_header || $exit_on_fail ; then
|
||||
exit $status
|
||||
elif [ $tests_failed -gt 0 ] ; then
|
||||
exit 1
|
||||
else
|
||||
exit 0
|
||||
fi
|
Loading…
x
Reference in New Issue
Block a user