From d44ae88199ebf44fe721c06621a7ffc442fa34be Mon Sep 17 00:00:00 2001 From: Bernhard Voelker Date: Sun, 10 Jan 2016 01:44:04 +0100 Subject: [PATCH] tests: fix races wrt output files of background processes At least the false positive in tail-2/follow-stdin.sh could be seen on a 4-core i5 system with -j8. Fix similar cases. too. * tests/tail-2/follow-stdin.sh: Empty the 'out' file in each iteration. Otherwise, under heavy system load, 'check_tail_output' would see the expected output from the previous round before tail would have the chance to come up in the background. While at it, move the creation of the 'exp' file out of the loop. * tests/dd/stats.sh: Empty the output file of the background process here, too. * tests/misc/cat-buf.sh: Likewise. * tests/misc/stdbuf.sh: Likewise. * tests/tail-2/wait.sh: Likewise. --- tests/dd/stats.sh | 2 ++ tests/misc/cat-buf.sh | 1 + tests/misc/stdbuf.sh | 2 ++ tests/tail-2/follow-stdin.sh | 3 ++- tests/tail-2/wait.sh | 2 +- 5 files changed, 8 insertions(+), 2 deletions(-) diff --git a/tests/dd/stats.sh b/tests/dd/stats.sh index e8bb5fa27a..182d5e7e73 100755 --- a/tests/dd/stats.sh +++ b/tests/dd/stats.sh @@ -38,6 +38,8 @@ cleanup_() } for open in '' '1'; do + > err || framework_failure_ + # Run dd with the fullblock iflag to avoid short reads # which can be triggered by reception of signals dd iflag=fullblock if=/dev/zero of=fifo count=50 bs=5000000 2>err & pid=$! diff --git a/tests/misc/cat-buf.sh b/tests/misc/cat-buf.sh index f12bb5bc11..a6960b566b 100755 --- a/tests/misc/cat-buf.sh +++ b/tests/misc/cat-buf.sh @@ -35,6 +35,7 @@ cat_buf_1() { local delay="$1" + > out || framework_failure_ dd count=1 if=fifo > out & pid=$! (echo 1; sleep $delay; echo 2) | cat -v > fifo wait $pid diff --git a/tests/misc/stdbuf.sh b/tests/misc/stdbuf.sh index a5331deff8..7b9aed5036 100755 --- a/tests/misc/stdbuf.sh +++ b/tests/misc/stdbuf.sh @@ -66,6 +66,7 @@ stdbuf_linebuffer() local delay="$1" printf '1\n' > exp + > out || framework_failure_ dd count=1 if=fifo > out 2> err & pid=$! (printf '1\n'; sleep $delay; printf '2\n') | stdbuf -oL uniq > fifo wait $pid @@ -80,6 +81,7 @@ stdbuf_unbuffer() # Ensure un buffering stdout takes effect printf '1\n' > exp + > out || framework_failure_ dd count=1 if=fifo > out 2> err & pid=$! (printf '1\n'; sleep $delay; printf '2\n') | stdbuf -o0 uniq > fifo wait $pid diff --git a/tests/tail-2/follow-stdin.sh b/tests/tail-2/follow-stdin.sh index 120cc3bbbc..a2f180428e 100755 --- a/tests/tail-2/follow-stdin.sh +++ b/tests/tail-2/follow-stdin.sh @@ -33,9 +33,10 @@ cleanup_() { kill $pid 2>/dev/null && wait $pid; } fastpoll='-s.1 --max-unchanged-stats=1' echo line > in || framework_failure_ +echo line > exp || framework_failure_ for mode in '' '---disable-inotify'; do - echo line > exp || framework_failure_ + > out || framework_failure_ tail $mode -f $fastpoll < in > out 2> err & pid=$! diff --git a/tests/tail-2/wait.sh b/tests/tail-2/wait.sh index bcb04858a8..008f9f55e9 100755 --- a/tests/tail-2/wait.sh +++ b/tests/tail-2/wait.sh @@ -72,7 +72,7 @@ if test "$HAVE_INOTIFY"; then { local delay="$1" - touch k || framework_failure_ + > k && > tail.out && > tail.err || framework_failure_ tail $fastpoll -F $mode k >tail.out 2>tail.err & pid=$! sleep $delay mv k l -- 2.47.2