From: Jim Meyering Date: Wed, 30 Jun 2010 15:10:07 +0000 (+0200) Subject: tests: fail rather than infloop in tail's inotify-rotate test X-Git-Tag: v8.6~129 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7336920dd07478b7bdae05ec599da4e2e66a94ff;p=platform%2Fupstream%2Fcoreutils.git 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". --- 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