Browse Source

tests: parameterize --valgrind option

Running tests under helgrind and DRD recently proved useful in
tracking down thread interaction issues.  This can unfortunately not
be done through GIT_VALGRIND_OPTIONS because any tool other than
memcheck would complain about unknown options.

Let --valgrind take an optional parameter that describes the valgrind
tool to invoke.  The default mode is to run memcheck as before.

Signed-off-by: Thomas Rast <trast@inf.ethz.ch>
Acked-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Thomas Rast 12 years ago committed by Junio C Hamano
parent
commit
952af3511c
  1. 15
      t/README
  2. 10
      t/test-lib.sh
  3. 25
      t/valgrind/valgrind.sh

15
t/README

@ -92,16 +92,21 @@ appropriately before running "make". @@ -92,16 +92,21 @@ appropriately before running "make".
This causes additional long-running tests to be run (where
available), for more exhaustive testing.

--valgrind::
Execute all Git binaries with valgrind and exit with status
126 on errors (just like regular tests, this will only stop
the test script when running under -i).
--valgrind=<tool>::
Execute all Git binaries under valgrind tool <tool> and exit
with status 126 on errors (just like regular tests, this will
only stop the test script when running under -i).

Since it makes no sense to run the tests with --valgrind and
not see any output, this option implies --verbose. For
convenience, it also implies --tee.

Note that valgrind is run with the option --leak-check=no,
<tool> defaults to 'memcheck', just like valgrind itself.
Other particularly useful choices include 'helgrind' and
'drd', but you may use any tool recognized by your valgrind
installation.

Note that memcheck is run with the option --leak-check=no,
as the git process is short-lived and some errors are not
interesting. In order to run a single command under the same
conditions manually, you should set GIT_VALGRIND to point to

10
t/test-lib.sh

@ -193,7 +193,11 @@ do @@ -193,7 +193,11 @@ do
--no-color)
color=; shift ;;
--va|--val|--valg|--valgr|--valgri|--valgrin|--valgrind)
valgrind=t; verbose=t; shift ;;
valgrind=memcheck
shift ;;
--valgrind=*)
valgrind=$(expr "z$1" : 'z[^=]*=\(.*\)')
shift ;;
--tee)
shift ;; # was handled already
--root=*)
@ -204,6 +208,8 @@ do @@ -204,6 +208,8 @@ do
esac
done

test -n "$valgrind" && verbose=t

if test -n "$color"
then
say_color () {
@ -530,6 +536,8 @@ then @@ -530,6 +536,8 @@ then
PATH=$GIT_VALGRIND/bin:$PATH
GIT_EXEC_PATH=$GIT_VALGRIND/bin
export GIT_VALGRIND
GIT_VALGRIND_MODE="$valgrind"
export GIT_VALGRIND_MODE
elif test -n "$GIT_TEST_INSTALLED"
then
GIT_EXEC_PATH=$($GIT_TEST_INSTALLED/git --exec-path) ||

25
t/valgrind/valgrind.sh

@ -2,20 +2,25 @@ @@ -2,20 +2,25 @@

base=$(basename "$0")

TRACK_ORIGINS=
TOOL_OPTIONS='--leak-check=no'

VALGRIND_VERSION=$(valgrind --version)
VALGRIND_MAJOR=$(expr "$VALGRIND_VERSION" : '[^0-9]*\([0-9]*\)')
VALGRIND_MINOR=$(expr "$VALGRIND_VERSION" : '[^0-9]*[0-9]*\.\([0-9]*\)')
test 3 -gt "$VALGRIND_MAJOR" ||
test 3 -eq "$VALGRIND_MAJOR" -a 4 -gt "$VALGRIND_MINOR" ||
TRACK_ORIGINS=--track-origins=yes
case "$GIT_VALGRIND_MODE" in
memcheck)
VALGRIND_VERSION=$(valgrind --version)
VALGRIND_MAJOR=$(expr "$VALGRIND_VERSION" : '[^0-9]*\([0-9]*\)')
VALGRIND_MINOR=$(expr "$VALGRIND_VERSION" : '[^0-9]*[0-9]*\.\([0-9]*\)')
test 3 -gt "$VALGRIND_MAJOR" ||
test 3 -eq "$VALGRIND_MAJOR" -a 4 -gt "$VALGRIND_MINOR" ||
TOOL_OPTIONS="$TOOL_OPTIONS --track-origins=yes"
;;
*)
TOOL_OPTIONS="--tool=$GIT_VALGRIND_MODE"
esac

exec valgrind -q --error-exitcode=126 \
--leak-check=no \
--suppressions="$GIT_VALGRIND/default.supp" \
--gen-suppressions=all \
$TRACK_ORIGINS \
--suppressions="$GIT_VALGRIND/default.supp" \
$TOOL_OPTIONS \
--log-fd=4 \
--input-fd=4 \
$GIT_VALGRIND_OPTIONS \

Loading…
Cancel
Save