From 7336920dd07478b7bdae05ec599da4e2e66a94ff Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Wed, 30 Jun 2010 17:10:07 +0200 Subject: [PATCH] tests: fail rather than infloop in tail's inotify-rotate test * tests/tail-2/inotify-rotate: Switch to new init.sh-based framework. (grep_timeout): New function. Use it in place of open-coded loops that might infloop. This was prompted by my encountering an inexplicable, and so far unreproducible, infloop in the code that was waiting for "b" to appear in "out". --- tests/tail-2/inotify-rotate | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/tests/tail-2/inotify-rotate b/tests/tail-2/inotify-rotate index 51cd81b..9a3933e 100755 --- a/tests/tail-2/inotify-rotate +++ b/tests/tail-2/inotify-rotate @@ -21,9 +21,21 @@ if test "$VERBOSE" = yes; then tail --version fi -. $srcdir/test-lib.sh +. "${srcdir=.}/init.sh"; path_prepend_ ../src expensive_ +# Wait up to 10 seconds for grep REGEXP FILE to succeed. +# Usage: grep_timeout REGEXP FILE +grep_timeout() +{ + local j + for j in $(seq 100); do + grep $1 $2 > /dev/null && return 0 + sleep 0.1 + done + return 1 +} + # For details, see # http://lists.gnu.org/archive/html/bug-coreutils/2009-11/msg00213.html @@ -37,17 +49,15 @@ for i in $(seq 50); do sleep .1 echo b > k; # wait for b to appear in out + grep_timeout b out || fail_ failed to find b in out while :; do grep b out > /dev/null && break; done mv x k # wait for tail to detect the rename - while :; do grep tail: out > /dev/null && break; done + grep_timeout tail: out || fail_ failed to detect rename echo ok >> k found=0 # wait up to 10 seconds for "ok" to appear in out - for j in $(seq 100); do - grep ok out > /dev/null && { found=1; break; } - sleep 0.1 - done + grep_timeout ok out && found=1 kill $pid test $found = 0 && { fail=1; cat out; break; } done -- 2.7.4