# Hey Emacs, this is a -*- shell-script -*- !!! :-) . "${TEST_SCRIPTS_DIR}/common.sh" # Common variables and functions for CTDB unit tests. trap -- '' PIPE # Set the required result for a test. # - Argument 1 is exit code. # - Argument 2, if present is the required test output but "--" # 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 # Use a sub-shell to strip trailing newlines. # They can't be matched anyway because the # test is run in a sub-shell, which strips # trailing newlines. # shellcheck disable=SC2116 required_output=$(echo "$2") fi else if ! tty -s; then required_output=$(cat) else required_output="" fi fi } required_error() { rc=$(errcode "$1") shift required_result "$rc" "$@" } ok() { required_result 0 "$@" } ok_null() { ok -- } reset_extra_header() { # Re-define this function to output extra header information extra_header() { : } } reset_extra_footer() { # Re-define this function to output extra footer information extra_footer() { : } } reset_extra_header reset_extra_footer result_print() { _passed="$1" _out="$2" _rc="$3" if "$CTDB_TEST_VERBOSE" || ! $_passed; then extra_header cat <"$_outr" _outf=$(mktemp) # Avoid echo, which might expand unintentional escapes printf '%s\n' "$_fout" >"$_outf" cat <&1) result_check || exit $? } # Simple test harness for running shell script unit tests script_test() { test_header "$@" _shell="" if ${CTDB_TEST_COMMAND_TRACE}; then _shell="sh -x" else _shell="sh" fi _out=$($_shell "$@" 2>&1) result_check || exit $? } # Simple test harness for running tests without tracing unit_test_notrace() { test_header "$@" _out=$("$@" 2>&1) result_check || exit $? } test_cleanup_hooks="" test_cleanup() { 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" fi