5 Usage: run_tests [OPTIONS] [TESTS]
8 -s Print a summary of tests results after running all tests
9 -l Use local daemons for integration tests
10 -e Exit on the first test failure
11 -V <dir> Use <dir> as $TEST_VAR_DIR
12 -C Clean up - kill daemons and remove $TEST_VAR_DIR when done
13 -v Verbose - print test output for non-failures (only some tests)
14 -A Use "cat -A" to print test output (only some tests)
15 -D Show diff between failed/expected test output (some tests only)
16 -X Trace certain scripts run by tests using -x (only some tests)
17 -d Print descriptions of tests instead of filenames (dodgy!)
18 -H No headers - for running single test with other wrapper
19 -q Quiet - don't show tests being run (hint: use with -s)
20 -x Trace this script with the -x option
25 # Print a message and exit.
28 echo "$1" >&2 ; exit ${2:-1}
31 ######################################################################
39 export TEST_VERBOSE=false
40 export TEST_COMMAND_TRACE=false
41 export TEST_CAT_RESULTS_OPTS=""
42 export TEST_DIFF_RESULTS=false
43 export TEST_LOCAL_DAEMONS # No default, developer can "override"!
44 export TEST_VAR_DIR=""
45 export TEST_CLEANUP=false
47 temp=$(getopt -n "$prog" -o "xdehlqsvV:XACDH" -l help -- "$@")
56 -d) with_desc=true ; shift ;; # 4th line of output is description
57 -e) exit_on_fail=true ; shift ;;
58 -l) TEST_LOCAL_DAEMONS="3" ; shift ;;
59 -q) quiet=true ; shift ;;
60 -s) with_summary=true ; shift ;;
61 -v) TEST_VERBOSE=true ; shift ;;
62 -V) TEST_VAR_DIR="$2" ; shift 2 ;;
63 -X) TEST_COMMAND_TRACE=true ; shift ;;
64 -A) TEST_CAT_RESULTS_OPTS="-A" ; shift ;;
65 -C) TEST_CLEANUP=true ; shift ;;
66 -D) TEST_DIFF_RESULTS=true ; shift ;;
67 -H) no_header=true ; shift ;;
74 show_progress() { cat >/dev/null ; }
76 show_progress() { cat ; }
79 ######################################################################
85 teststarttime=$(date '+%s')
88 echo "--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--"
89 echo "Running test $name ($(date '+%T'))"
90 echo "--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--"
95 local name="$1" ; shift
96 local status="$1" ; shift
97 # "$@" is command-line
99 local interp="SKIPPED"
100 local statstr=" (reason $*)"
101 if [ -n "$status" ] ; then
102 if [ $status -eq 0 ] ; then
108 statstr=" (status $status)"
112 testduration=$(($(date +%s)-$teststarttime))
114 echo "=========================================================================="
115 echo "TEST ${interp}: ${name}${statstr} (duration: ${testduration}s)"
116 echo "=========================================================================="
122 local name="$1" ; shift
124 [ -n "$1" ] || set -- "$name"
126 $no_header || ctdb_test_begin "$name"
131 $no_header || ctdb_test_end "$name" "$status" "$*"
136 ######################################################################
143 rows=$(if tty -s ; then stty size ; else echo x 80 ; fi | sed -e 's@.* @@' -e 's@^0$@80@')
155 [ -x "$_f" ] || die "test \"$_f\" is not executable"
156 tests_total=$(($tests_total + 1))
158 ctdb_test_run "$_f" | tee "$tf" | show_progress
160 if $with_summary ; then
161 if [ $status -eq 0 ] ; then
162 tests_passed=$(($tests_passed + 1))
166 tests_failed=$(($tests_failed + 1))
169 desc=$(tail -n +4 $tf | head -n 1)
172 echo "$_t $_f" >>"$sf"
176 find_and_run_one_test ()
181 _f="${_dir}${_dir:+/}${_t}"
183 if [ -d "$_f" ] ; then
184 for _i in $(ls "${_f%/}/"*".sh" 2>/dev/null) ; do
186 if $exit_on_fail && [ $status -ne 0 ] ; then
190 elif [ -f "$_f" ] ; then
197 [ -n "$TEST_VAR_DIR" ] || TEST_VAR_DIR=$(mktemp -d)
198 mkdir -p "$TEST_VAR_DIR"
200 TEST_VAR_DIR=$(cd "$TEST_VAR_DIR"; echo "$PWD")
201 echo "TEST_VAR_DIR=$TEST_VAR_DIR"
203 export TEST_SCRIPTS_DIR=$(dirname "$0")
206 find_and_run_one_test "$f"
208 if [ $status -eq 127 ] ; then
209 # Find the the top-level tests directory
210 tests_dir=$(dirname $(cd $TEST_SCRIPTS_DIR; echo $PWD))
211 # Strip off current directory from beginning, if there, just
212 # to make paths more friendly.
213 tests_dir=${tests_dir#$PWD/}
214 find_and_run_one_test "$f" "$tests_dir"
217 if [ $status -eq 127 ] ; then
218 die "test \"$f\" is not recognised"
221 if $exit_on_fail && [ $status -ne 0 ] ; then
228 if $with_summary ; then
232 echo "${tests_passed}/${tests_total} tests passed"
239 if $TEST_CLEANUP ; then
240 echo "Removing TEST_VAR_DIR=$TEST_VAR_DIR"
241 rm -rf "$TEST_VAR_DIR"
243 echo "Not cleaning up TEST_VAR_DIR=$TEST_VAR_DIR"
246 if [ $tests_failed -gt 0 ] ; then