Roshan Khatri 832f074a1c
Enable tests to run with ASAN build. (#45)
---------

Signed-off-by: Roshan Khatri <rvkhatri@amazon.com>
2025-03-14 15:34:40 -07:00

68 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# Sometimes processes are left running when test is cancelled.
# Therefore, before build start, we kill all running test processes left from previous test run.
echo "Kill old running test"
pkill -9 -x Pytest || true
pkill -9 -f "valkey-server.*:" || true
pkill -9 -f Valgrind || true
pkill -9 -f "valkey-benchmark" || true
# If environment variable SERVER_VERSION is not set, default to "unstable"
if [ -z "$SERVER_VERSION" ]; then
echo "SERVER_VERSION environment variable is not set. Defaulting to \"unstable\"."
export SERVER_VERSION="unstable"
fi
# cd to the current directory of the script
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
cd "${DIR}"
export SOURCE_DIR=$2
export MODULE_PATH=${SOURCE_DIR}/build/src/libjson.so
echo "Running integration tests against Valkey version $SERVER_VERSION"
if [[ ! -z "${TEST_PATTERN}" ]] ; then
export TEST_PATTERN="-k ${TEST_PATTERN}"
fi
BINARY_PATH=".build/binaries/${SERVER_VERSION}/valkey-server"
if [[ ! -f "${BINARY_PATH}" ]] ; then
echo "${BINARY_PATH} missing"
exit 1
fi
if [[ $1 == "test" ]] ; then
if [ ! -z "${ASAN_BUILD}" ]; then
echo "Running tests and checking for memory leaks"
python -m pytest --capture=sys --html=report.html --cache-clear -v ${TEST_FLAG} ./ ${TEST_PATTERN} 2>&1 | tee test_output.tmp
# Check for memory leaks in the output
if grep -q "LeakSanitizer: detected memory leaks" test_output.tmp; then
RED='\033[0;31m'
echo -e "${RED}Memory leaks detected in the following tests:"
LEAKING_TESTS=$(grep -B 2 "LeakSanitizer: detected memory leaks" test_output.tmp | \
grep -v "LeakSanitizer" | \
grep ".*\.py::")
LEAK_COUNT=$(echo "$LEAKING_TESTS" | wc -l)
# Output each leaking test
echo "$LEAKING_TESTS" | while read -r line; do
echo "::error::Test with leak: $line"
done
echo -e "\n$LEAK_COUNT python integration tests have leaks detected in them"
rm test_output.tmp
exit 1
fi
rm test_output.tmp
else
python -m pytest --html=report.html --cache-clear -v ${TEST_FLAG} ./ ${TEST_PATTERN}
fi
else
echo "Unknown target: $1"
exit 1
fi