diff options
| author | Pádraig Brady <P@draigBrady.com> | 2025-11-14 17:03:38 +0000 |
|---|---|---|
| committer | Pádraig Brady <P@draigBrady.com> | 2025-11-17 14:50:04 +0000 |
| commit | eebe2abbb6a582550d88d0ee74be4d4f0bf253bd (patch) | |
| tree | 42ab0594499ede8066c95a062a5829b8fedc1143 | |
| parent | d611bcbffff10b09fb98923ed1645620c2086e75 (diff) | |
| download | coreutils-eebe2abbb6a582550d88d0ee74be4d4f0bf253bd.tar.gz coreutils-eebe2abbb6a582550d88d0ee74be4d4f0bf253bd.zip | |
tests: use tail --debug to determine inotify support
* init.cfg (require_inotify_supported_): A new function that
indicates inotify support for a file in the current directory,
using tail --debug, rather than awkward strace checks etc.
* tests/tail/inotify-dir-recreate.sh: Call require_inotify_supported_.
tests/tail/inotify-only-regular.sh: Likewise.
tests/tail/inotify-race.sh: Likewise.
tests/tail/inotify-race2.sh: Likewise.
| -rw-r--r-- | init.cfg | 25 | ||||
| -rwxr-xr-x | tests/tail/inotify-dir-recreate.sh | 12 | ||||
| -rwxr-xr-x | tests/tail/inotify-only-regular.sh | 3 | ||||
| -rwxr-xr-x | tests/tail/inotify-race.sh | 4 | ||||
| -rwxr-xr-x | tests/tail/inotify-race2.sh | 4 |
5 files changed, 26 insertions, 22 deletions
@@ -765,9 +765,6 @@ working_umask_or_skip_() # This example will call the dd_reblock_1 function with # an initial delay of .1 second and call it at most 6 times # with a max delay of 3.2s (doubled each time), or a total of 6.3s -# Note ensure you do _not_ quote the parameter to GNU sleep in -# your function, as it may contain separate values that sleep -# needs to accumulate. # Further function arguments will be forwarded to the test function. retry_delay_() { @@ -789,6 +786,28 @@ retry_delay_() test "$time_fail" = 0 } +detect_tail_mode_() +{ + touch tail.debug || framework_failure_ + returns_ 124 timeout "$1" tail -n0 -F --debug tail.debug 2>tail.mode || + framework_failure_ + grep 'using .* mode' tail.mode >/dev/null +} + +require_inotify_supported_() +{ + require_built_ tail timeout + + retry_delay_ detect_tail_mode_ .1 4 + + # This may skip because: + # inotify is not available in this build + # inotify is not supported on this file system + # tail didn't print the debug info within 1.5s (unlikely) + grep 'using notification mode' tail.mode >/dev/null || + skip_ 'inotify not detected' +} + # Call this with a list of programs under test immediately after # sourcing init.sh. print_ver_() diff --git a/tests/tail/inotify-dir-recreate.sh b/tests/tail/inotify-dir-recreate.sh index 569a3b1aa..f961c3346 100755 --- a/tests/tail/inotify-dir-recreate.sh +++ b/tests/tail/inotify-dir-recreate.sh @@ -20,17 +20,7 @@ . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src print_ver_ tail - -grep '^#define HAVE_INOTIFY 1' "$CONFIG_HEADER" >/dev/null && is_local_dir_ . \ - || skip_ 'inotify is not supported' - -# There may be a mismatch between is_local_dir_ (gnulib's remoteness check), -# and coreutils' is_local_fs_type(), so double check we're using inotify. -touch file.strace -require_strace_ 'inotify_add_watch' -returns_ 124 timeout .1 strace -e inotify_add_watch -o strace.out \ - tail -F file.strace || fail=1 -grep 'inotify' strace.out || skip_ 'inotify not detected' +require_inotify_supported_ # Terminate any background tail process cleanup_() { kill $pid 2>/dev/null && wait $pid; } diff --git a/tests/tail/inotify-only-regular.sh b/tests/tail/inotify-only-regular.sh index f1b63b3d8..69f6ec0d2 100755 --- a/tests/tail/inotify-only-regular.sh +++ b/tests/tail/inotify-only-regular.sh @@ -19,8 +19,7 @@ . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src print_ver_ tail -grep '^#define HAVE_INOTIFY 1' "$CONFIG_HEADER" >/dev/null \ - || skip_ 'inotify support required' +require_inotify_supported_ require_strace_ 'inotify_add_watch' diff --git a/tests/tail/inotify-race.sh b/tests/tail/inotify-race.sh index bb7df48f9..bec20d35d 100755 --- a/tests/tail/inotify-race.sh +++ b/tests/tail/inotify-race.sh @@ -22,9 +22,7 @@ . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src print_ver_ tail sleep - -grep '^#define HAVE_INOTIFY 1' "$CONFIG_HEADER" >/dev/null && is_local_dir_ . \ - || skip_ 'inotify is not supported' +require_inotify_supported_ # Terminate any background gdb/tail process cleanup_() { diff --git a/tests/tail/inotify-race2.sh b/tests/tail/inotify-race2.sh index 3db0cc74c..2a066b830 100755 --- a/tests/tail/inotify-race2.sh +++ b/tests/tail/inotify-race2.sh @@ -21,9 +21,7 @@ . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src print_ver_ tail sleep - -grep '^#define HAVE_INOTIFY 1' "$CONFIG_HEADER" >/dev/null && is_local_dir_ . \ - || skip_ 'inotify is not supported' +require_inotify_supported_ # Terminate any background gdb/tail process cleanup_() { |
