68 lines
2.3 KiB
Bash
Executable File
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
|
|
|