]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
tests: test old tail -f method even on systems with inotify
authorPádraig Brady <P@draigBrady.com>
Fri, 4 Sep 2009 20:41:30 +0000 (21:41 +0100)
committerPádraig Brady <P@draigBrady.com>
Sat, 5 Sep 2009 16:19:03 +0000 (17:19 +0100)
* src/tail.c (main): Add an undocumented ---disable-inotify option
to allow disabling inotify.
* tests/tail-2/pid: Run test in both normal and "disable_inotify" modes.
* tests/tail-2/tail-n0f: Likewise.
* tests/tail-2/wait: Likewise.
* tests/tail-2/append-only: Likewise.

src/tail.c
tests/tail-2/append-only
tests/tail-2/pid
tests/tail-2/tail-n0f
tests/tail-2/wait

index f0dbf5d5ef563434d4fa54df3e11e2a88b046e99..6077473c08f1c74c129a0f2b8bcc9a5e5a6e7dfb 100644 (file)
@@ -201,6 +201,10 @@ static bool have_read_stdin;
    more expensive) code unconditionally. Intended solely for testing.  */
 static bool presume_input_pipe;
 
+/* If nonzero then don't use inotify even if available.
+   Intended solely for testing.  */
+static bool disable_inotify;
+
 /* For long options that have no equivalent short option, use a
    non-character as a pseudo short option, starting with CHAR_MAX + 1.  */
 enum
@@ -209,7 +213,8 @@ enum
   MAX_UNCHANGED_STATS_OPTION,
   PID_OPTION,
   PRESUME_INPUT_PIPE_OPTION,
-  LONG_FOLLOW_OPTION
+  LONG_FOLLOW_OPTION,
+  DISABLE_INOTIFY_OPTION
 };
 
 static struct option const long_options[] =
@@ -218,6 +223,8 @@ static struct option const long_options[] =
   {"follow", optional_argument, NULL, LONG_FOLLOW_OPTION},
   {"lines", required_argument, NULL, 'n'},
   {"max-unchanged-stats", required_argument, NULL, MAX_UNCHANGED_STATS_OPTION},
+  {"-disable-inotify", no_argument, NULL,
+   DISABLE_INOTIFY_OPTION}, /* do not document */
   {"pid", required_argument, NULL, PID_OPTION},
   {"-presume-input-pipe", no_argument, NULL,
    PRESUME_INPUT_PIPE_OPTION}, /* do not document */
@@ -1794,6 +1801,10 @@ parse_options (int argc, char **argv,
             }
           break;
 
+        case DISABLE_INOTIFY_OPTION:
+          disable_inotify = true;
+          break;
+
         case PID_OPTION:
           {
             strtol_error s_err;
@@ -1972,15 +1983,18 @@ main (int argc, char **argv)
   if (forever)
     {
 #if HAVE_INOTIFY
-      int wd = inotify_init ();
-      if (wd < 0)
-        error (0, errno, _("inotify cannot be used, reverting to polling"));
-      else
+      if (!disable_inotify)
         {
-          tail_forever_inotify (wd, F, n_files, sleep_interval);
+          int wd = inotify_init ();
+          if (wd < 0)
+            error (0, errno, _("inotify cannot be used, reverting to polling"));
+          else
+            {
+              tail_forever_inotify (wd, F, n_files, sleep_interval);
 
-          /* The only way the above returns is upon failure.  */
-          exit (EXIT_FAILURE);
+              /* The only way the above returns is upon failure.  */
+              exit (EXIT_FAILURE);
+            }
         }
 #endif
       tail_forever (F, n_files, sleep_interval);
index 0b4a9595877cf47bdb005ae9c30cff3203e9079a..2d38d4f0f61a63800642029f35b1f2855627d780 100755 (executable)
@@ -37,9 +37,12 @@ fi
 
 fail=0
 
-sleep 1 &
-pid=$!
-tail --pid=$pid -f f || fail=1
+for inotify in ---disable-inotify ''; do
+  sleep 1 &
+  pid=$!
+  tail --pid=$pid -f $inotify f || fail=1
+done
+
 chattr -a f 2>/dev/null
 
 Exit $fail
index a797666fec5e00ce8fba2864054e116ddcdbdcaa..aaf2e01ba849e50bc98c5abf7c456a1947b28f93 100755 (executable)
@@ -22,32 +22,34 @@ if test "$VERBOSE" = yes; then
 fi
 
 . $srcdir/test-lib.sh
+getlimits_
 
 touch here || framework_failure
 
 fail=0
 
-# Use tail itself to create a background process to monitor.
-tail -f here &
-bg_pid=$!
-
-# Ensure that tail --pid=PID does not exit when PID is alive.
-timeout 1 tail -s.1 -f here --pid=$bg_pid
-test $? = 124 || fail=1
-
-# Cleanup background process
-kill $bg_pid
-
-# Ensure that tail --pid=PID exits successfully when PID is dead.
-# Use an unlikely-to-be-live PID
-getlimits_
-timeout 1 tail -s.1 --pid=$PID_T_MAX -f /dev/null
-ret=$?
-test $ret = 124 && skip_test_ "pid $PID_T_MAX present"
-test $ret = 0 || fail=1
-
-# Ensure fractional sleep parameter is honored with --pid
-timeout 1 tail -s.1 -f /dev/null --pid=$PID_T_MAX
-test $? = 124 && fail=1
+for inotify in ---disable-inotify ''; do
+  # Use tail itself to create a background process to monitor.
+  tail -f $inotify here &
+  bg_pid=$!
+
+  # Ensure that tail --pid=PID does not exit when PID is alive.
+  timeout 1 tail -s.1 -f $inotify here --pid=$bg_pid
+  test $? = 124 || fail=1
+
+  # Cleanup background process
+  kill $bg_pid
+
+  # Ensure that tail --pid=PID exits successfully when PID is dead.
+  # Use an unlikely-to-be-live PID
+  timeout 1 tail -s.1 --pid=$PID_T_MAX -f $inotify /dev/null
+  ret=$?
+  test $ret = 124 && skip_test_ "pid $PID_T_MAX present"
+  test $ret = 0 || fail=1
+
+  # Ensure fractional sleep parameter is honored with --pid
+  timeout 1 tail -s.1 -f $inotify /dev/null --pid=$PID_T_MAX
+  test $? = 124 && fail=1
+done
 
 Exit $fail
index fce7ed16ec50884f777a1f9ed796fd9e62d19ac5..ddfbe664579f4f09f054b3ba4642d6dcbfe035a5 100755 (executable)
@@ -35,17 +35,19 @@ echo anything > nonempty || framework_failure
 
 fail=0
 
-for file in empty nonempty; do
-  for c_or_n in c n; do
-    tail --sleep=4 -${c_or_n} 0 -f $file &
-    pid=$!
-    sleep .5
-    state=$(get_process_status_ $pid)
-    case $state in
-      S*) ;;
-      *) echo $0: process in unexpected state: $state 1>&2; fail=1 ;;
-    esac
-    kill $pid
+for inotify in ---disable-inotify ''; do
+  for file in empty nonempty; do
+    for c_or_n in c n; do
+      tail --sleep=4 -${c_or_n} 0 -f $inotify $file &
+      pid=$!
+      sleep .5
+      state=$(get_process_status_ $pid)
+      case $state in
+        S*) ;;
+        *) echo $0: process in unexpected state: $state 1>&2; fail=1 ;;
+      esac
+      kill $pid
+    done
   done
 done
 
