diff options
| author | Gordon Sim <gsim@apache.org> | 2007-01-23 15:12:27 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2007-01-23 15:12:27 +0000 |
| commit | b076114507d5c838ecf3d10f1f2dbea78a35f139 (patch) | |
| tree | 5c0207d771622cf4c4f26a29ab1433eaed131df4 /cpp/tests/setup | |
| parent | 25a3107550f93fc45002ddd2f6c173893877c649 (diff) | |
| download | qpid-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/setup | 74 |
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 +} |
