Only use valgrind if requested explicitly + enable address sanitizer

This commit is contained in:
Nikolaus Rath 2017-01-12 14:26:06 -08:00
parent bcb8f75995
commit 4f1a929fed
3 changed files with 21 additions and 14 deletions

11
test/lsan_suppress.txt Normal file
View File

@ -0,0 +1,11 @@
# Suppression file for address sanitizer.
# There are some leaks in command line option parsing. They should be
# fixed at some point, but are harmless since the consume just a small,
# constant amount of memory and do not grow.
leak:fuse_opt_parse
# Leaks in fusermount3 are harmless as well (it's a short-lived
# process) - but patches are welcome!
leak:fusermount.c

View File

@ -2,7 +2,12 @@
set -e
# Disable leak checking for now, there are some issues (or false positives)
# that we still need to fix
export ASAN_OPTIONS="detect_leaks=0"
export CFLAGS="-Werror"
export LSAN_OPTIONS="suppressions=$(pwd)/test/lsan_suppress.txt"
export CC
# Standard build
@ -18,14 +23,14 @@ for CC in gcc gcc-6 clang; do
sudo chown root:root util/fusermount3
sudo chmod 4755 util/fusermount3
ninja tests
TEST_WITH_VALGRIND=true ninja tests
cd ..
done
(cd build-$CC; sudo ninja install)
# Sanitized build
CC=clang
for san in undefined; do
for san in undefined address; do
mkdir build-${san}; cd build-${san}
# b_lundef=false is required to work around clang
# bug, cf. https://groups.google.com/forum/#!topic/mesonbuild/tgEdAXIIdC4

View File

@ -105,21 +105,12 @@ def fuse_test_marker():
return pytest.mark.uses_fuse()
# If valgrind is available, use it
def has_program(name):
try:
ret = subprocess.call([name, '--version'],
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL)
except FileNotFoundError:
return False
return ret == 0
if has_program('valgrind'):
# Use valgrind if requested
if os.environ.get('TEST_WITH_VALGRIND', 'no').lower().strip() \
not in ('no', 'false', '0'):
base_cmdline = [ 'valgrind', '-q', '--' ]
else:
base_cmdline = []
# Try to use local fusermount3
os.environ['PATH'] = '%s:%s' % (pjoin(basename, 'util'), os.environ['PATH'])