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 specified directory is on a local file system.
(require_local_dir_): A new function to skip tests
if the current directory is not on a local file system.
* 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/.
This commit is contained in:
Pádraig Brady 2010-09-02 13:22:41 +01:00
parent 0e295c88bc
commit 437671accc
13 changed files with 41 additions and 22 deletions

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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`

View File

@ -56,6 +56,18 @@ require_acl_()
|| skip_test_ "This test requires a local user named bin."
}
is_local_dir_()
{
test $# = 1 || framework_failure
df --local "$1" >/dev/null 2>&1
}
require_local_dir_()
{
is_local_dir_ . ||
skip_test_ "This test must be run on a local file system."
}
# Skip this test if we're not in SELinux "enforcing" mode.
require_selinux_enforcing_()
{

View File

@ -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

View File

@ -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],

View File

@ -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

View File

@ -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