mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-05-04 16:57:58 +00:00
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
95 lines
2.6 KiB
Bash
Executable File
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
|