]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
tests: avoid false failure in a tail test under load
authorPádraig Brady <P@draigBrady.com>
Thu, 15 Oct 2015 02:16:50 +0000 (03:16 +0100)
committerPádraig Brady <P@draigBrady.com>
Thu, 15 Oct 2015 07:44:09 +0000 (08:44 +0100)
* tests/tail-2/follow-stdin.sh: Use the standard tail
testing framework to avoid the race seen under very high load,
and also test the non inotify case.
Reported by Jim Meyering

tests/tail-2/follow-stdin.sh

index f50dd726e8aeca1449a624a6d357d85651bbd8c7..ba740eeea8e49713056c1868c26624b01167a794 100755 (executable)
 . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
 print_ver_ tail
 
-echo line > exp || framework_failure_
+check_tail_output()
+{
+  local delay="$1"
+  grep "$tail_re" out ||
+    { sleep $delay; return 1; }
+}
+
+# Terminate any background tail process
+cleanup_() { kill $pid 2>/dev/null && wait $pid; }
+
+# Speedup the non inotify case
+fastpoll='-s.1 --max-unchanged-stats=1'
+
 echo line > in || framework_failure_
 
-timeout 1 tail -f < in > out 2> err
+for mode in '' '---disable-inotify'; do
+  echo line > exp || framework_failure_
+
+  tail $mode -f $fastpoll < in > out 2> err & pid=$!
 
-# tail from coreutils-7.5 would fail
-test $? = 124 || fail=1
+  # Wait up to 12.7s for output to appear:
+  tail_re='line' retry_delay_ check_tail_output .1 7 ||
+    { echo "$0: a: unexpected delay?"; cat out; fail=1; }
 
-# Ensure there was no error output.
-compare /dev/null err || fail=1
+  # Ensure there was no error output.
+  compare /dev/null err || fail=1
 
-# Ensure there was
-compare exp out || fail=1
+  cleanup_
+done
 
 Exit $fail