haproxy/scripts/run-unittests.sh
William Lallemand 0b22c8e0e0 TESTS: unit-tests: store sh -x in a result file
Store `sh -e -x` of the test in a result file. This file is deleted upon
success, but can be consulted if the test fails
2025-03-06 21:22:38 +01:00

95 lines
2.6 KiB
Bash
Executable File

#!/bin/sh
export HAPROXY_PROGRAM="${HAPROXY_PROGRAM:-${PWD}/haproxy}"
export HAPROXY_ARGS="${HAPROXY_ARGS--dM -dI -dW}"
export ROOTDIR="${ROOTDIR:-${PWD}}"
export TESTDIR="${TESTDIR:-./tests/unit/}"
export TMPDIR="${TMPDIR:-/tmp}"
result=0
echo ""
echo "########################## Preparing to run unit tests ##########################"
preparefailed=
if ! [ -x "$(command -v $HAPROXY_PROGRAM)" ]; then
echo "haproxy not found in path, please specify HAPROXY_PROGRAM environment variable"
preparefailed=1
fi
if [ $preparefailed ]; then
exit 1
fi
{ read HAPROXY_VERSION; read TARGET; read FEATURES; read SERVICES; } << EOF
$($HAPROXY_PROGRAM $HAPROXY_ARGS -vv | grep -E 'HA-?Proxy version|TARGET.*=|^Feature|^Available services' | sed 's/.* [:=] //')
EOF
UNITTESTS=$($HAPROXY_PROGRAM $HAPROXY_ARGS -vv|grep -E '^Unit tests list' | sed 's/.* [:=] //')
if [ -z "$UNITTESTS" ]; then
UNITTESTS="none"
fi
HAPROXY_VERSION=$(echo $HAPROXY_VERSION | cut -d " " -f 3)
echo "Testing with haproxy version: $HAPROXY_VERSION"
PROJECT_VERSION=$(${MAKE:-make} version 2>&1 | grep -E '^VERSION:|^SUBVERS:'|cut -f2 -d' '|tr -d '\012')
if [ -z "${PROJECT_VERSION}${MAKE}" ]; then
# try again with gmake, just in case
PROJECT_VERSION=$(gmake version 2>&1 | grep -E '^VERSION:|^SUBVERS:'|cut -f2 -d' '|tr -d '\012')
fi
FEATURES_PATTERN=" $FEATURES "
SERVICES_PATTERN=" $SERVICES "
echo "Target : $TARGET"
echo "Options : $FEATURES"
echo "Services : $SERVICES"
echo "Unit tests: $UNITTESTS"
succeed=0
failed=0
skipped=0
testlist=
TESTRUNDATETIME="$(date '+%Y-%m-%d_%H-%M-%S')"
DSTDIR=$(mktemp -d "${TMPDIR}/ha-unittests-$TESTRUNDATETIME.XXXXXX") || exit 1
mkdir -p "${DSTDIR}" || exit 1
mkdir -p "${DSTDIR}/results/" || exit 1
echo "########################## Gathering tests to run ##########################"
for test in $(find "${TESTDIR}" -name "*.sh"); do
sh -e ${test} check 2>&1 1>/dev/null
r="$?"
if [ "$r" = "0" ]; then
echo " Add test: $test"
testlist="$testlist $test"
else
skipped=$((skipped+1))
echo " Skip $test"
fi
done
echo "########################## Starting unit tests ##########################"
for TEST in $testlist; do
export TESTDIR=$( dirname ${TEST} )
RESULTFILE=$( mktemp "${DSTDIR}/results/res.XXXXXX" )
touch "${RESULTFILE}" || exit 1
echo "${TEST}" > "${RESULTFILE}"
sh -x -e "${TEST}" run 1>>"${RESULTFILE}" 2>&1
r="$?"
if [ "$r" != "0" ]; then
echo " Test ${TEST} failed: $r"
result=$r
failed=$((failed+1))
else
succeed=$((succeed+1))
rm "${RESULTFILE}"
fi
done
echo "${failed} tests failed, ${skipped} tests skipped, ${succeed} tests passed"
exit $result