Subject: Re: bug#6547: GNU coreutils 8.5 "make check" => tests/test-suite.log 8 of 365 tests failed
From: Pádraig Brady <[email-masked]>
To: Jim Meyering <[email-masked]>
Cc: [email-masked]
Date: Mon, 06 Sep 2010 22:59:05 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

On 02/09/10 13:50, Jim Meyering wrote:

> Thanks!  That looks right.
> However at least 3 more tests can use one of the new functions
> in place of existing df --local uses:
> (yeah, depending on your font size, "..." without the quotes,
> can be almost invisible)

I'll apply the attached in the morning sometime.

>   tests/ls/readdir-mountpoint-inode

About that one actually. I think it only uses --local
to minimise the chances of the subsequent stat hanging?
If that's the case I can remove the --local and use
`timeout 1 stat ...`

cheers,
Pádraig.
commit cd6327820a75f6073830468f56ca652ba7e9152a
Author: Pádraig Brady <[email-masked]>
Date:   Thu Sep 2 13:22:41 2010 +0100

    tests: exclude some tests when running on NFS
    
    All tests currently pass on NFS on Linux kernel 2.6.22 at least,
    but some fail on 2.6.9, so we exclude those here.
    
    * tests/init.cfg (is_local_dir_): A new function
    returning if the current directory is on a local file system.
    (require_local_dir_): A new function to skip tests
    if not on a local dir.
    * tests/cp/existing-perm-race: Skip if non local.
    * tests/cp/file-perm-race: Likewise.
    * tests/cp/parent-perm: Likewise.
    * tests/cp/parent-perm-race: Likewise.
    * tests/cp/preserve-2: Likewise.
    * tests/mv/part-symlink: Likewise.
    * tests/du/basic: Use refactored function.
    * tests/install/basic-1: Likewise.
    * tests/mkdir/p-3: Likewise.
    * tests/dd/skip-seek-past-dev: Likewise.
    * tests/du/slink: Likewise.  Remove redundant test
    for NFS file system.
    * tests/misc/join: s/local/locale/.

diff --git a/tests/cp/existing-perm-race b/tests/cp/existing-perm-race
index b6168f6..ffd29f0 100755
--- a/tests/cp/existing-perm-race
+++ b/tests/cp/existing-perm-race
@@ -22,8 +22,12 @@ if test "$VERBOSE" = yes; then
 fi
 
 . $srcdir/test-lib.sh
+
 require_membership_in_two_groups_
 
+# cp -p gives ENOTSUP on NFS on Linux 2.6.9 at least
+require_local_dir_
+
 set _ $groups; shift
 g1=$1
 g2=$2
diff --git a/tests/cp/file-perm-race b/tests/cp/file-perm-race
index ca47169..d807612 100755
--- a/tests/cp/file-perm-race
+++ b/tests/cp/file-perm-race
@@ -23,6 +23,9 @@ fi
 
 . $srcdir/test-lib.sh
 
+# cp -p gives ENOTSUP on NFS on Linux 2.6.9 at least
+require_local_dir_
+
 umask 022
 mkfifo fifo ||
   skip_test_ "fifos not supported"
diff --git a/tests/cp/parent-perm b/tests/cp/parent-perm
index 4912694..4a7d989 100755
--- a/tests/cp/parent-perm
+++ b/tests/cp/parent-perm
@@ -24,6 +24,8 @@ fi
 . $srcdir/test-lib.sh
 
 working_umask_or_skip_
+# cp -p gives ENOTSUP on NFS on Linux 2.6.9 at least
+require_local_dir_
 
 mkdir -p a/b/c a/b/d e || framework_failure
 touch a/b/c/foo a/b/d/foo || framework_failure
diff --git a/tests/cp/parent-perm-race b/tests/cp/parent-perm-race
index 5461238..e595d9e 100755
--- a/tests/cp/parent-perm-race
+++ b/tests/cp/parent-perm-race
@@ -23,6 +23,9 @@ fi
 
 . $srcdir/test-lib.sh
 
+# cp -p gives ENOTSUP on NFS on Linux 2.6.9 at least
+require_local_dir_
+
 umask 002
 mkdir mode ownership d || framework_failure
 chmod g+s d 2>/dev/null # The cp test is valid either way.
diff --git a/tests/cp/preserve-2 b/tests/cp/preserve-2
index f65b420..9863952 100755
--- a/tests/cp/preserve-2
+++ b/tests/cp/preserve-2
@@ -23,8 +23,10 @@ fi
 
 . $srcdir/test-lib.sh
 
-touch f || framework_failure
+# cp -p gives ENOTSUP on NFS on Linux 2.6.9 at least
+require_local_dir_
 
+touch f || framework_failure
 
 cp --preserve=mode,links f g || fail=1
 
diff --git a/tests/dd/skip-seek-past-dev b/tests/dd/skip-seek-past-dev
index c5b7aab..9e910e8 100755
--- a/tests/dd/skip-seek-past-dev
+++ b/tests/dd/skip-seek-past-dev
@@ -23,9 +23,10 @@ fi
 
 . $srcdir/test-lib.sh
 
-# need write access to device
+# need write access to local device
 # (even though we don't actually write anything)
 require_root_
