view tests/testlib/wait-on-file @ 44818:9d7d53771e5f stable

tests: fix timer scaling in wait-on-file When using the default test timeouts, wait-on-file would not wait for $n seconds, but $n/100 seconds. This resulted in easy timeouts on even moderately busy fast machines. Fix the scaling to apply in all cases. Adjust the stepping slightly to be nicer to systems with the historic 100Hz time base to ensure that the scheduler actually switches to a different process and gives them time to work. Differential Revision: https://phab.mercurial-scm.org/D8505
author Joerg Sonnenberger <joerg@bec.de>
date Thu, 07 May 2020 23:40:05 +0200
parents f727939f3513
children a68b37524d50
line wrap: on
line source

#!/bin/sh
#
# wait up to TIMEOUT seconds until a WAIT_ON_FILE is created.
#
# In addition, this script can create CREATE_FILE once it is ready to wait.

if [ $# -lt 2 ] || [ $# -gt 3 ]; then
    echo $#
    echo "USAGE: $0 TIMEOUT WAIT_ON_FILE [CREATE_FILE]"
fi

timer="$1"

# Scale the timeout to match the sleep steps below, i.e. 1/0.02.
timer=$(( 50 * $timer ))
# If the test timeout have been extended, also scale the timer relative
# to the normal timing.
if [ "$HGTEST_TIMEOUT_DEFAULT" -lt "$HGTEST_TIMEOUT" ]; then
    timer=$(( ( $timer * $HGTEST_TIMEOUT) / $HGTEST_TIMEOUT_DEFAULT ))
fi

wait_on="$2"
create=""
if [ $# -eq 3 ]; then
    create="$3"
fi

if [ -n "$create" ]; then
    touch "$create"
    create=""
fi
while [ "$timer" -gt 0 ] && [ ! -f "$wait_on" ]; do
    timer=$(( $timer - 1))
    sleep 0.02
done
if [ "$timer" -le 0 ]; then
    echo "file not created after $1 seconds: $wait_on" >&2
    exit 1
fi