diff options
author | Pádraig Brady <P@draigBrady.com> | 2016-11-09 19:28:23 +0000 |
---|---|---|
committer | Pádraig Brady <P@draigBrady.com> | 2016-11-10 12:43:42 +0000 |
commit | 4d45722d1160a04e4d26fd812da4e0140ad3550c (patch) | |
tree | 7262a438a66980918a438e6103563c54b80bfbf0 /tests/tail-2/retry.sh | |
parent | 659060233ff2cff324be5cf4cc40b782068d45fd (diff) | |
download | coreutils-4d45722d1160a04e4d26fd812da4e0140ad3550c.tar.xz |
tail: only retry file open if --retry specifed
* src/tail.c (tail_file): On failure to open a file,
set ignore=true when --retry is not specified.
* tests/tail-2/assert-2.sh: Adjust to the new behavior.
* tests/tail-2/retry.sh: Add a test case. Also change
from `tail ... && fail=1` to the more robust `returns_ 1 ...`
construct which detects segfaults etc.
* NEWS: Document the fix.
Diffstat (limited to 'tests/tail-2/retry.sh')
-rwxr-xr-x | tests/tail-2/retry.sh | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/tests/tail-2/retry.sh b/tests/tail-2/retry.sh index 858909f65..782992356 100755 --- a/tests/tail-2/retry.sh +++ b/tests/tail-2/retry.sh @@ -51,7 +51,7 @@ grep -F 'tail: warning: --retry ignored' out || { cat out; fail=1; } # === Test: # The same with a missing file: expect error message and exit 1. -tail --retry missing > out 2>&1 && fail=1 +returns_ 1 tail --retry missing > out 2>&1 || fail=1 [ "$(countlines_)" = 2 ] || { cat out; fail=1; } grep -F 'tail: warning: --retry ignored' out || { cat out; fail=1; } @@ -123,17 +123,35 @@ grep -F 'no files remaining' out || { fail=1; cat out; } rm -fd missing out || framework_failure_ # === Test: +# Ensure that --follow=descriptor (without --retry) does *not* try +# to open a file after an initial fail, even when there are other +# tailable files. This was an issue in <= 8.25. +touch existing || framework_failure_ +tail $mode $fastpoll --follow=descriptor missing existing >out 2>&1 & pid=$! +retry_delay_ wait4lines_ .1 6 2 || { cat out; fail=1; } +[ "$(countlines_)" = 2 ] || { fail=1; cat out; } +grep -F 'cannot open' out || { fail=1; cat out; } +echo "Y" > missing || framework_failure_ +echo "X" > existing || framework_failure_ +retry_delay_ wait4lines_ .1 6 3 || { cat out; fail=1; } +[ "$(countlines_)" = 3 ] || { fail=1; cat out; } +grep '^X$' out || { fail=1; cat out; } +grep '^Y$' out && { fail=1; cat out; } +cleanup_ +rm -f missing out existing || framework_failure_ + +# === Test: # Ensure that --follow=descriptor (without --retry) does *not wait* for the # file to appear. Expect 2 lines in the output file ("cannot open" + # "no files remaining") and exit status 1. -tail $mode --follow=descriptor missing >out 2>&1 && fail=1 +returns_ 1 tail $mode --follow=descriptor missing >out 2>&1 || fail=1 [ "$(countlines_)" = 2 ] || { fail=1; cat out; } grep -F 'cannot open' out || { fail=1; cat out; } grep -F 'no files remaining' out || { fail=1; cat out; } # === Test: # Likewise for --follow=name (without --retry). -tail $mode --follow=name missing >out 2>&1 && fail=1 +returns_ 1 tail $mode --follow=name missing >out 2>&1 || fail=1 [ "$(countlines_)" = 2 ] || { fail=1; cat out; } grep -F 'cannot open' out || { fail=1; cat out; } grep -F 'no files remaining' out || { fail=1; cat out; } |