Blame tests/test-defs.sh

Packit Service def718
#!/bin/sh
Packit Service def718
Packit Service def718
# Make sure srcdir is an absolute path.  Supply the variable
Packit Service def718
# if it does not exist.  We want to be able to run the tests
Packit Service def718
# stand-alone!!
Packit Service def718
#
Packit Service def718
srcdir=${srcdir-.}
Packit Service def718
if test ! -d $srcdir ; then
Packit Service def718
    echo "test-defs.sh: installation error" 1>&2
Packit Service def718
    exit 1
Packit Service def718
fi
Packit Service def718
Packit Service def718
# Use absolute paths
Packit Service def718
case "$srcdir" in
Packit Service def718
    /* | [A-Za-z]:\\*) ;;
Packit Service def718
    *) srcdir=`\cd $srcdir && pwd` ;;
Packit Service def718
esac
Packit Service def718
Packit Service def718
case "$top_builddir" in
Packit Service def718
    /* | [A-Za-z]:\\*) ;;
Packit Service def718
    *) top_builddir=`\cd ${top_builddir-..} && pwd` ;;
Packit Service def718
esac
Packit Service def718
Packit Service def718
top_builddir=${top_builddir}/tests
Packit Service def718
Packit Service def718
progname=`echo "$0" | sed 's,^.*/,,'`
Packit Service def718
testname=`echo "$progname" | sed 's,-.*$,,'`
Packit Service def718
testsubdir=${testsubdir-testSubDir}
Packit Service def718
testsubdir=${testsubdir}/${progname}
Packit Service def718
Packit Service def718
# User can set VERBOSE to cause output redirection
Packit Service def718
case "$VERBOSE" in
Packit Service def718
[Nn]|[Nn][Oo]|0|"")
Packit Service def718
	VERBOSE=0
Packit Service def718
	exec > /dev/null
Packit Service def718
	;;
Packit Service def718
[Yy]|[Yy][Ee][Ss])
Packit Service def718
	VERBOSE=1
Packit Service def718
	;;
Packit Service def718
esac
Packit Service def718
Packit Service def718
rm -rf "$testsubdir" > /dev/null 2>&1
Packit Service def718
mkdir -p "$testsubdir"
Packit Service def718
CURDIR=$(pwd)
Packit Service def718
cd "$testsubdir" \
Packit Service def718
   || { echo "Cannot make or change into $testsubdir"; exit 1; }
Packit Service def718
Packit Service def718
echo "=== Running test $progname"
Packit Service def718
Packit Service def718
CMP="${CMP-cmp}"
Packit Service def718
Packit Service def718
use_valgrind=${USE_VALGRIND-1}
Packit Service def718
case "${use_valgrind}" in
Packit Service def718
	[0Nn]*)
Packit Service def718
		use_valgrind=0
Packit Service def718
		;;
Packit Service def718
	*)
Packit Service def718
		use_valgrind=1
Packit Service def718
		;;
Packit Service def718
esac
Packit Service def718
valgrind_path=$(which valgrind 2> /dev/null)
Packit Service def718
if [ -z "${valgrind_path}" -o ! -x "${valgrind_path}" ] ; then
Packit Service def718
	use_valgrind=0
Packit Service def718
fi
Packit Service def718
Packit Service def718
#
Packit Service def718
# This is a common function to check the results of a test program
Packit Service def718
# that is intended to generate consistent output across runs.
Packit Service def718
#
Packit Service def718
# ${top_builddir} must be set to the top level build directory.
Packit Service def718
#
Packit Service def718
# Output will be written to the current directory.
Packit Service def718
#
Packit Service def718
# It must be passed the name of the test command to run, which must be present
Packit Service def718
#  in the ${top_builddir} directory.
Packit Service def718
#
Packit Service def718
# It will compare the output of running that against <name of command>.expected
Packit Service def718
#
Packit Service def718
run_output_test()
Packit Service def718
{
Packit Service def718
	if [ "$1" = "-o" ] ; then
Packit Service def718
		TEST_OUTPUT="$2"
Packit Service def718
		shift
Packit Service def718
		shift
Packit Service def718
	fi
Packit Service def718
	TEST_COMMAND="$1"
Packit Service def718
	shift
Packit Service def718
	if [ -z "${TEST_OUTPUT}" ] ; then	
Packit Service def718
		TEST_OUTPUT=${TEST_COMMAND}
Packit Service def718
	fi
Packit Service def718
Packit Service def718
	REDIR_OUTPUT="> \"${TEST_OUTPUT}.out\""
Packit Service def718
	if [ $VERBOSE -gt 1 ] ; then
Packit Service def718
		REDIR_OUTPUT="| tee \"${TEST_OUTPUT}.out\""
Packit Service def718
	fi
Packit Service def718
Packit Service def718
	if [ $use_valgrind -eq 1 ] ; then
Packit Service def718
		eval valgrind --tool=memcheck \
Packit Service def718
			--trace-children=yes \
Packit Service def718
			--demangle=yes \
Packit Service def718
			--log-file="${TEST_OUTPUT}.vg.out" \
Packit Service def718
			--leak-check=full \
Packit Service def718
			--show-reachable=yes \
Packit Service def718
			--run-libc-freeres=yes \
Packit Service def718
		"\"${top_builddir}/${TEST_COMMAND}\"" \"\$@\" ${REDIR_OUTPUT}
Packit Service def718
		err=$?
Packit Service def718
Packit Service def718
	else
Packit Service def718
		eval "\"${top_builddir}/${TEST_COMMAND}"\" \"\$@\" ${REDIR_OUTPUT}
Packit Service def718
		err=$?
Packit Service def718
	fi
Packit Service def718
Packit Service def718
	if [ $err -ne 0 ] ; then
Packit Service def718
		echo "ERROR: \"${TEST_COMMAND} $@\" exited with non-zero exit status: $err" 1>&2
Packit Service def718
	fi
Packit Service def718
Packit Service def718
	if [ $use_valgrind -eq 1 ] ; then
Packit Service def718
		if ! tail -1 "${TEST_OUTPUT}.vg.out" | grep -q "ERROR SUMMARY: 0 errors" ; then
Packit Service def718
			echo "ERROR: valgrind found errors during execution:" 1>&2
Packit Service def718
			cat "${TEST_OUTPUT}.vg.out"
Packit Service def718
			err=1
Packit Service def718
		fi
Packit Service def718
	fi
Packit Service def718
Packit Service def718
	if ! "$CMP" -s "${srcdir}/${TEST_OUTPUT}.expected" "${TEST_OUTPUT}.out" ; then
Packit Service def718
		echo "ERROR: \"${TEST_COMMAND} $@\" (${TEST_OUTPUT}) failed (set VERBOSE=1 to see full output):" 1>&2
Packit Service def718
		(cd "${CURDIR}" ; set -x ; diff "${srcdir}/${TEST_OUTPUT}.expected" "$testsubdir/${TEST_OUTPUT}.out")
Packit Service def718
		echo "cp \"$testsubdir/${TEST_OUTPUT}.out\" \"${srcdir}/${TEST_OUTPUT}.expected\"" 1>&2
Packit Service def718
Packit Service def718
		err=1
Packit Service def718
	fi
Packit Service def718
Packit Service def718
	return $err
Packit Service def718
}