mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
fixes tests.sh to not use hard-coded working dir and adds proper cleanup
* Implicitely also allows concurrent runs. * Properly cleanup of any working files created during runtime. * Properly cleanup upon singals. * Allow early-abort during cmdline tests without leaking processes.
This commit is contained in:
parent
bc13365a7b
commit
594102de6b
@ -30,7 +30,11 @@ set -e
|
|||||||
|
|
||||||
REPO_ROOT="$(dirname "$0")"/..
|
REPO_ROOT="$(dirname "$0")"/..
|
||||||
|
|
||||||
|
WORKDIR=`mktemp -d`
|
||||||
IPC_ENABLED=true
|
IPC_ENABLED=true
|
||||||
|
ALETH_PID=
|
||||||
|
CMDLINE_PID=
|
||||||
|
|
||||||
if [[ "$OSTYPE" == "darwin"* ]]
|
if [[ "$OSTYPE" == "darwin"* ]]
|
||||||
then
|
then
|
||||||
SMT_FLAGS="--no-smt"
|
SMT_FLAGS="--no-smt"
|
||||||
@ -41,6 +45,49 @@ then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
safe_kill() {
|
||||||
|
local PID=${1}
|
||||||
|
local NAME=${2:-${1}}
|
||||||
|
local n=1
|
||||||
|
|
||||||
|
# only proceed if $PID does exist
|
||||||
|
kill -0 $PID 2>/dev/null || return
|
||||||
|
|
||||||
|
echo "Sending SIGTERM to ${NAME} (${PID}) ..."
|
||||||
|
kill $PID
|
||||||
|
|
||||||
|
# wait until process terminated gracefully
|
||||||
|
while kill -0 $PID 2>/dev/null && [[ $n -le 4 ]]; do
|
||||||
|
echo "Waiting ($n) ..."
|
||||||
|
sleep 1
|
||||||
|
n=$[n + 1]
|
||||||
|
done
|
||||||
|
|
||||||
|
# process still alive? then hard-kill
|
||||||
|
if kill -0 $PID 2>/dev/null; then
|
||||||
|
echo "Sending SIGKILL to ${NAME} (${PID}) ..."
|
||||||
|
kill -9 $PID
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
# ensure failing commands don't cause termination during cleanup (especially within safe_kill)
|
||||||
|
set +e
|
||||||
|
|
||||||
|
if [[ "$IPC_ENABLED" = true ]] && [[ -n "${ALETH_PID}" ]]
|
||||||
|
then
|
||||||
|
safe_kill $ALETH_PID $ALETH_PATH
|
||||||
|
fi
|
||||||
|
if [[ -n "$CMDLINE_PID" ]]
|
||||||
|
then
|
||||||
|
safe_kill $CMDLINE_PID "Commandline tests"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Cleaning up working directory ${WORKDIR} ..."
|
||||||
|
rm -rf "$WORKDIR" || true
|
||||||
|
}
|
||||||
|
trap cleanup INT TERM
|
||||||
|
|
||||||
if [ "$1" = --junit_report ]
|
if [ "$1" = --junit_report ]
|
||||||
then
|
then
|
||||||
if [ -z "$2" ]
|
if [ -z "$2" ]
|
||||||
@ -57,12 +104,13 @@ function printError() { echo "$(tput setaf 1)$1$(tput sgr0)"; }
|
|||||||
function printTask() { echo "$(tput bold)$(tput setaf 2)$1$(tput sgr0)"; }
|
function printTask() { echo "$(tput bold)$(tput setaf 2)$1$(tput sgr0)"; }
|
||||||
|
|
||||||
printTask "Running commandline tests..."
|
printTask "Running commandline tests..."
|
||||||
|
# Only run in parallel if this is run on CI infrastructure
|
||||||
|
if [[ -n "$CI" ]]
|
||||||
|
then
|
||||||
"$REPO_ROOT/test/cmdlineTests.sh" &
|
"$REPO_ROOT/test/cmdlineTests.sh" &
|
||||||
CMDLINE_PID=$!
|
CMDLINE_PID=$!
|
||||||
# Only run in parallel if this is run on CI infrastructure
|
else
|
||||||
if [ -z "$CI" ]
|
if ! $REPO_ROOT/test/cmdlineTests.sh
|
||||||
then
|
|
||||||
if ! wait $CMDLINE_PID
|
|
||||||
then
|
then
|
||||||
printError "Commandline tests FAILED"
|
printError "Commandline tests FAILED"
|
||||||
exit 1
|
exit 1
|
||||||
@ -102,10 +150,10 @@ function download_aleth()
|
|||||||
# echos the PID
|
# echos the PID
|
||||||
function run_aleth()
|
function run_aleth()
|
||||||
{
|
{
|
||||||
$ALETH_PATH --test -d "$1" >/dev/null 2>&1 &
|
$ALETH_PATH --test -d "${WORKDIR}" >/dev/null 2>&1 &
|
||||||
echo $!
|
echo $!
|
||||||
# Wait until the IPC endpoint is available.
|
# Wait until the IPC endpoint is available.
|
||||||
while [ ! -S "$1"/geth.ipc ] ; do sleep 1; done
|
while [ ! -S "${WORKDIR}/geth.ipc" ] ; do sleep 1; done
|
||||||
sleep 2
|
sleep 2
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,7 +169,7 @@ if [ "$IPC_ENABLED" = true ];
|
|||||||
then
|
then
|
||||||
download_aleth
|
download_aleth
|
||||||
check_aleth
|
check_aleth
|
||||||
ALETH_PID=$(run_aleth /tmp/test)
|
ALETH_PID=$(run_aleth)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
progress="--show-progress"
|
progress="--show-progress"
|
||||||
@ -154,19 +202,15 @@ do
|
|||||||
log=--logger=JUNIT,test_suite,$log_directory/noopt_$vm.xml $testargs_no_opt
|
log=--logger=JUNIT,test_suite,$log_directory/noopt_$vm.xml $testargs_no_opt
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
"$REPO_ROOT"/build/test/soltest $progress $log -- --testpath "$REPO_ROOT"/test "$optimize" --evm-version "$vm" $SMT_FLAGS $IPC_FLAGS --ipcpath /tmp/test/geth.ipc
|
"$REPO_ROOT"/build/test/soltest $progress $log -- --testpath "$REPO_ROOT"/test "$optimize" --evm-version "$vm" $SMT_FLAGS $IPC_FLAGS --ipcpath "${WORKDIR}/geth.ipc"
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
|
||||||
if ! wait $CMDLINE_PID
|
if [[ -n $CMDLINE_PID ]] && ! wait $CMDLINE_PID
|
||||||
then
|
then
|
||||||
printError "Commandline tests FAILED"
|
printError "Commandline tests FAILED"
|
||||||
|
CMDLINE_PID=
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$IPC_ENABLED" = true ]
|
cleanup
|
||||||
then
|
|
||||||
pkill "$ALETH_PID" || true
|
|
||||||
sleep 4
|
|
||||||
pgrep "$ALETH_PID" && pkill -9 "$ALETH_PID" || true
|
|
||||||
fi
|
|
||||||
|
Loading…
Reference in New Issue
Block a user