Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 26 additions & 17 deletions adapter-tests/v1/runner.sh
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,22 @@ fixture_root=$(CDPATH='' cd -P -- "$fixture_root" && pwd -P) || runner_error E_F
[ -d "$fixture_root/scratch" ] && [ -d "$fixture_root/target/.git" ] || runner_error E_FIXTURE

run_tmp=$(/usr/bin/mktemp -d "$fixture_root/scratch/run.XXXXXX") || runner_error
cleanup() { /bin/rm -rf -- "$run_tmp"; }
cleanup() {
if [ -n "${run_tmp:-}" ]; then
/bin/rm -rf -- "$run_tmp"
fi
}
ACTIVE_CHILD_GROUP=''
ACTIVE_CHILD_PID=''
SIGNAL_DEFER=0
SIGNAL_EXITING=0
PENDING_SIGNAL_STATUS=0
group_alive() {
[[ "${1:-}" =~ ^[1-9][0-9]*$ ]] && kill -0 -- "-$1" 2>/dev/null
}
terminate_active_group() {
local group=$ACTIVE_CHILD_GROUP
local leader=$ACTIVE_CHILD_PID
local group=${ACTIVE_CHILD_GROUP:-}
local leader=${ACTIVE_CHILD_PID:-}
local tick
if [[ "$group" =~ ^[1-9][0-9]*$ ]]; then
kill -TERM -- "-$group" 2>/dev/null || :
Expand All @@ -57,22 +63,26 @@ terminate_active_group() {
ACTIVE_CHILD_PID=''
}
signal_exit() {
local status=$1
local status=${1:-1}
trap '' HUP INT TERM
trap - EXIT
exec >/dev/null 2>&1
terminate_active_group
cleanup
exit "$status"
}
record_pending_signal() { PENDING_SIGNAL_STATUS=$1; }
install_normal_signal_handlers() {
trap 'signal_exit 129' HUP
trap 'signal_exit 130' INT
trap 'signal_exit 143' TERM
handle_signal() {
[ "${SIGNAL_EXITING:-0}" -eq 0 ] || return 0
local status=${1:-1}
PENDING_SIGNAL_STATUS=$status
[ "${SIGNAL_DEFER:-0}" -eq 0 ] || return 0
SIGNAL_EXITING=1
signal_exit "$status"
}
trap cleanup EXIT
install_normal_signal_handlers
trap 'handle_signal 129' HUP
trap 'handle_signal 130' INT
trap 'handle_signal 143' TERM
/bin/mkdir -m 700 "$run_tmp/home"

sha_file() { /usr/bin/shasum -a 256 "$1" | /usr/bin/awk '{print $1}'; }
Expand Down Expand Up @@ -346,14 +356,12 @@ run_child() {
CHILD_STATUS=0
CHILD_ERROR=''
/bin/mkdir -m 700 "$child_home"
if [ -n "$ACTIVE_CHILD_GROUP" ] || [ -n "$ACTIVE_CHILD_PID" ]; then
if [ -n "${ACTIVE_CHILD_GROUP:-}" ] || [ -n "${ACTIVE_CHILD_PID:-}" ]; then
CHILD_ERROR=E_RUNTIME
return 1
fi
PENDING_SIGNAL_STATUS=0
trap 'record_pending_signal 129' HUP
trap 'record_pending_signal 130' INT
trap 'record_pending_signal 143' TERM
SIGNAL_DEFER=1
set -m
(
ulimit -t 2 -f 2048 -n 64
Expand All @@ -372,10 +380,11 @@ run_child() {
ACTIVE_CHILD_GROUP=$pid
ACTIVE_CHILD_PID=$pid
set +m
install_normal_signal_handlers
pending_status=$PENDING_SIGNAL_STATUS
SIGNAL_DEFER=0
pending_status=${PENDING_SIGNAL_STATUS:-0}
PENDING_SIGNAL_STATUS=0
if [ "$pending_status" -ne 0 ]; then
SIGNAL_EXITING=1
signal_exit "$pending_status"
fi
while kill -0 "$pid" 2>/dev/null; do
Expand All @@ -388,7 +397,7 @@ run_child() {
/bin/sleep 0.05
done
wait "$pid" || CHILD_STATUS=$?
if group_alive "$ACTIVE_CHILD_GROUP"; then
if group_alive "${ACTIVE_CHILD_GROUP:-}"; then
terminate_active_group
CHILD_ERROR=E_DESCENDANT
return 1
Expand Down