index a5f189fe07a15f715204b001e39ae714b2bd7a73..62498d5dce588c0d2c48b439d646e9dbb1290a74 100755 (executable)
@@ -30,43 +30,48 @@ touch k || framework_failure
 
 fail=0
 
-timeout 1 tail -s0.1 -f not_here
-test $? = 124 && fail=1
-
-if test ! -r unreadable; then # can't test this when root
-  timeout 1 tail -s0.1 -f unreadable
+for inotify in ---disable-inotify ''; do
+  timeout 1 tail -s0.1 -f $inotify not_here
   test $? = 124 && fail=1
-fi
 
-timeout 1 tail -s0.1 -f here 2>tail.err
-test $? = 124 || fail=1
+  if test ! -r unreadable; then # can't test this when root
+    timeout 1 tail -s0.1 -f $inotify unreadable
+    test $? = 124 && fail=1
+  fi
 
-# `tail -F' must wait in any case.
+  timeout 1 tail -s0.1 -f $inotify here 2>tail.err
+  test $? = 124 || fail=1
 
-timeout 1 tail -s0.1 -F here 2>>tail.err
-test $? = 124 || fail=1
+  # `tail -F' must wait in any case.
 
-if test ! -r unreadable; then # can't test this when root
-  timeout 1 tail -s0.1 -F unreadable
+  timeout 1 tail -s0.1 -F $inotify here 2>>tail.err
   test $? = 124 || fail=1
-fi
 
-timeout 1 tail -s0.1 -F not_here
-test $? = 124 || fail=1
-
-test -s tail.err && fail=1
-
-tail -s.1 --max-unchanged-stats=2 -F k > tail.out &
-pid=$!
-sleep .5
-mv k l
-sleep .5
-touch k
-mv k l
-sleep .5
-echo NO >> l
-sleep .5
-kill $pid
-test -s tail.out && fail=1
+  if test ! -r unreadable; then # can't test this when root
+    timeout 1 tail -s0.1 -F $inotify unreadable
+    test $? = 124 || fail=1
+  fi
+
+  timeout 1 tail -s0.1 -F $inotify not_here
+  test $? = 124 || fail=1
+
+
+  test -s tail.err && fail=1
+  :>tail.err
+
+
+  tail -s.1 --max-unchanged-stats=2 -F $inotify k > tail.out &
+  pid=$!
+  sleep .5
+  mv k l
+  sleep .5
+  touch k
+  mv k l
+  sleep .5
+  echo NO >> l
+  sleep .5
+  kill $pid
+  test -s tail.out && fail=1
+done
 
 Exit $fail