summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPádraig Brady <P@draigBrady.com>2025-11-14 17:03:38 +0000
committerPádraig Brady <P@draigBrady.com>2025-11-17 14:50:04 +0000
commiteebe2abbb6a582550d88d0ee74be4d4f0bf253bd (patch)
tree42ab0594499ede8066c95a062a5829b8fedc1143
parentd611bcbffff10b09fb98923ed1645620c2086e75 (diff)
downloadcoreutils-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.cfg25
-rwxr-xr-xtests/tail/inotify-dir-recreate.sh12
-rwxr-xr-xtests/tail/inotify-only-regular.sh3
-rwxr-xr-xtests/tail/inotify-race.sh4
-rwxr-xr-xtests/tail/inotify-race2.sh4
5 files changed, 26 insertions, 22 deletions
diff --git a/init.cfg b/init.cfg
index 982418900..f0fd9e4bb 100644
--- a/init.cfg
+++ b/init.cfg
@@ -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_() {