summaryrefslogtreecommitdiff
path: root/cpp/tests/setup
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2007-01-23 15:12:27 +0000
committerGordon Sim <gsim@apache.org>2007-01-23 15:12:27 +0000
commitb076114507d5c838ecf3d10f1f2dbea78a35f139 (patch)
tree5c0207d771622cf4c4f26a29ab1433eaed131df4 /cpp/tests/setup
parent25a3107550f93fc45002ddd2f6c173893877c649 (diff)
downloadqpid-python-b076114507d5c838ecf3d10f1f2dbea78a35f139.tar.gz
Patch from Jim Meyering (jim@meyering.net) submitted on dev list.
Instrument all tests so that they are run via valgrind: check for both errors and leaks. * configure.ac: Add new configure options: --enable-valgrind and --disable-valgrind. For now, the latter is the default. * README-dev: Document (and recommend) --enable-valgrind. * tests/.vg-supp: Add many more, from Gordon Sim for FC5. * configure.ac: Check for valgrind. * tests/Makefile.am (TESTS_ENVIRONMENT): Export VALGRIND. * tests/setup: New file. * tests/run-unit-tests: Use new "setup" file. Invoke DllPlugInTester via $vg (aka valgrind). Refer to the source directory using $pwd, since we're now running from a temporary subdirectory. * tests/run-python-tests: Remove traps. That is now done by "setup". [VERBOSE]: Print qpidd --version. Invoke qpidd via $vg and its absolute name. Add a kludgey "sleep 3", because it can take a while for libtool to start valgrind to start qpidd, in the background. Ideally, the python script would simply sleep-0.3-and-retry for a couple seconds, upon failure of the initial connection attempt. * tests/.vg-supp: New file, exempting known leaks on Debian/unstable. Some of these leaks appear to be legitimate. * tests/Makefile.am (EXTRA_DIST): Add .vg-supp and setup. * qpid-autotools-install (usage): Add a missing backslash. Fix "make distcheck" failure. * docs/api/Makefile.am (EXTRA_DIST): Add user.doxygen git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@499049 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/tests/setup')
-rw-r--r--cpp/tests/setup74
1 files changed, 74 insertions, 0 deletions
diff --git a/cpp/tests/setup b/cpp/tests/setup
new file mode 100644
index 0000000000..40acffd584
--- /dev/null
+++ b/cpp/tests/setup
@@ -0,0 +1,74 @@
+# -*- sh -*-
+
+test "$VERBOSE" = yes && set -x
+
+pwd=`pwd`
+t0=`echo "$0"|sed 's,.*/,,'`.tmp; tmp=$t0/$$
+pid=0
+test -z "$TEST_DEBUG" &&
+trap 's=$?;test $pid = 0||kill -2 $pid;cd "$pwd" && rm -rf $t0 && exit $s' 0
+test -z "$TEST_DEBUG" && trap '(exit $?); exit $?' 1 2 13 15
+
+framework_failure=0
+mkdir -p $tmp || framework_failure=1
+cd $tmp || framework_failure=1
+
+gen_supp=--gen-suppressions=all
+# This option makes valgrind significantly slower.
+full_leak_check=--leak-check=full
+
+vg_options="
+ --suppressions=$abs_srcdir/.vg-supp
+ --num-callers=25
+ --demangle=no
+ --track-fds=yes
+ $full_leak_check
+ $gen_supp
+ "
+# configure tests for the existence of valgrind.
+# If it's not available, then make $vg and vg_check no-ops.
+if test x$VALGRIND = x; then
+ vg=
+else
+ vg="libtool --debug --mode=execute valgrind `echo $vg_options` --"
+fi
+
+vg_leak_check()
+{
+ local file=$1
+ local fail
+ # If we detect a leak, dump all output to stderr.
+ grep -E '^==[0-9]+== +definitely lost: [^0]' $file \
+ && { fail=1; cat $file 1>&2;
+ echo "found memory leaks (see log file, $file); see above" 1>&2; }
+ test "$fail" = ''
+}
+
+
+# Ensure 1) that there is an ERROR SUMMARY line, and
+# 2) that the number of errors is 0.
+# An offending line looks like this:
+# ==29302== ERROR SUMMARY: 4 errors from 2 contexts (suppressed: 16 from 5)
+vg_error_check()
+{
+ local file=$1
+ local fail
+ # If we detect a leak, dump all output to stderr.
+ grep -E '^==[0-9]+== ERROR SUMMARY:' $file > /dev/null \
+ || { fail=1; cat $file 1>&2;
+ echo "no valgrind ERROR SUMMARY line in $file" 1>&2; }
+ if test "$fail" = ''; then
+ grep -E '^==[0-9]+== ERROR SUMMARY: [^0] ' $file \
+ && { fail=1; cat $file 1>&2;
+ echo "valgrind reported errors in $file; see above" 1>&2; }
+ fi
+ test "$fail" = ''
+}
+
+vg_check()
+{
+ local file=$1
+ if test x$VALGRIND != x; then
+ vg_error_check $file && vg_leak_check $file
+ fi
+}