commit cd6327820a75f6073830468f56ca652ba7e9152a Author: Pádraig Brady 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