]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
tests: fail rather than infloop in tail's inotify-rotate test
authorJim Meyering <meyering@redhat.com>
Wed, 30 Jun 2010 15:10:07 +0000 (17:10 +0200)
committerJim Meyering <meyering@redhat.com>
Wed, 30 Jun 2010 16:12:12 +0000 (18:12 +0200)
* 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

index 51cd81bb1bc7713f6703af46ebdadd335326c66b..9a3933e83ecf781eae9769958b8cdd515e80979e 100755 (executable)
@@ -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