1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-03-09 15:50:02 +00:00

tests/signal.sh: slash sleeps by 10 to reduce a long wait

The signal.sh regression tests took over a minute and a half to
complete, so with the default three runs (for different locales)
they took about five minutes. Annoying and unnecessary. As ksh
supports floating point shell arithmetic plus a 'sleep' builtin
that supports fractional seconds, this is easy to fix.

src/cmd/ksh93/tests/signal.sh:
- Slash all the 'sleep' arguments and associated factors by a
  factor of 10. Since computers are now hundreds or thousands of
  times faster than they were in the early 1990s, this should be
  plenty safe enough and all the tests should still be valid.
- Change one unportable direct invocation of /bin/sleep to use the
  builtin.

(cherry picked from commit 734e5953650e9a62048c45eb9a3b827bb9efcfb5)
This commit is contained in:
Martijn Dekker 2020-06-08 16:12:23 +02:00
parent d024d4c895
commit 8f90d98280

View file

@ -70,7 +70,7 @@ done
[[ $(<out2) == $'PIPED\nPIPED' ]] || err_exit 'SIGPIPE output on standard error is not correct' [[ $(<out2) == $'PIPED\nPIPED' ]] || err_exit 'SIGPIPE output on standard error is not correct'
) & ) &
cop=$! cop=$!
{ sleep 4; kill $cop; } 2>/dev/null & { sleep .4; kill $cop; } 2>/dev/null &
spy=$! spy=$!
if wait $cop 2>/dev/null if wait $cop 2>/dev/null
then kill $spy 2>/dev/null then kill $spy 2>/dev/null
@ -80,9 +80,9 @@ wait
rm -f out2 rm -f out2
[[ $( trap 'print -n got_child' SIGCHLD [[ $( trap 'print -n got_child' SIGCHLD
sleep 2 & sleep .2 &
for ((i=0; i < 4; i++)) for ((i=0; i < 4; i++))
do sleep .75 do sleep .075
print -n $i print -n $i
done) == 01got_child23 ]] || err_exit 'SIGCHLD not working' done) == 01got_child23 ]] || err_exit 'SIGCHLD not working'
@ -176,7 +176,7 @@ case $1 in
*v*) echo 1-main ;; *v*) echo 1-main ;;
esac esac
{ {
sleep 2 sleep .2
case $1 in case $1 in
*v*) echo "SIGINT" ;; *v*) echo "SIGINT" ;;
esac esac
@ -197,7 +197,7 @@ case $1 in
*) $2 -c "tst-2 $1 $2"; status=$? ;; *) $2 -c "tst-2 $1 $2"; status=$? ;;
esac esac
printf '1-%04d\n' $status printf '1-%04d\n' $status
sleep 2 sleep .2
! !
cat > tst-2 <<'!' cat > tst-2 <<'!'
case $1 in case $1 in
@ -230,13 +230,13 @@ printf '2-%04d\n' $status
cat > tst-3 <<'!' cat > tst-3 <<'!'
case $1 in case $1 in
*[xz]*) trap ' *[xz]*) trap '
sleep 2 sleep .2
echo 3-intr echo 3-intr
exit 0 exit 0
' INT ' INT
;; ;;
*) trap ' *) trap '
sleep 2 sleep .2
echo 3-intr echo 3-intr
trap - INT trap - INT
kill -s INT $$ kill -s INT $$
@ -246,7 +246,7 @@ esac
case $1 in case $1 in
*v*) echo 3-main ;; *v*) echo 3-main ;;
esac esac
sleep 5 sleep .5
printf '3-%04d\n' $? printf '3-%04d\n' $?
! !
chmod +x tst tst-? chmod +x tst tst-?
@ -276,11 +276,11 @@ done < tst.got
if [[ ${SIG[USR1]} ]] if [[ ${SIG[USR1]} ]]
then float s=$SECONDS then float s=$SECONDS
[[ $(LC_ALL=C $SHELL -c 'trap "print SIGUSR1 ; exit 0" USR1; (trap "" USR1 ; exec kill -USR1 $$ & sleep 5); print done') == SIGUSR1 ]] || err_exit 'subshell ignoring signal does not send signal to parent' [[ $(LC_ALL=C $SHELL -c 'trap "print SIGUSR1 ; exit 0" USR1; (trap "" USR1 ; exec kill -USR1 $$ & sleep .5); print done') == SIGUSR1 ]] || err_exit 'subshell ignoring signal does not send signal to parent'
(( (SECONDS-s) < 4 )) && err_exit 'parent does not wait for child to complete before handling signal' (( (SECONDS-s) < .4 )) && err_exit 'parent does not wait for child to complete before handling signal'
((s = SECONDS)) ((s = SECONDS))
[[ $(LC_ALL=C $SHELL -c 'trap "print SIGUSR1 ; exit 0" USR1; (trap "exit" USR1 ; exec kill -USR1 $$ & sleep 5); print done') == SIGUSR1 ]] || err_exit 'subshell catching signal does not send signal to parent' [[ $(LC_ALL=C $SHELL -c 'trap "print SIGUSR1 ; exit 0" USR1; (trap "exit" USR1 ; exec kill -USR1 $$ & sleep .5); print done') == SIGUSR1 ]] || err_exit 'subshell catching signal does not send signal to parent'
(( SECONDS-s < 4 )) && err_exit 'parent completes early' (( SECONDS-s < .4 )) && err_exit 'parent completes early'
fi fi
yes() for ((;;)); do print y; done yes() for ((;;)); do print y; done
@ -291,10 +291,10 @@ yes() for ((;;)); do print y; done
bindate=$(whence -p date) "$SHELL" <<- EOF bindate=$(whence -p date) "$SHELL" <<- EOF
foo() { return 0; } foo() { return 0; }
trap foo EXIT trap foo EXIT
{ sleep 2; kill -$exp \$\$; sleep 3; kill -0 \$\$ && kill -KILL \$\$; } & { sleep .2; kill -$exp \$\$; sleep .3; kill -0 \$\$ && kill -KILL \$\$; } &
yes | yes |
while read yes while read yes
do ("\$bindate"; sleep .1) do ("\$bindate"; sleep .01)
done > /dev/null done > /dev/null
EOF EOF
} 2>> /dev/null } 2>> /dev/null
@ -304,50 +304,50 @@ yes() for ((;;)); do print y; done
done done
SECONDS=0 SECONDS=0
$SHELL 2> /dev/null -c 'sleep 2 && kill $$ & trap "print done; exit 3" EXIT; (sleep 5); print finished' > $tmp/sig $SHELL 2> /dev/null -c 'sleep .2 && kill $$ & trap "print done; exit 3" EXIT; (sleep .5); print finished' > $tmp/sig
e=$? e=$?
[[ $e == 3 ]] || err_exit "exit status failed -- expected 3, got $e" [[ $e == 3 ]] || err_exit "exit status failed -- expected 3, got $e"
x=$(<$tmp/sig) x=$(<$tmp/sig)
[[ $x == done ]] || err_exit "output failed -- expected 'done', got '$x'" [[ $x == done ]] || err_exit "output failed -- expected 'done', got '$x'"
(( SECONDS > 3.5 )) && err_exit "took $SECONDS seconds, expected around 2" (( SECONDS > .35 )) && err_exit "took $SECONDS seconds, expected around .2"
SECONDS=0 SECONDS=0
$SHELL 2> /dev/null -c 'sleep 2 && kill $$ & trap "print done; exit 3" EXIT; sleep 5; print finished' > $tmp/sig $SHELL 2> /dev/null -c 'sleep .2 && kill $$ & trap "print done; exit 3" EXIT; sleep .5; print finished' > $tmp/sig
e=$? e=$?
[[ $e == 3 ]] || err_exit "exit status failed -- expected 3, got $e" [[ $e == 3 ]] || err_exit "exit status failed -- expected 3, got $e"
x=$(<$tmp/sig) x=$(<$tmp/sig)
[[ $x == done ]] || err_exit "output failed -- expected 'done', got '$x'" [[ $x == done ]] || err_exit "output failed -- expected 'done', got '$x'"
(( SECONDS > 3.5 )) && err_exit "took $SECONDS seconds, expected around 2" (( SECONDS > .35 )) && err_exit "took $SECONDS seconds, expected around .2"
SECONDS=0 SECONDS=0
{ $SHELL 2> /dev/null -c 'sleep 2 && kill $$ & trap "print done; exit 3" EXIT; (sleep 5); print finished' > $tmp/sig ;} 2> /dev/null { $SHELL 2> /dev/null -c 'sleep .2 && kill $$ & trap "print done; exit 3" EXIT; (sleep .5); print finished' > $tmp/sig ;} 2> /dev/null
e=$? e=$?
[[ $e == 3 ]] || err_exit "exit status failed -- expected 3, got $e" [[ $e == 3 ]] || err_exit "exit status failed -- expected 3, got $e"
x=$(<$tmp/sig) x=$(<$tmp/sig)
[[ $x == done ]] || err_exit "output failed -- expected 'done', got '$x'" [[ $x == done ]] || err_exit "output failed -- expected 'done', got '$x'"
(( SECONDS > 3.5 )) && err_exit "took $SECONDS seconds, expected around 2" (( SECONDS > .35 )) && err_exit "took $SECONDS seconds, expected around .2"
SECONDS=0 SECONDS=0
{ $SHELL 2> /dev/null -c 'sleep 2 && kill $$ & trap "print done; exit 3" EXIT; sleep 5; print finished' > $tmp/sig ;} 2> /dev/null { $SHELL 2> /dev/null -c 'sleep .2 && kill $$ & trap "print done; exit 3" EXIT; sleep .5; print finished' > $tmp/sig ;} 2> /dev/null
e=$? e=$?
[[ $e == 3 ]] || err_exit "exit status failed -- expected 3, got $e" [[ $e == 3 ]] || err_exit "exit status failed -- expected 3, got $e"
x=$(<$tmp/sig) x=$(<$tmp/sig)
[[ $x == done ]] || err_exit "output failed -- expected 'done', got '$x'" [[ $x == done ]] || err_exit "output failed -- expected 'done', got '$x'"
(( SECONDS > 3.5 )) && err_exit "took $SECONDS seconds, expected around 2" (( SECONDS > .35 )) && err_exit "took $SECONDS seconds, expected around .2"
SECONDS=0 SECONDS=0
x=$($SHELL 2> /dev/null -c 'sleep 2 && kill $$ & trap "print done; exit 3" EXIT; (sleep 5); print finished') x=$($SHELL 2> /dev/null -c 'sleep .2 && kill $$ & trap "print done; exit 3" EXIT; (sleep .5); print finished')
e=$? e=$?
[[ $e == 3 ]] || err_exit "exit status failed -- expected 3, got $e" [[ $e == 3 ]] || err_exit "exit status failed -- expected 3, got $e"
[[ $x == done ]] || err_exit "output failed -- expected 'done', got '$x'" [[ $x == done ]] || err_exit "output failed -- expected 'done', got '$x'"
(( SECONDS > 3.5 )) && err_exit "took $SECONDS seconds, expected around 2" (( SECONDS > .35 )) && err_exit "took $SECONDS seconds, expected around .2"
SECONDS=0 SECONDS=0
x=$($SHELL 2> /dev/null -c 'sleep 2 && kill $$ & trap "print done; exit 3" EXIT; sleep 5; print finished') x=$($SHELL 2> /dev/null -c 'sleep .2 && kill $$ & trap "print done; exit 3" EXIT; sleep .5; print finished')
e=$? e=$?
[[ $e == 3 ]] || err_exit "exit status failed -- expected 3, got $e" [[ $e == 3 ]] || err_exit "exit status failed -- expected 3, got $e"
[[ $x == done ]] || err_exit "output failed -- expected 'done', got '$x'" [[ $x == done ]] || err_exit "output failed -- expected 'done', got '$x'"
(( SECONDS > 3.5 )) && err_exit "took $SECONDS seconds, expected around 2" (( SECONDS > .35 )) && err_exit "took $SECONDS seconds, expected around .2"
trap '' SIGBUS trap '' SIGBUS
[[ $($SHELL -c 'trap date SIGBUS; trap -p SIGBUS') ]] && err_exit 'SIGBUS should not have a trap' [[ $($SHELL -c 'trap date SIGBUS; trap -p SIGBUS') ]] && err_exit 'SIGBUS should not have a trap'
@ -360,9 +360,9 @@ trap -- - SIGBUS
{ {
trap 'trap - TERM; return' TERM trap 'trap - TERM; return' TERM
( sleep $1; kill -TERM $$ ) >/dev/null 2>&1 & ( sleep $1; kill -TERM $$ ) >/dev/null 2>&1 &
sleep 3 sleep .3
} }
timeout 1 timeout .1
print ok print ok
++EOF ++EOF
) )
@ -388,7 +388,7 @@ x=$(
$SHELL <<- \EOF $SHELL <<- \EOF
trap "print GNAW" URG trap "print GNAW" URG
print 1 print 1
( sleep 1 ; kill -URG $$ ; sleep 1 ; print S1 ; ) ( sleep .1 ; kill -URG $$ ; sleep .1 ; print S1 ; )
print 2 print 2
EOF EOF
) )
@ -399,7 +399,7 @@ then {
$SHELL <<- \EOF $SHELL <<- \EOF
trap : RTMIN trap : RTMIN
for ((i=0 ; i < 3 ; i++)) for ((i=0 ; i < 3 ; i++))
do sleep 1 do sleep .1
kill -RTMIN $$ 2> /dev/null kill -RTMIN $$ 2> /dev/null
done & done &
wait wait
@ -409,7 +409,7 @@ then {
{ {
$SHELL <<- \EOF $SHELL <<- \EOF
for ((i=0 ; i < 3 ; i++)) for ((i=0 ; i < 3 ; i++))
do sleep 1 do sleep .1
kill -RTMIN $$ 2> /dev/null kill -RTMIN $$ 2> /dev/null
done & done &
wait wait
@ -420,7 +420,7 @@ fi
function b function b
{ {
sleep 3 sleep .3
endb=1 endb=1
} }
@ -431,7 +431,7 @@ function a
enda=1 enda=1
} }
{ /bin/sleep 1;kill -s TERM $$;}& { sleep .1;kill -s TERM $$;}&
unset enda endb unset enda endb
a a
[[ $endb ]] && err_exit 'TERM signal did not kill function b' [[ $endb ]] && err_exit 'TERM signal did not kill function b'