+require_local_dir_
 
 get_device_size() {
   BLOCKDEV=blockdev
@@ -36,8 +37,7 @@ get_device_size() {
 
 # Get path to device the current dir is on.
 # Note df can only get fs size, not device size.
-device=$(df -P --local . | tail -n1 | cut -d' ' -f1) ||
-  skip_test_ 'this test runs only on local file systems'
+device=$(df -P . | tail -n1 | cut -d' ' -f1) || framework_failure
 
 dev_size=$(get_device_size "$device") ||
   skip_test_ "failed to determine size of $device"
diff --git a/tests/du/basic b/tests/du/basic
index 8b72853..02deb1d 100755
--- a/tests/du/basic
+++ b/tests/du/basic
@@ -63,7 +63,7 @@ compare out exp || fail=1
 
 # Perform this test only if "." is on a local file system.
 # Otherwise, it would fail e.g., on an NFS-mounted Solaris ZFS file system.
-if df --local . >/dev/null 2>&1; then
+if is_local_dir_; then
   rm -f out exp
   du --block-size=$B -a d | sort -r -k2,2 > out || fail=1
   echo === >> out
diff --git a/tests/du/slink b/tests/du/slink
index 2bb3757..5c2b125 100755
--- a/tests/du/slink
+++ b/tests/du/slink
@@ -24,14 +24,9 @@ fi
 . $srcdir/test-lib.sh
 
 # Determine if `.' is on a local (would non-NFS be sufficient?) file system.
-# On at least some NFS implementations, symlinks never take up space,
-
-# So if this is a non-local file system, skip the test.
-if df --local . >/dev/null 2>&1; then
-  : # Ok.
-else
-  skip_test_ "\`.' is on a non-local file system"
-fi
+# At least on OSF/1 4.0d, when using an nfsv3 file system,
+# each created symlink can end up having a size of 0.
+require_local_dir_
 
 if df --type=xfs . >/dev/null 2>&1; then
   # At least on Irix-6.5.19, when using an xfs file system,
@@ -39,12 +34,6 @@ if df --type=xfs . >/dev/null 2>&1; then
   skip_test_ "\`.' is on an XFS file system"
 fi
 
-if df --type=nfsv3 . >/dev/null 2>&1; then
-  # At least on OSF/1 4.0d, when using an nfsv3 file system,
-  # each created symlink can end up having a size of 0.
-  skip_test_ "\`.' is on an NFS file system"
-fi
-
 symlink_name_lengths='1 15 16 31 32 59 60 63 64 127 128 255 256 511 512 1024'
 for len in $symlink_name_lengths; do
   name=`seq 1 $len|tr -c x y |head -c$len`
diff --git a/tests/init.cfg b/tests/init.cfg
index 232cb9b..ab18eb1 100644
--- a/tests/init.cfg
+++ b/tests/init.cfg
@@ -56,6 +56,17 @@ require_acl_()
     || skip_test_ "This test requires a local user named bin."
 }
 
+is_local_dir_()
+{
+  df --local . >/dev/null 2>&1
+}
+
+require_local_dir_()
+{
+  is_local_dir ||
+    skip_test_ "This test requires a local file system."
+}
+
 # Skip this test if we're not in SELinux "enforcing" mode.
 require_selinux_enforcing_()
 {
diff --git a/tests/install/basic-1 b/tests/install/basic-1
index 80c72d9..1af2b09 100755
--- a/tests/install/basic-1
+++ b/tests/install/basic-1
@@ -105,7 +105,7 @@ test -d xx/rel && fail=1
 # inaccessible parent.  coreutils 5.97 fails this test.
 # Perform this test only if "." is on a local file system.
 # Otherwise, it would fail e.g., on an NFS-mounted file system.
-if df --local . >/dev/null 2>&1; then
+if is_local_dir_; then
   mkdir -p sub1/d || fail=1
   (cd sub1/d && chmod a-r . && chmod a-rx .. &&
    ginstall -d "$iwd/xx/zz" rel/a rel/b) || fail=1
diff --git a/tests/misc/join b/tests/misc/join
index 0e34ba8..a319b94 100755
--- a/tests/misc/join
+++ b/tests/misc/join
@@ -135,7 +135,7 @@ my @tv = (
 
 # From Paul Eggert: fixed in 1.22n (this would fail on Solaris7,
 # with LC_ALL set to en_US).
-# Unfortunately, that Solaris7's en_US local folds case (making
+# Unfortunately, that Solaris7's en_US locale folds case (making
 # the first input file sorted) is not portable, so this test would
 # fail on e.g. Linux systems, because the input to join isn't sorted.
 # ['lc-collate', '', ["a 1a\nB 1B\n", "B 2B\n"], "B 1B 2B\n", 0],
diff --git a/tests/mkdir/p-3 b/tests/mkdir/p-3
index 6aa422a..945dcec 100755
--- a/tests/mkdir/p-3
+++ b/tests/mkdir/p-3
@@ -42,7 +42,7 @@ test -d "$p/b/b" && test -d "$p/z" || fail=1
 # whose parent is inaccessible.  coreutils 5.97 fails this test.
 # Perform this test only if "." is on a local file system.
 # Otherwise, it would fail e.g., on an NFS-mounted file system.
-if df --local . >/dev/null 2>&1; then
+if is_local_dir_; then
   (cd no-acce3s/d && chmod a-r . && chmod a-rx .. &&
       mkdir -p a/b "$p/b/c" d/e && test -d a/b && test -d d/e) || fail=1
   test -d "$p/b/c" || fail=1
diff --git a/tests/mv/part-symlink b/tests/mv/part-symlink
index 00c706b..3b8e442 100755
--- a/tests/mv/part-symlink
+++ b/tests/mv/part-symlink
@@ -27,6 +27,10 @@ fi
 cleanup_() { rm -rf "$other_partition_tmpdir"; }
 . "$abs_srcdir/other-fs-tmpdir"
 
+# On NFS on Linux 2.6.9 at least we get:
+# mv: preserving permissions for `rem_sl': Operation not supported
+require_local_dir_
+
 pwd_tmp=`pwd`
 
 # Unset CDPATH.  Otherwise, output from the `cd dir' command