From: Pádraig Brady Date: Fri, 17 Sep 2021 12:31:25 +0000 (+0100) Subject: tests: avoid rare race in tail-2/F-vs-rename.sh X-Git-Tag: v9.0~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f80c6c267d2915eaa7851e90b44eb0893a25e41d;p=thirdparty%2Fcoreutils.git tests: avoid rare race in tail-2/F-vs-rename.sh * tests/tail-2/F-vs-rename.sh: Keep stdout and stderr separate, so that interspersion doesn't impact regex checks. Also wait for each file's data to be printed to avoid multiple writes to a file to be printed in a single iteration, which would impact the regex checks. Also we refactor the check function, rather than repeatedly redefining variations. --- diff --git a/tests/tail-2/F-vs-rename.sh b/tests/tail-2/F-vs-rename.sh index 9313fd0b60..b26c9df268 100755 --- a/tests/tail-2/F-vs-rename.sh +++ b/tests/tail-2/F-vs-rename.sh @@ -21,11 +21,17 @@ . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src print_ver_ tail -check_tail_output() -{ +check_tail_output() { local delay="$1" - grep "$tail_re" out || - { sleep $delay; return 1; } + if [ "$tail_re" ]; then + grep "$tail_re" err || + { sleep $delay; return 1; } + else + local tail_re="==> $file <==@$data@" + tr '\n' @ < out | grep "$tail_re" > /dev/null || + { sleep $delay; return 1; } + fi + unset tail_re } # Terminate any background tail process @@ -35,14 +41,14 @@ cleanup_() { kill $pid 2>/dev/null && wait $pid; } fastpoll='-s.1 --max-unchanged-stats=1' for mode in '' '---disable-inotify'; do - rm -f a b out + rm -f a b out err touch a b || framework_failure_ - tail $mode -F $fastpoll a b > out 2>&1 & pid=$! + tail $mode -F $fastpoll a b >out 2>err & pid=$! # Wait up to 12.7s for tail to start. echo x > a - tail_re='^x$' retry_delay_ check_tail_output .1 7 || { cat out; fail=1; } + file=a data=x retry_delay_ check_tail_output .1 7 || { cat out; fail=1; } mv a b || framework_failure_ @@ -55,32 +61,28 @@ for mode in '' '---disable-inotify'; do # tail: 'b' has been replaced; following new file tail_re='replaced' retry_delay_ check_tail_output .1 7 || { cat out; fail=1; } + # Wait up to 12.7s for "x" to be displayed: + file='b' data='x' retry_delay_ check_tail_output .1 7 || + { echo "$0: b: unexpected delay?"; cat out; fail=1; } - echo x > a + echo x2 > a # Wait up to 12.7s for this to appear in the output: # "tail: '...' has appeared; following new file" tail_re='has appeared' retry_delay_ check_tail_output .1 7 || { echo "$0: a: unexpected delay?"; cat out; fail=1; } + # Wait up to 12.7s for "x2" to be displayed: + file='a' data='x2' retry_delay_ check_tail_output .1 7 || + { echo "$0: a: unexpected delay 2?"; cat out; fail=1; } echo y >> b # Wait up to 12.7s for "y" to appear in the output: - tail_f_vs_rename_2() { - local delay="$1" - tr '\n' @ < out | grep '@@==> b <==@y@$' > /dev/null || - { sleep $delay; return 1; } - } - retry_delay_ tail_f_vs_rename_2 .1 7 || - { echo "$0: b: unexpected delay?"; cat out; fail=1; } + file='b' data='y' retry_delay_ check_tail_output .1 7 || + { echo "$0: b: unexpected delay 2?"; cat out; fail=1; } echo z >> a # Wait up to 12.7s for "z" to appear in the output: - tail_f_vs_rename_3() { - local delay="$1" - tr '\n' @ < out | grep '@@==> a <==@z@$' > /dev/null || - { sleep $delay; return 1; } - } - retry_delay_ tail_f_vs_rename_3 .1 7 || - { echo "$0: a: unexpected delay?"; cat out; fail=1; } + file='a' data='z' retry_delay_ check_tail_output .1 7 || + { echo "$0: a: unexpected delay 3?"; cat out; fail=1; } cleanup_ done