diff --git a/t/sharness.d/flux-sharness.sh b/t/sharness.d/flux-sharness.sh index 5d5098f2fd14..8d873d6c0b84 100644 --- a/t/sharness.d/flux-sharness.sh +++ b/t/sharness.d/flux-sharness.sh @@ -10,6 +10,47 @@ run_timeout() { perl -e 'use Time::HiRes qw( ualarm ) ; ualarm ((shift @ARGV) * 1000000) ; exec @ARGV or die "$!"' "$@" } +# +# Replace sharness _test_eval function to provide a global timeout +# + +die_on_alarm() { + kill -9 $! > /dev/null 2>&1 # kill currently executing command + echo "Top-level test timed out" +} + +test_eval_() { + ( # start a subshell in the background to provide a timeout + set -e + parent_pid=$$ + i=0 + while kill -0 $parent_pid ; do + sleep 1 + if test "$i" -gt ${FLUX_TEST_TIMEOUT:-120} ; then + break + fi + i=$(($i+1)) + done + kill -ALRM $$ # send ALRM to parent + ) & + ALRM=$! + trap die_on_alarm ALRM + # This is a separate function because some tests use + # "return" to end a test_expect_success block early. + case ",$test_prereq," in + *,INTERACTIVE,*) + eval "$*" + ;; + *) + eval &3 2>&4 "$*" + ;; + esac + ret=$? + trap - ALRM + kill $ALRM >/dev/null 2>&1 + return $ret +} + # # Echo on stdout a reasonable size for a large test session, # controllable test-wide via env vars FLUX_TEST_SIZE_MIN and diff --git a/t/sharness.sh b/t/sharness.sh index 157adcb474a0..c9f2bcac40fe 100644 --- a/t/sharness.sh +++ b/t/sharness.sh @@ -325,27 +325,7 @@ test_pause() { fi } -die_on_alarm() { - kill -9 $! > /dev/null 2>&1 # kill currently executing command - echo "Top-level test timed out" -} - test_eval_() { - ( # start a subshell in the background to provide a timeout - set -e - parent_pid=$$ - i=0 - while kill -0 $parent_pid ; do - sleep 1 - if test "$i" -gt ${FLUX_TEST_TIMEOUT:-120} ; then - break - fi - i=$(($i+1)) - done - kill -ALRM $$ # send ALRM to parent - ) & - ALRM=$! - trap die_on_alarm ALRM # This is a separate function because some tests use # "return" to end a test_expect_success block early. case ",$test_prereq," in @@ -356,10 +336,6 @@ test_eval_() { eval &3 2>&4 "$*" ;; esac - ret=$? - trap - ALRM - kill $ALRM >/dev/null 2>&1 - return $ret } test_run_() {