95 lines
2.2 KiB
Bash
Executable File
95 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Copyright (c) 2014 by Michael Berlin, Zuse Institute Berlin
|
|
#
|
|
# Licensed under the BSD License, see LICENSE file for details.
|
|
|
|
# This test runs all C++ unit tests through Valgrind which will check for
|
|
# memory leaks.
|
|
#
|
|
# Make sure that you did run export BUILD_CLIENT_TESTS=true before running
|
|
# "make client_debug". Otherwise, the unit tests won't be built.
|
|
|
|
set -e
|
|
|
|
function warn_missing_url() {
|
|
cat <<EOF
|
|
INFO: URL to XtreemFS $1 not given as $2 parameter.
|
|
|
|
INFO: Tests will use the default URL at localhost and the default port.
|
|
INFO: Make sure to run an XtreemFS setup on this address or specify a different URL as argument.
|
|
|
|
EOF
|
|
}
|
|
|
|
hash valgrind 2>/dev/null || {
|
|
echo "ERROR: valgrind not found, but required by this test."
|
|
exit 1
|
|
}
|
|
|
|
# Parse arguments.
|
|
TEST_DIR=$4
|
|
if [ -z $TEST_DIR ]
|
|
then
|
|
TEST_DIR=/tmp/xtreemfs-cpp-valgrind
|
|
if [ ! -d "$TEST_DIR" ]; then mkdir "$TEST_DIR"; fi
|
|
if [ ! -d "${TEST_DIR}/log" ]; then mkdir "${TEST_DIR}/log"; fi
|
|
fi
|
|
export XTREEMFS_TEST_DIR="$TEST_DIR"
|
|
echo "INFO: TEST_DIR: $TEST_DIR"
|
|
VALGRIND_LOG_FILE="${TEST_DIR}/log/valgrind.log"
|
|
|
|
if [ -n "$1" ]
|
|
then
|
|
XTREEMFS_DIR="$1"
|
|
else
|
|
# Try to guess the path of the XtreemFS repository.
|
|
[ -d "cpp" ] && XTREEMFS_DIR="."
|
|
[ -d "../cpp" ] && XTREEMFS_DIR=".."
|
|
[ -d "../../cpp" ] && XTREEMFS_DIR="../.."
|
|
if [ -n "$XTREEMFS_DIR" ]
|
|
then
|
|
echo "INFO: Path to XtreemFS repository auto-detected and set to: ${XTREEMFS_DIR}"
|
|
else
|
|
echo "ERROR: Path to XtreemFS repository not found. Set it as first parameter. Aborting."
|
|
exit 2
|
|
fi
|
|
fi
|
|
|
|
if [ -n "$2" ]
|
|
then
|
|
export XTREEMFS_DIR_URL="$2"
|
|
else
|
|
warn_missing_url "DIR" "second"
|
|
fi
|
|
if [ -n "$3" ]
|
|
then
|
|
export XTREEMFS_MRC_URL="$3"
|
|
else
|
|
warn_missing_url "MRC" "third"
|
|
fi
|
|
|
|
# Run tests
|
|
cd "$XTREEMFS_DIR"
|
|
cd cpp/build
|
|
|
|
global_rc=0
|
|
for test in test_*
|
|
do
|
|
set +e
|
|
valgrind --leak-check=full --show-reachable=yes --error-exitcode=23 --suppressions="${XTREEMFS_DIR}/cpp/valgrind.supp" ./$test &>>$VALGRIND_LOG_FILE
|
|
rc=$?
|
|
set -e
|
|
# Add some whitespace to the logfile between runs.
|
|
echo -e "\n\n\n" >> $VALGRIND_LOG_FILE
|
|
|
|
if [ $rc -eq 0 ]
|
|
then
|
|
echo "Valgrind memory-leak check PASSED for: $test"
|
|
else
|
|
echo "Valgrind memory-leak check FAILED for: $test"
|
|
global_rc=1
|
|
fi
|
|
done
|
|
|
|
exit $global_rc |