1
0
kill-child-jobs/test/test-kill-child-jobs.sh

73 lines
1.2 KiB
Bash
Executable File

#!/bin/sh
set -e
DIR="$(dirname "$0")"
SCRIPT="$1"
SHELL="$2"
if [ ! -x "$SCRIPT" ]
then
>&2 echo "First argument should be file with kill_child_jobs() function to test."
exit 1
fi
if ! command -v "$SHELL" >/dev/null
then
>&2 echo "Second argument should be shell to test."
exit 1
fi
TMP="$(mktemp)"
# timeout code from https://stackoverflow.com/a/10028986
pidFile="$(mktemp)"
(
"$SHELL" "$DIR/make-and-kill-child-jobs.sh" "$SCRIPT" >"$TMP" 2>&1 || true
rm "$pidFile"
) &
pid=$!
echo $pid > "$pidFile"
(
sleep 1
if [ -e "$pidFile" ]
then
pkill -P $pid
printf '∞'
fi
) &
killerPid=$!
wait $pid
kill $killerPid 2>/dev/null || true
rm -f "$pidFile" || true
# Make sure we've waited long enough for the "outlived" messages to be generated.
sleep 0.1s
if grep -q '^shell does not support disown$' "$TMP"
then
printf 'X'
fi
if ! grep -q '^disowned outlived parent.$' "$TMP"
then
# disowned should have outlived parent
EXITCODE=2
printf '☠'
elif grep -q '^job outlived parent.$' "$TMP"
then
# job should not outlive parent
EXITCODE=3
printf '🏃'
else
# all good
EXITCODE=0
printf '✔️'
fi
rm -f "$TMP"
exit $EXITCODE