# indicates empty output.
# If argument 2 is not present or null then read required test output
# from stdin.
-required_result ()
-{
- required_rc="${1:-0}"
- if [ -n "$2" ] ; then
- if [ "$2" = "--" ] ; then
- required_output=""
- else
- required_output="$2"
- fi
- else
- if ! tty -s ; then
- required_output=$(cat)
+required_result()
+{
+ required_rc="${1:-0}"
+ if [ -n "$2" ]; then
+ if [ "$2" = "--" ]; then
+ required_output=""
+ else
+ required_output="$2"
+ fi
else
- required_output=""
+ if ! tty -s; then
+ required_output=$(cat)
+ else
+ required_output=""
+ fi
fi
- fi
}
-required_error ()
+required_error()
{
rc=$(errcode "$1")
shift
required_result "$rc" "$@"
}
-ok ()
+ok()
{
- required_result 0 "$@"
+ required_result 0 "$@"
}
-ok_null ()
+ok_null()
{
- ok --
+ ok --
}
-reset_extra_header ()
+reset_extra_header()
{
- # Re-define this function to output extra header information
- extra_header ()
- {
- :
- }
+ # Re-define this function to output extra header information
+ extra_header()
+ {
+ :
+ }
}
-reset_extra_footer ()
+reset_extra_footer()
{
- # Re-define this function to output extra footer information
- extra_footer ()
- {
- :
- }
+ # Re-define this function to output extra footer information
+ extra_footer()
+ {
+ :
+ }
}
reset_extra_header
reset_extra_footer
-result_print ()
+result_print()
{
- _passed="$1"
- _out="$2"
- _rc="$3"
+ _passed="$1"
+ _out="$2"
+ _rc="$3"
- if "$CTDB_TEST_VERBOSE" || ! $_passed ; then
- extra_header
+ if "$CTDB_TEST_VERBOSE" || ! $_passed; then
+ extra_header
-cat <<EOF
+ cat <<EOF
--------------------------------------------------
Output (Exit status: ${_rc}):
--------------------------------------------------
EOF
- # Avoid echo, which might expand unintentional escapes
- printf '%s\n' "$_out" | \
- result_filter | \
- cat "${CTDB_TEST_CAT_RESULTS_OPTS:--}"
- fi
+ # Avoid echo, which might expand unintentional escapes
+ printf '%s\n' "$_out" |
+ result_filter |
+ cat "${CTDB_TEST_CAT_RESULTS_OPTS:--}"
+ fi
- if ! $_passed ; then
- cat <<EOF
+ if ! $_passed; then
+ cat <<EOF
--------------------------------------------------
Required output (Exit status: ${required_rc}):
--------------------------------------------------
EOF
- # Avoid echo, which might expand unintentional escapes
- printf '%s\n' "$required_output" | \
- cat "${CTDB_TEST_CAT_RESULTS_OPTS:--}"
+ # Avoid echo, which might expand unintentional escapes
+ printf '%s\n' "$required_output" |
+ cat "${CTDB_TEST_CAT_RESULTS_OPTS:--}"
- if $CTDB_TEST_DIFF_RESULTS ; then
- _outr=$(mktemp)
- # Avoid echo, which might expand unintentional escapes
- printf '%s\n' "$required_output" >"$_outr"
+ if $CTDB_TEST_DIFF_RESULTS; then
+ _outr=$(mktemp)
+ # Avoid echo, which might expand unintentional escapes
+ printf '%s\n' "$required_output" >"$_outr"
- _outf=$(mktemp)
- # Avoid echo, which might expand unintentional escapes
- printf '%s\n' "$_fout" >"$_outf"
+ _outf=$(mktemp)
+ # Avoid echo, which might expand unintentional escapes
+ printf '%s\n' "$_fout" >"$_outf"
- cat <<EOF
+ cat <<EOF
--------------------------------------------------
Diff:
--------------------------------------------------
EOF
- diff -u "$_outr" "$_outf" | cat -A
- rm "$_outr" "$_outf"
+ diff -u "$_outr" "$_outf" | cat -A
+ rm "$_outr" "$_outf"
+ fi
fi
- fi
}
-result_footer ()
+result_footer()
{
- _passed="$1"
+ _passed="$1"
- if "$CTDB_TEST_VERBOSE" || ! $_passed ; then
- extra_footer
- fi
+ if "$CTDB_TEST_VERBOSE" || ! $_passed; then
+ extra_footer
+ fi
- if $_passed ; then
- echo "PASSED"
- return 0
- else
- echo
- echo "FAILED"
- return 1
- fi
+ if $_passed; then
+ echo "PASSED"
+ return 0
+ else
+ echo
+ echo "FAILED"
+ return 1
+ fi
}
# Result filtering is (usually) used to replace the date/time/PID
# prefix on some CTDB tool/client log messages with the literal string
# "DATE TIME [PID]". This allows tests to loosely match this output,
# since it can't otherwise be matched.
-result_filter_default ()
+result_filter_default()
{
- _date_time_pid='[0-9/][0-9/]*\ [0-9:\.][0-9:\.]*\ \[[\ 0-9][\ 0-9]*\]'
- sed -e "s@^${_date_time_pid}:@DATE\ TIME\ \[PID\]:@"
+ _date_time_pid='[0-9/][0-9/]*\ [0-9:\.][0-9:\.]*\ \[[\ 0-9][\ 0-9]*\]'
+ sed -e "s@^${_date_time_pid}:@DATE\ TIME\ \[PID\]:@"
}
# Used in testcases
# shellcheck disable=SC2034
TEST_DATE_STAMP=""
# Override this function to customise output filtering.
-result_filter ()
+result_filter()
{
- result_filter_default
+ result_filter_default
}
-result_check ()
+result_check()
{
- _rc=$?
+ _rc=$?
- # Avoid echo, which might expand unintentional escapes
- _fout=$(printf '%s\n' "$_out" | result_filter)
+ # Avoid echo, which might expand unintentional escapes
+ _fout=$(printf '%s\n' "$_out" | result_filter)
- if [ "$_fout" = "$required_output" ] && [ "$_rc" = "$required_rc" ] ; then
- _passed=true
- else
- _passed=false
- fi
+ if [ "$_fout" = "$required_output" ] &&
+ [ "$_rc" = "$required_rc" ]; then
+ _passed=true
+ else
+ _passed=false
+ fi
- result_print "$_passed" "$_out" "$_rc"
- result_footer "$_passed"
+ result_print "$_passed" "$_out" "$_rc"
+ result_footer "$_passed"
}
-test_fail ()
+test_fail()
{
- _passed=false
- return 1
+ _passed=false
+ return 1
}
-test_header_default ()
+test_header_default()
{
- echo "=================================================="
- echo "Running \"$*\""
+ echo "=================================================="
+ echo "Running \"$*\""
}
-reset_test_header ()
+reset_test_header()
{
- # Re-define this function to get different header
- test_header ()
- {
- test_header_default "$@"
- }
+ # Re-define this function to get different header
+ test_header()
+ {
+ test_header_default "$@"
+ }
}
reset_test_header
# Simple test harness for running binary unit tests
-unit_test ()
+unit_test()
{
- test_header "$@"
+ test_header "$@"
- _wrapper="$VALGRIND"
- if $CTDB_TEST_COMMAND_TRACE ; then
- _wrapper="strace"
- fi
- _out=$($_wrapper "$@" 2>&1)
+ _wrapper="$VALGRIND"
+ if $CTDB_TEST_COMMAND_TRACE; then
+ _wrapper="strace"
+ fi
+ _out=$($_wrapper "$@" 2>&1)
- result_check || exit $?
+ result_check || exit $?
}
# Simple test harness for running shell script unit tests
-script_test ()
+script_test()
{
- test_header "$@"
+ test_header "$@"
- _shell=""
- if ${CTDB_TEST_COMMAND_TRACE} ; then
- _shell="sh -x"
- else
- _shell="sh"
- fi
+ _shell=""
+ if ${CTDB_TEST_COMMAND_TRACE}; then
+ _shell="sh -x"
+ else
+ _shell="sh"
+ fi
- _out=$($_shell "$@" 2>&1)
+ _out=$($_shell "$@" 2>&1)
- result_check || exit $?
+ result_check || exit $?
}
# Simple test harness for running tests without tracing
-unit_test_notrace ()
+unit_test_notrace()
{
- test_header "$@"
+ test_header "$@"
- _out=$("$@" 2>&1)
+ _out=$("$@" 2>&1)
- result_check || exit $?
+ result_check || exit $?
}
test_cleanup_hooks=""
-test_cleanup ()
+test_cleanup()
{
- test_cleanup_hooks="${test_cleanup_hooks}${test_cleanup_hooks:+ ; }$*"
+ test_cleanup_hooks="${test_cleanup_hooks}${test_cleanup_hooks:+ ; }$*"
}
trap 'eval $test_cleanup_hooks' 0
local="${CTDB_TEST_SUITE_DIR}/scripts/local.sh"
-if [ -r "$local" ] ; then
- . "$local"
+if [ -r "$local" ]; then
+ . "$local"
fi