summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2017-05-18 20:22:04 -0400
committerBrian Behlendorf <[email protected]>2017-05-22 12:34:42 -0400
commit5a6d6cf839fe547f2007912f60eac23827b4a8de (patch)
tree34d43ca143942efee917018fa2290b173dabc997
parent95401cb6f7aa9ec3dd2d61335d2dcc9459c2661c (diff)
Enable xattr tests
Updated the xattr_common.ksh helper functions to use the attr command on Linux to manipulate xattrs. Added an xattr.cfg file and reworked the user/group functionality to be consist with the existing delegate test cases. The intent of each test case was preserved. * xattr_001_pos, xattr_002_neg - Updated to verity xattr=on and xattr=sa sytle xattrs. * xattr_003_neg - Use user_run helper instead of su. * xattr_004_pos - Updated to work with ext2 xattrs. * xattr_007_neg - Updated to use attr instead of runat. * xattr_008_pos, xattr_009_neg8_pos, xattr_010_neg - Test cases disables since they aren't applicable to Linux. * xattr_011_pos - Updated to expected behavior from GNU versions of the tested utilities. * xattr_012_pos - Updated to use xattrtest to create many small xattrs instead of a single large one. * xattr_013_pos - Updated to use attr instead of runat. Signed-off-by: Brian Behlendorf <[email protected]> Closes #6128
-rw-r--r--tests/runfiles/linux.run10
-rw-r--r--tests/zfs-tests/tests/functional/xattr/Makefile.am1
-rwxr-xr-xtests/zfs-tests/tests/functional/xattr/cleanup.ksh7
-rwxr-xr-xtests/zfs-tests/tests/functional/xattr/setup.ksh33
-rw-r--r--tests/zfs-tests/tests/functional/xattr/xattr.cfg30
-rwxr-xr-xtests/zfs-tests/tests/functional/xattr/xattr_001_pos.ksh14
-rwxr-xr-xtests/zfs-tests/tests/functional/xattr/xattr_002_neg.ksh14
-rwxr-xr-xtests/zfs-tests/tests/functional/xattr/xattr_003_neg.ksh18
-rwxr-xr-xtests/zfs-tests/tests/functional/xattr/xattr_004_pos.ksh68
-rwxr-xr-xtests/zfs-tests/tests/functional/xattr/xattr_007_neg.ksh21
-rwxr-xr-xtests/zfs-tests/tests/functional/xattr/xattr_008_pos.ksh4
-rwxr-xr-xtests/zfs-tests/tests/functional/xattr/xattr_009_neg.ksh4
-rwxr-xr-xtests/zfs-tests/tests/functional/xattr/xattr_010_neg.ksh4
-rwxr-xr-xtests/zfs-tests/tests/functional/xattr/xattr_011_pos.ksh251
-rwxr-xr-xtests/zfs-tests/tests/functional/xattr/xattr_012_pos.ksh10
-rwxr-xr-xtests/zfs-tests/tests/functional/xattr/xattr_013_pos.ksh32
-rw-r--r--tests/zfs-tests/tests/functional/xattr/xattr_common.kshlib52
17 files changed, 387 insertions, 186 deletions
diff --git a/tests/runfiles/linux.run b/tests/runfiles/linux.run
index 55fdd5dbe..e83a9ed0f 100644
--- a/tests/runfiles/linux.run
+++ b/tests/runfiles/linux.run
@@ -547,11 +547,11 @@ tests = ['vdev_zaps_001_pos', 'vdev_zaps_002_pos', 'vdev_zaps_003_pos',
[tests/functional/write_dirs]
tests = ['write_dirs_001_pos', 'write_dirs_002_pos']
-#[tests/functional/xattr]
-#tests = ['xattr_001_pos', 'xattr_002_neg', 'xattr_003_neg', 'xattr_004_pos',
-# 'xattr_005_pos', 'xattr_006_pos', 'xattr_007_neg', 'xattr_008_pos',
-# 'xattr_009_neg', 'xattr_010_neg', 'xattr_011_pos', 'xattr_012_pos',
-# 'xattr_013_pos']
+[tests/functional/xattr]
+tests = ['xattr_001_pos', 'xattr_002_neg', 'xattr_003_neg', 'xattr_004_pos',
+ 'xattr_005_pos', 'xattr_006_pos', 'xattr_007_neg', 'xattr_008_pos',
+ 'xattr_009_neg', 'xattr_010_neg', 'xattr_011_pos', 'xattr_012_pos',
+ 'xattr_013_pos']
[tests/functional/zvol/zvol_ENOSPC]
tests = ['zvol_ENOSPC_001_pos']
diff --git a/tests/zfs-tests/tests/functional/xattr/Makefile.am b/tests/zfs-tests/tests/functional/xattr/Makefile.am
index ac2cb54b5..e404e84b1 100644
--- a/tests/zfs-tests/tests/functional/xattr/Makefile.am
+++ b/tests/zfs-tests/tests/functional/xattr/Makefile.am
@@ -3,6 +3,7 @@ dist_pkgdata_SCRIPTS = \
xattr_common.kshlib \
setup.ksh \
cleanup.ksh \
+ xattr.cfg \
xattr_001_pos.ksh \
xattr_002_neg.ksh \
xattr_003_neg.ksh \
diff --git a/tests/zfs-tests/tests/functional/xattr/cleanup.ksh b/tests/zfs-tests/tests/functional/xattr/cleanup.ksh
index 10cd733d2..5f0a84616 100755
--- a/tests/zfs-tests/tests/functional/xattr/cleanup.ksh
+++ b/tests/zfs-tests/tests/functional/xattr/cleanup.ksh
@@ -28,15 +28,14 @@
#
. $STF_SUITE/include/libtest.shlib
+. $STF_SUITE/tests/functional/xattr/xattr_common.kshlib
-ZFS_USER=$(cat /tmp/zfs-xattr-test-user.txt)
-rm /tmp/zfs-xattr-test-user.txt
+del_user $ZFS_USER
+del_group $ZFS_GROUP
USES_NIS=$(cat /tmp/zfs-xattr-test-nis.txt)
rm /tmp/zfs-xattr-test-nis.txt
-del_user $ZFS_USER
-
if [ "${USES_NIS}" == "true" ]
then
svcadm enable svc:/network/nis/client:default
diff --git a/tests/zfs-tests/tests/functional/xattr/setup.ksh b/tests/zfs-tests/tests/functional/xattr/setup.ksh
index ac82c5919..64f89a3d0 100755
--- a/tests/zfs-tests/tests/functional/xattr/setup.ksh
+++ b/tests/zfs-tests/tests/functional/xattr/setup.ksh
@@ -28,33 +28,24 @@
#
. $STF_SUITE/include/libtest.shlib
+. $STF_SUITE/tests/functional/xattr/xattr_common.kshlib
# if we're running NIS, turn it off until we clean up
# (it can cause useradd to take a long time, hitting our TIMEOUT)
-USES_NIS=false
-svcs svc:/network/nis/client:default | grep online > /dev/null
-if [ $? -eq 0 ]
-then
- svcadm disable -t svc:/network/nis/client:default
- USES_NIS=true
-fi
-
-# Make sure we use a brand new user for this
-ZFS_USER=zxtr
-ZFS_GROUP=staff
-while [ -z "${FOUND}" ]
-do
- COUNT=0
- USER_EXISTS=$( grep $ZFS_USER /etc/passwd )
- if [ ! -z "${USER_EXISTS}" ]
+if is_linux; then
+ USED_NIS=false
+else
+ USES_NIS=false
+ svcs svc:/network/nis/client:default | grep online > /dev/null
+ if [ $? -eq 0 ]
then
- ZFS_USER="${ZFS_USER}${COUNT}"
- COUNT=$(( $COUNT + 1 ))
- else
- FOUND="true"
+ svcadm disable -t svc:/network/nis/client:default
+ USES_NIS=true
fi
-done
+fi
+# Make sure we use a brand new user for this
+log_must add_group $ZFS_GROUP
log_must add_user $ZFS_GROUP $ZFS_USER
echo $ZFS_USER > /tmp/zfs-xattr-test-user.txt
diff --git a/tests/zfs-tests/tests/functional/xattr/xattr.cfg b/tests/zfs-tests/tests/functional/xattr/xattr.cfg
new file mode 100644
index 000000000..5f47562bb
--- /dev/null
+++ b/tests/zfs-tests/tests/functional/xattr/xattr.cfg
@@ -0,0 +1,30 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2017 by Lawrence Livermore National Security, LLC.
+# Use is subject to license terms.
+#
+
+export NISSTAFILE=/var/tmp/nis_state
+
+export ZFS_USER=zxtr
+export ZFS_GROUP=zfsgrp
diff --git a/tests/zfs-tests/tests/functional/xattr/xattr_001_pos.ksh b/tests/zfs-tests/tests/functional/xattr/xattr_001_pos.ksh
index adb5132f2..ffb700438 100755
--- a/tests/zfs-tests/tests/functional/xattr/xattr_001_pos.ksh
+++ b/tests/zfs-tests/tests/functional/xattr/xattr_001_pos.ksh
@@ -52,12 +52,18 @@ function cleanup {
fi
}
+set -A args "on" "sa"
+
log_assert "Create/read/write/append of xattrs works"
log_onexit cleanup
-log_must touch $TESTDIR/myfile.$$
-create_xattr $TESTDIR/myfile.$$ passwd /etc/passwd
-verify_write_xattr $TESTDIR/myfile.$$ passwd
-delete_xattr $TESTDIR/myfile.$$ passwd
+for arg in ${args[*]}; do
+ log_must zfs set xattr=$arg $TESTPOOL
+
+ log_must touch $TESTDIR/myfile.$$
+ create_xattr $TESTDIR/myfile.$$ passwd /etc/passwd
+ verify_write_xattr $TESTDIR/myfile.$$ passwd
+ delete_xattr $TESTDIR/myfile.$$ passwd
+done
log_pass "Create/read/write of xattrs works"
diff --git a/tests/zfs-tests/tests/functional/xattr/xattr_002_neg.ksh b/tests/zfs-tests/tests/functional/xattr/xattr_002_neg.ksh
index 99212a011..e379d1586 100755
--- a/tests/zfs-tests/tests/functional/xattr/xattr_002_neg.ksh
+++ b/tests/zfs-tests/tests/functional/xattr/xattr_002_neg.ksh
@@ -46,11 +46,17 @@ function cleanup {
}
+set -A args "on" "sa"
+
log_assert "A read of a non-existent xattr fails"
log_onexit cleanup
-# create a file
-log_must touch $TESTDIR/myfile.$$
-log_mustnot eval "cat $TESTDIR/myfile.$$ not-here.txt > /dev/null 2>&1"
+for arg in ${args[*]}; do
+ log_must zfs set xattr=$arg $TESTPOOL
+
+ # create a file
+ log_must touch $TESTDIR/myfile.$$
+ log_mustnot eval "cat $TESTDIR/myfile.$$ not-here.txt > /dev/null 2>&1"
-log_pass "A read of a non-existent xattr fails"
+ log_pass "A read of a non-existent xattr fails"
+done
diff --git a/tests/zfs-tests/tests/functional/xattr/xattr_003_neg.ksh b/tests/zfs-tests/tests/functional/xattr/xattr_003_neg.ksh
index 28fae8e65..a56fce4ea 100755
--- a/tests/zfs-tests/tests/functional/xattr/xattr_003_neg.ksh
+++ b/tests/zfs-tests/tests/functional/xattr/xattr_003_neg.ksh
@@ -56,7 +56,21 @@ log_must touch $TESTDIR/myfile.$$
create_xattr $TESTDIR/myfile.$$ passwd /etc/passwd
log_must chmod 000 $TESTDIR/myfile.$$
-log_mustnot su $ZFS_USER -c "runat $TESTDIR/myfile.$$ cat passwd"
-log_mustnot su $ZFS_USER -c "runat $TESTDIR/myfile.$$ cp /etc/passwd ."
+if is_linux; then
+ user_run $ZFS_USER eval \
+ "attr -q -g passwd $TESTDIR/myfile.$$ >/tmp/passwd.$$"
+ log_mustnot diff /etc/passwd /tmp/passwd.$$
+ log_must rm /tmp/passwd.$$
+
+ user_run $ZFS_USER eval \
+ "attr -q -s passwd $TESTDIR/myfile.$$ </etc/group"
+ log_must chmod 644 $TESTDIR/myfile.$$
+ attr -q -g passwd $TESTDIR/myfile.$$ >/tmp/passwd.$$
+ log_must diff /etc/passwd /tmp/passwd.$$
+ log_must rm /tmp/passwd.$$
+else
+ log_mustnot su $ZFS_USER -c "runat $TESTDIR/myfile.$$ cat passwd"
+ log_mustnot su $ZFS_USER -c "runat $TESTDIR/myfile.$$ cp /etc/passwd ."
+fi
log_pass "read/write xattr on a file with no permissions fails"
diff --git a/tests/zfs-tests/tests/functional/xattr/xattr_004_pos.ksh b/tests/zfs-tests/tests/functional/xattr/xattr_004_pos.ksh
index 921526315..e5f61d3bf 100755
--- a/tests/zfs-tests/tests/functional/xattr/xattr_004_pos.ksh
+++ b/tests/zfs-tests/tests/functional/xattr/xattr_004_pos.ksh
@@ -50,8 +50,7 @@ verify_runnable "global"
# Make sure we clean up properly
function cleanup {
- if [ $( ismounted /tmp/$NEWFS_DEFAULT_FS.$$ $NEWFS_DEFAULT_FS ) ]
- then
+ if ismounted /tmp/$NEWFS_DEFAULT_FS.$$ $NEWFS_DEFAULT_FS; then
log_must umount /tmp/$NEWFS_DEFAULT_FS.$$
log_must rm -rf /tmp/$NEWFS_DEFAULT_FS.$$
fi
@@ -63,25 +62,62 @@ log_onexit cleanup
# Create a UFS|EXT2 file system that we can work in
log_must zfs create -V128m $TESTPOOL/$TESTFS/zvol
block_device_wait
-log_must eval "echo y | $NEWFS $ZVOL_DEVDIR/$TESTPOOL/$TESTFS/zvol > /dev/null 2>&1"
+log_must eval "echo y | newfs $ZVOL_DEVDIR/$TESTPOOL/$TESTFS/zvol > /dev/null 2>&1"
log_must mkdir /tmp/$NEWFS_DEFAULT_FS.$$
-log_must mount $ZVOL_DEVDIR/$TESTPOOL/$TESTFS/zvol /tmp/$NEWFS_DEFAULT_FS.$$
+if is_linux; then
+ log_must mount -o user_xattr \
+ $ZVOL_DEVDIR/$TESTPOOL/$TESTFS/zvol /tmp/$NEWFS_DEFAULT_FS.$$
-# Create files in ufs|ext2 and tmpfs, and set some xattrs on them.
-log_must touch /tmp/$NEWFS_DEFAULT_FS.$$/$NEWFS_DEFAULT_FS-file.$$
-log_must touch /tmp/tmpfs-file.$$
+ # Create files in ext2 and tmpfs, and set some xattrs on them.
+ # Use small values for xattrs for ext2 compatibility.
+ log_must touch /tmp/$NEWFS_DEFAULT_FS.$$/$NEWFS_DEFAULT_FS-file.$$
-log_must runat /tmp/$NEWFS_DEFAULT_FS.$$/$NEWFS_DEFAULT_FS-file.$$ cp /etc/passwd .
-log_must runat /tmp/tmpfs-file.$$ cp /etc/group .
+ log_must touch /tmp/tmpfs-file.$$
+ echo "TEST XATTR" >/tmp/xattr1
+ echo "1234567890" >/tmp/xattr2
+ log_must attr -q -s xattr1 \
+ /tmp/$NEWFS_DEFAULT_FS.$$/$NEWFS_DEFAULT_FS-file.$$ </tmp/xattr1
+ log_must attr -q -s xattr2 /tmp/tmpfs-file.$$ </tmp/xattr2
-# copy those files to ZFS
-log_must cp -@ /tmp/$NEWFS_DEFAULT_FS.$$/$NEWFS_DEFAULT_FS-file.$$ $TESTDIR
-log_must cp -@ /tmp/tmpfs-file.$$ $TESTDIR
+ # copy those files to ZFS
+ log_must cp -a /tmp/$NEWFS_DEFAULT_FS.$$/$NEWFS_DEFAULT_FS-file.$$ \
+ $TESTDIR
+ log_must cp -a /tmp/tmpfs-file.$$ $TESTDIR
-# ensure the xattr information has been copied correctly
-log_must runat $TESTDIR/$NEWFS_DEFAULT_FS-file.$$ diff passwd /etc/passwd
-log_must runat $TESTDIR/tmpfs-file.$$ diff group /etc/group
+ # ensure the xattr information has been copied correctly
+ log_must eval "attr -q -g xattr1 $TESTDIR/$NEWFS_DEFAULT_FS-file.$$ \
+ >/tmp/xattr1.$$"
+
+ log_must diff /tmp/xattr1.$$ /tmp/xattr1
+ log_must eval "attr -q -g xattr2 $TESTDIR/tmpfs-file.$$ >/tmp/xattr2.$$"
+ log_must diff /tmp/xattr2.$$ /tmp/xattr2
+ log_must rm /tmp/xattr1 /tmp/xattr1.$$ /tmp/xattr2 /tmp/xattr2.$$
+
+ log_must umount /tmp/$NEWFS_DEFAULT_FS.$$
+else
+ log_must mount $ZVOL_DEVDIR/$TESTPOOL/$TESTFS/zvol \
+ /tmp/$NEWFS_DEFAULT_FS.$$
+
+ # Create files in ufs and tmpfs, and set some xattrs on them.
+ log_must touch /tmp/$NEWFS_DEFAULT_FS.$$/$NEWFS_DEFAULT_FS-file.$$
+ log_must touch /tmp/tmpfs-file.$$
+
+ log_must runat /tmp/$NEWFS_DEFAULT_FS.$$/$NEWFS_DEFAULT_FS-file.$$ \
+ cp /etc/passwd .
+ log_must runat /tmp/tmpfs-file.$$ cp /etc/group .
+
+ # copy those files to ZFS
+ log_must cp -@ /tmp/$NEWFS_DEFAULT_FS.$$/$NEWFS_DEFAULT_FS-file.$$ \
+ $TESTDIR
+ log_must cp -@ /tmp/tmpfs-file.$$ $TESTDIR
+
+ # ensure the xattr information has been copied correctly
+ log_must runat $TESTDIR/$NEWFS_DEFAULT_FS-file.$$ \
+ diff passwd /etc/passwd
+ log_must runat $TESTDIR/tmpfs-file.$$ diff group /etc/group
+
+ log_must umount /tmp/$NEWFS_DEFAULT_FS.$$
+fi
-log_must umount /tmp/$NEWFS_DEFAULT_FS.$$
log_pass "Files from $NEWFS_DEFAULT_FS,tmpfs with xattrs copied to zfs retain xattr info."
diff --git a/tests/zfs-tests/tests/functional/xattr/xattr_007_neg.ksh b/tests/zfs-tests/tests/functional/xattr/xattr_007_neg.ksh
index 6b3feeafc..977434ceb 100755
--- a/tests/zfs-tests/tests/functional/xattr/xattr_007_neg.ksh
+++ b/tests/zfs-tests/tests/functional/xattr/xattr_007_neg.ksh
@@ -69,13 +69,22 @@ log_must touch $TESTDIR/myfile2.$$
log_must zfs snapshot $TESTPOOL/$TESTFS@snap
# we shouldn't be able to alter the first file's xattr
-log_mustnot eval " runat $TESTDIR/.zfs/snapshot/snap/myfile.$$ \
- cp /etc/passwd . >/tmp/output.$$ 2>&1"
-log_must grep -i Read-only /tmp/output.$$
+if is_linux; then
+ log_mustnot eval "attr -s cp $TESTDIR/.zfs/snapshot/snap/myfile.$$ \
+ </etc/passwd >/tmp/output.$$ 2>&1"
+ log_must grep -i Read-only /tmp/output.$$
+ log_must eval "attr -q -l $TESTDIR/.zfs/snapshot/snap/myfile2.$$ \
+ >/tmp/output.$$ 2>&1"
+ log_must eval "attr -q -l $TESTDIR/myfile2.$$ >/tmp/expected_output.$$"
+else
+ log_mustnot eval " runat $TESTDIR/.zfs/snapshot/snap/myfile.$$ \
+ cp /etc/passwd . >/tmp/output.$$ 2>&1"
+ log_must grep -i Read-only /tmp/output.$$
+ log_must eval "runat $TESTDIR/.zfs/snapshot/snap/myfile2.$$ \
+ ls >/tmp/output.$$ 2>&1"
+ create_expected_output /tmp/expected_output.$$ SUNWattr_ro SUNWattr_rw
+fi
-log_must eval "runat $TESTDIR/.zfs/snapshot/snap/myfile2.$$ \
- ls >/tmp/output.$$ 2>&1"
-create_expected_output /tmp/expected_output.$$ SUNWattr_ro SUNWattr_rw
log_must diff /tmp/output.$$ /tmp/expected_output.$$
log_pass "create/write xattr on a snapshot fails"
diff --git a/tests/zfs-tests/tests/functional/xattr/xattr_008_pos.ksh b/tests/zfs-tests/tests/functional/xattr/xattr_008_pos.ksh
index 20319967c..735f1859a 100755
--- a/tests/zfs-tests/tests/functional/xattr/xattr_008_pos.ksh
+++ b/tests/zfs-tests/tests/functional/xattr/xattr_008_pos.ksh
@@ -49,6 +49,10 @@ function cleanup {
done
}
+if is_linux; then
+ log_unsupported "Test case isn't applicable to Linux"
+fi
+
log_assert "special . and .. dirs work as expected for xattrs"
log_onexit cleanup
diff --git a/tests/zfs-tests/tests/functional/xattr/xattr_009_neg.ksh b/tests/zfs-tests/tests/functional/xattr/xattr_009_neg.ksh
index 6a953cf84..ea5b40eec 100755
--- a/tests/zfs-tests/tests/functional/xattr/xattr_009_neg.ksh
+++ b/tests/zfs-tests/tests/functional/xattr/xattr_009_neg.ksh
@@ -40,6 +40,10 @@
# 3. Verify we're unable to create a hard link
#
+if is_linux; then
+ log_unsupported "Test case isn't applicable to Linux"
+fi
+
function cleanup {
log_must rm $TESTDIR/myfile.$$
diff --git a/tests/zfs-tests/tests/functional/xattr/xattr_010_neg.ksh b/tests/zfs-tests/tests/functional/xattr/xattr_010_neg.ksh
index 43502bfff..db218c434 100755
--- a/tests/zfs-tests/tests/functional/xattr/xattr_010_neg.ksh
+++ b/tests/zfs-tests/tests/functional/xattr/xattr_010_neg.ksh
@@ -41,6 +41,10 @@
#
#
+if is_linux; then
+ log_unsupported "Test case isn't applicable to Linux"
+fi
+
function cleanup {
log_must rm $TESTDIR/myfile.$$
diff --git a/tests/zfs-tests/tests/functional/xattr/xattr_011_pos.ksh b/tests/zfs-tests/tests/functional/xattr/xattr_011_pos.ksh
index 12f067489..9276d3a1a 100755
--- a/tests/zfs-tests/tests/functional/xattr/xattr_011_pos.ksh
+++ b/tests/zfs-tests/tests/functional/xattr/xattr_011_pos.ksh
@@ -65,60 +65,74 @@ create_xattr $TESTDIR/myfile.$$ passwd /etc/passwd
# and try various cpio options extracting the archives
# with and without xattr support, checking for correct behaviour
-
-log_note "Checking cpio"
-log_must touch $TESTDIR/cpio.$$
-create_xattr $TESTDIR/cpio.$$ passwd /etc/passwd
-echo $TESTDIR/cpio.$$ | cpio -o@ > /tmp/xattr.$$.cpio
-echo $TESTDIR/cpio.$$ | cpio -o > /tmp/noxattr.$$.cpio
-
-# we should have no xattr here
-log_must cpio -iu < /tmp/xattr.$$.cpio
-log_mustnot eval "runat $TESTDIR/cpio.$$ cat passwd > /dev/null 2>&1"
-
-# we should have an xattr here
-log_must cpio -iu@ < /tmp/xattr.$$.cpio
-log_must eval "runat $TESTDIR/cpio.$$ cat passwd > /dev/null 2>&1"
-
-# we should have no xattr here
-log_must cpio -iu < /tmp/noxattr.$$.cpio
-log_mustnot eval "runat $TESTDIR/cpio.$$ cat passwd > /dev/null 2>&1"
-
-# we should have no xattr here
-log_must cpio -iu@ < /tmp/noxattr.$$.cpio
-log_mustnot eval "runat $TESTDIR/cpio.$$ cat passwd > /dev/null 2>&1"
-log_must rm $TESTDIR/cpio.$$ /tmp/xattr.$$.cpio /tmp/noxattr.$$.cpio
-
-
+if is_linux; then
+ log_note "Checking cpio - unsupported"
+else
+ log_note "Checking cpio"
+ log_must touch $TESTDIR/cpio.$$
+ create_xattr $TESTDIR/cpio.$$ passwd /etc/passwd
+ echo $TESTDIR/cpio.$$ | cpio -o@ > /tmp/xattr.$$.cpio
+ echo $TESTDIR/cpio.$$ | cpio -o > /tmp/noxattr.$$.cpio
+
+ # we should have no xattr here
+ log_must cpio -iu < /tmp/xattr.$$.cpio
+ log_mustnot eval "runat $TESTDIR/cpio.$$ cat passwd > /dev/null 2>&1"
+
+ # we should have an xattr here
+ log_must cpio -iu@ < /tmp/xattr.$$.cpio
+ log_must eval "runat $TESTDIR/cpio.$$ cat passwd > /dev/null 2>&1"
+
+ # we should have no xattr here
+ log_must cpio -iu < /tmp/noxattr.$$.cpio
+ log_mustnot eval "runat $TESTDIR/cpio.$$ cat passwd > /dev/null 2>&1"
+
+ # we should have no xattr here
+ log_must cpio -iu@ < /tmp/noxattr.$$.cpio
+ log_mustnot eval "runat $TESTDIR/cpio.$$ cat passwd > /dev/null 2>&1"
+ log_must rm $TESTDIR/cpio.$$ /tmp/xattr.$$.cpio /tmp/noxattr.$$.cpio
+fi
log_note "Checking cp"
# check that with the right flag, the xattr is preserved
-log_must cp -@ $TESTDIR/myfile.$$ $TESTDIR/myfile2.$$
-compare_xattrs $TESTDIR/myfile.$$ $TESTDIR/myfile2.$$ passwd
-log_must rm $TESTDIR/myfile2.$$
+if is_linux; then
+ log_must cp -a $TESTDIR/myfile.$$ $TESTDIR/myfile2.$$
-# without the right flag, there should be no xattr
-log_must cp $TESTDIR/myfile.$$ $TESTDIR/myfile2.$$
-log_mustnot eval "runat $TESTDIR/myfile2.$$ ls passwd > /dev/null 2>&1"
-log_must rm $TESTDIR/myfile2.$$
+ compare_xattrs $TESTDIR/myfile.$$ $TESTDIR/myfile2.$$ passwd
+ log_must rm $TESTDIR/myfile2.$$
+ # without the right flag, there should be no xattr
+ log_must cp $TESTDIR/myfile.$$ $TESTDIR/myfile2.$$
+ log_mustnot attr -q -g passwd $TESTDIR/myfile2.$$
+ log_must rm $TESTDIR/myfile2.$$
+else
+ log_must cp -@ $TESTDIR/myfile.$$ $TESTDIR/myfile2.$$
+ compare_xattrs $TESTDIR/myfile.$$ $TESTDIR/myfile2.$$ passwd
+ log_must rm $TESTDIR/myfile2.$$
+
+ # without the right flag, there should be no xattr
+ log_must cp $TESTDIR/myfile.$$ $TESTDIR/myfile2.$$
+ log_mustnot eval "runat $TESTDIR/myfile2.$$ ls passwd > /dev/null 2>&1"
+ log_must rm $TESTDIR/myfile2.$$
+fi
-log_note "Checking find"
# create a file without xattrs, and check that find -xattr only finds
# our test file that has an xattr.
-log_must mkdir $TESTDIR/noxattrs
-log_must touch $TESTDIR/noxattrs/no-xattr
-
-find $TESTDIR -xattr | grep myfile.$$
-[[ $? -ne 0 ]] && \
- log_fail "find -xattr didn't find our file that had an xattr."
-find $TESTDIR -xattr | grep no-xattr
-[[ $? -eq 0 ]] && \
- log_fail "find -xattr found a file that didn't have an xattr."
-log_must rm -rf $TESTDIR/noxattrs
-
-
+if is_linux; then
+ log_note "Checking find - unsupported"
+else
+ log_note "Checking find"
+ log_must mkdir $TESTDIR/noxattrs
+ log_must touch $TESTDIR/noxattrs/no-xattr
+
+ find $TESTDIR -xattr | grep myfile.$$
+ [[ $? -ne 0 ]] && \
+ log_fail "find -xattr didn't find our file that had an xattr."
+ find $TESTDIR -xattr | grep no-xattr
+ [[ $? -eq 0 ]] && \
+ log_fail "find -xattr found a file that didn't have an xattr."
+ log_must rm -rf $TESTDIR/noxattrs
+fi
log_note "Checking mv"
# mv doesn't have any flags to preserve/ommit xattrs - they're
@@ -129,65 +143,96 @@ log_must mv $TESTDIR/mvfile.$$ $TESTDIR/mvfile2.$$
verify_xattr $TESTDIR/mvfile2.$$ passwd /etc/passwd
log_must rm $TESTDIR/mvfile2.$$
-
-log_note "Checking pax"
-log_must touch $TESTDIR/pax.$$
-create_xattr $TESTDIR/pax.$$ passwd /etc/passwd
-log_must pax -w -f $TESTDIR/noxattr.pax $TESTDIR/pax.$$
-log_must pax -w@ -f $TESTDIR/xattr.pax $TESTDIR/pax.$$
-log_must rm $TESTDIR/pax.$$
-
-# we should have no xattr here
-log_must pax -r -f $TESTDIR/noxattr.pax
-log_mustnot eval "runat $TESTDIR/pax.$$ cat passwd > /dev/null 2>&1"
-log_must rm $TESTDIR/pax.$$
-
-# we should have no xattr here
-log_must pax -r@ -f $TESTDIR/noxattr.pax
-log_mustnot eval "runat $TESTDIR/pax.$$ cat passwd > /dev/null 2>&1"
-log_must rm $TESTDIR/pax.$$
-
-
-# we should have an xattr here
-log_must pax -r@ -f $TESTDIR/xattr.pax
-verify_xattr $TESTDIR/pax.$$ passwd /etc/passwd
-log_must rm $TESTDIR/pax.$$
-
-# we should have no xattr here
-log_must pax -r -f $TESTDIR/xattr.pax $TESTDIR
-log_mustnot eval "runat $TESTDIR/pax.$$ cat passwd > /dev/null 2>&1"
-log_must rm $TESTDIR/pax.$$ $TESTDIR/noxattr.pax $TESTDIR/xattr.pax
-
+if is_linux; then
+ log_note "Checking pax - unsupported"
+else
+ log_note "Checking pax"
+ log_must touch $TESTDIR/pax.$$
+ create_xattr $TESTDIR/pax.$$ passwd /etc/passwd
+ log_must pax -w -f $TESTDIR/noxattr.pax $TESTDIR/pax.$$
+ log_must pax -w@ -f $TESTDIR/xattr.pax $TESTDIR/pax.$$
+ log_must rm $TESTDIR/pax.$$
+
+ # we should have no xattr here
+ log_must pax -r -f $TESTDIR/noxattr.pax
+ log_mustnot eval "runat $TESTDIR/pax.$$ cat passwd > /dev/null 2>&1"
+ log_must rm $TESTDIR/pax.$$
+
+ # we should have no xattr here
+ log_must pax -r@ -f $TESTDIR/noxattr.pax
+ log_mustnot eval "runat $TESTDIR/pax.$$ cat passwd > /dev/null 2>&1"
+ log_must rm $TESTDIR/pax.$$
+
+ # we should have an xattr here
+ log_must pax -r@ -f $TESTDIR/xattr.pax
+ verify_xattr $TESTDIR/pax.$$ passwd /etc/passwd
+ log_must rm $TESTDIR/pax.$$
+
+ # we should have no xattr here
+ log_must pax -r -f $TESTDIR/xattr.pax $TESTDIR
+ log_mustnot eval "runat $TESTDIR/pax.$$ cat passwd > /dev/null 2>&1"
+ log_must rm $TESTDIR/pax.$$ $TESTDIR/noxattr.pax $TESTDIR/xattr.pax
+fi
log_note "Checking tar"
-log_must touch $TESTDIR/tar.$$
-create_xattr $TESTDIR/tar.$$ passwd /etc/passwd
-
-log_must cd $TESTDIR
-
-log_must tar cf noxattr.tar tar.$$
-log_must tar c@f xattr.tar tar.$$
-log_must rm $TESTDIR/tar.$$
-
-# we should have no xattr here
-log_must tar xf xattr.tar
-log_mustnot eval "runat $TESTDIR/tar.$$ cat passwd > /dev/null 2>&1"
-log_must rm $TESTDIR/tar.$$
-
-# we should have an xattr here
-log_must tar x@f xattr.tar
-verify_xattr tar.$$ passwd /etc/passwd
-log_must rm $TESTDIR/tar.$$
-
-# we should have no xattr here
-log_must tar xf $TESTDIR/noxattr.tar
-log_mustnot eval "runat $TESTDIR/tar.$$ cat passwd > /dev/null 2>&1"
-log_must rm $TESTDIR/tar.$$
-
-# we should have no xattr here
-log_must tar x@f $TESTDIR/noxattr.tar
-log_mustnot eval "runat $TESTDIR/tar.$$ cat passwd > /dev/null 2>&1"
-log_must rm $TESTDIR/tar.$$ $TESTDIR/noxattr.tar $TESTDIR/xattr.tar
-
+if is_linux; then
+ log_must touch $TESTDIR/tar.$$
+ create_xattr $TESTDIR/tar.$$ passwd /etc/passwd
+
+ log_must cd $TESTDIR
+
+ log_must tar -cf noxattr.tar tar.$$
+ log_must tar --xattrs -cf xattr.tar tar.$$
+ log_must rm $TESTDIR/tar.$$
+
+ # we should have no xattr here
+ log_must tar --no-xattrs -xf xattr.tar
+ log_mustnot attr -q -g passwd $TESTDIR/tar.$$
+ log_must rm $TESTDIR/tar.$$
+
+ # we should have an xattr here
+ log_must tar --xattrs -xf xattr.tar
+ verify_xattr tar.$$ passwd /etc/passwd
+ log_must rm $TESTDIR/tar.$$
+
+ # we should have no xattr here
+ log_must tar --no-xattrs -xf $TESTDIR/noxattr.tar
+ log_mustnot attr -q -g passwd $TESTDIR/tar.$$
+ log_must rm $TESTDIR/tar.$$
+
+ # we should have no xattr here
+ log_must tar --xattrs -xf $TESTDIR/noxattr.tar
+ log_mustnot attr -q -g passwd $TESTDIR/tar.$$
+ log_must rm $TESTDIR/tar.$$ $TESTDIR/noxattr.tar $TESTDIR/xattr.tar
+else
+ log_must touch $TESTDIR/tar.$$
+ create_xattr $TESTDIR/tar.$$ passwd /etc/passwd
+
+ log_must cd $TESTDIR
+
+ log_must tar cf noxattr.tar tar.$$
+ log_must tar c@f xattr.tar tar.$$
+ log_must rm $TESTDIR/tar.$$
+
+ # we should have no xattr here
+ log_must tar xf xattr.tar
+ log_mustnot eval "runat $TESTDIR/tar.$$ cat passwd > /dev/null 2>&1"
+ log_must rm $TESTDIR/tar.$$
+
+ # we should have an xattr here
+ log_must tar x@f xattr.tar
+ verify_xattr tar.$$ passwd /etc/passwd
+ log_must rm $TESTDIR/tar.$$
+
+ # we should have no xattr here
+ log_must tar xf $TESTDIR/noxattr.tar
+ log_mustnot eval "runat $TESTDIR/tar.$$ cat passwd > /dev/null 2>&1"
+ log_must rm $TESTDIR/tar.$$
+
+ # we should have no xattr here
+ log_must tar x@f $TESTDIR/noxattr.tar
+ log_mustnot eval "runat $TESTDIR/tar.$$ cat passwd > /dev/null 2>&1"
+ log_must rm $TESTDIR/tar.$$ $TESTDIR/noxattr.tar $TESTDIR/xattr.tar
+fi
log_assert "Basic applications work with xattrs: cpio cp find mv pax tar"
diff --git a/tests/zfs-tests/tests/functional/xattr/xattr_012_pos.ksh b/tests/zfs-tests/tests/functional/xattr/xattr_012_pos.ksh
index 26d6bd7dd..7241caf8e 100755
--- a/tests/zfs-tests/tests/functional/xattr/xattr_012_pos.ksh
+++ b/tests/zfs-tests/tests/functional/xattr/xattr_012_pos.ksh
@@ -79,10 +79,16 @@ fi
FS_SIZE=$(zfs get -p -H -o value used $TESTPOOL/$TESTFS)
-log_must runat $TESTDIR/myfile.$$ mkfile 200m xattr
+if is_linux; then
+ # Linux setxattr() syscalls limits individual xattrs to 64k. Create
+ # 100 files, with 128 xattrs each of size 16k. 100*128*16k=200m
+ log_must xattrtest -k -f 100 -x 128 -s 16384 -p $TESTDIR
+else
+ log_must runat $TESTDIR/myfile.$$ mkfile 200m xattr
+fi
#Make sure the newly created file is counted into zpool usage
-log_must sync
+sync_pool
# now check to see if our pool disk usage has increased
if is_global_zone
diff --git a/tests/zfs-tests/tests/functional/xattr/xattr_013_pos.ksh b/tests/zfs-tests/tests/functional/xattr/xattr_013_pos.ksh
index 50b8ffbfa..e9eed6955 100755
--- a/tests/zfs-tests/tests/functional/xattr/xattr_013_pos.ksh
+++ b/tests/zfs-tests/tests/functional/xattr/xattr_013_pos.ksh
@@ -65,13 +65,25 @@ log_must umount $TESTDIR
log_must zfs mount -o noxattr $TESTPOOL/$TESTFS
# check that we can't perform xattr operations
-log_mustnot eval "runat $TESTDIR/myfile.$$ cat passwd > /dev/null 2>&1"
-log_mustnot eval "runat $TESTDIR/myfile.$$ rm passwd > /dev/null 2>&1"
-log_mustnot eval "runat $TESTDIR/myfile.$$ cp /etc/passwd . > /dev/null 2>&1"
-
-log_must touch $TESTDIR/new.$$
-log_mustnot eval "runat $TESTDIR/new.$$ cp /etc/passwd . > /dev/null 2>&1"
-log_mustnot eval "runat $TESTDIR/new.$$ rm passwd > /dev/null 2>&1"
+if is_linux; then
+ log_mustnot attr -q -g passwd $TESTDIR/myfile.$$
+ log_mustnot attr -q -r passwd $TESTDIR/myfile.$$
+ log_mustnot attr -q -s passwd $TESTDIR/myfile.$$ </etc/passwd
+
+ log_must touch $TESTDIR/new.$$
+ log_mustnot attr -q -s passwd $TESTDIR/new.$$ </etc/passwd
+ log_mustnot attr -q -r passwd $TESTDIR/new.$$
+else
+ log_mustnot eval "runat $TESTDIR/myfile.$$ cat passwd > /dev/null 2>&1"
+ log_mustnot eval "runat $TESTDIR/myfile.$$ rm passwd > /dev/null 2>&1"
+ log_mustnot eval "runat $TESTDIR/myfile.$$ cp /etc/passwd . \
+ > /dev/null 2>&1"
+
+ log_must touch $TESTDIR/new.$$
+ log_mustnot eval "runat $TESTDIR/new.$$ cp /etc/passwd . \
+ > /dev/null 2>&1"
+ log_mustnot eval "runat $TESTDIR/new.$$ rm passwd > /dev/null 2>&1"
+fi
# now mount the filesystem again as normal
log_must umount $TESTDIR
@@ -82,7 +94,11 @@ verify_xattr $TESTDIR/myfile.$$ passwd /etc/passwd
# there should be no xattr on the file we created while the fs was mounted
# -o noxattr
-log_mustnot eval "runat $TESTDIR/new.$$ cat passwd > /dev/null 2>&1"
+if is_linux; then
+ log_mustnot attr -q -g passwd $TESTDIR/new.$$
+else
+ log_mustnot eval "runat $TESTDIR/new.$$ cat passwd > /dev/null 2>&1"
+fi
create_xattr $TESTDIR/new.$$ passwd /etc/passwd
log_pass "The noxattr mount option functions as expected"
diff --git a/tests/zfs-tests/tests/functional/xattr/xattr_common.kshlib b/tests/zfs-tests/tests/functional/xattr/xattr_common.kshlib
index 567100934..d2399310b 100644
--- a/tests/zfs-tests/tests/functional/xattr/xattr_common.kshlib
+++ b/tests/zfs-tests/tests/functional/xattr/xattr_common.kshlib
@@ -29,6 +29,7 @@
#
. $STF_SUITE/include/libtest.shlib
+. $STF_SUITE/tests/functional/xattr/xattr.cfg
# a function that takes a file, then creates and verifies
# an xattr on that file. The xattr_contents is the file
@@ -38,10 +39,15 @@ function create_xattr { # filename xattr_name xattr_contents
typeset XATTR_NAME=$2
typeset XATTR_CONTENTS=$3
- # read any empty xattr on that file
- log_must runat $FILE ls
- # create the xattr
- log_must runat $FILE cp $XATTR_CONTENTS $XATTR_NAME
+ if is_linux; then
+ log_mustnot attr -q -g $XATTR_NAME $FILE
+ log_must attr -q -s $XATTR_NAME $FILE < $XATTR_CONTENTS
+ else
+ # read any empty xattr on that file
+ log_must runat $FILE ls
+ # create the xattr
+ log_must runat $FILE cp $XATTR_CONTENTS $XATTR_NAME
+ fi
verify_xattr $FILE $XATTR_NAME $XATTR_CONTENTS
}
@@ -53,8 +59,13 @@ function compare_xattrs { # filename1 filename2 xattr_name
typeset FILE2=$2
typeset XATTR_NAME=$3
- runat $FILE1 cat $XATTR_NAME > /tmp/file1.$$
- runat $FILE2 cat $XATTR_NAME > /tmp/file2.$$
+ if is_linux; then
+ attr -q -g $XATTR_NAME $FILE1 >/tmp/file1.$$
+ attr -q -g $XATTR_NAME $FILE2 >/tmp/file2.$$
+ else
+ runat $FILE1 cat $XATTR_NAME > /tmp/file1.$$
+ runat $FILE2 cat $XATTR_NAME > /tmp/file2.$$
+ fi
log_must diff /tmp/file1.$$ /tmp/file2.$$
log_must rm /tmp/file1.$$ /tmp/file2.$$
@@ -66,7 +77,14 @@ function verify_xattr { # filename xattr_name xattr_contents
typeset XATTR_CONTENTS=$3
# read the xattr, writing it to a temp file
- log_must eval "runat $FILE cat $XATTR_NAME > /tmp/$XATTR_NAME.$$ 2>&1"
+ if is_linux; then
+ log_must eval \
+ "attr -q -g $XATTR_NAME $FILE >/tmp/$XATTR_NAME.$$"
+ else
+ log_must eval \
+ "runat $FILE cat $XATTR_NAME >/tmp/$XATTR_NAME.$$ 2>&1"
+ fi
+
log_must diff $XATTR_CONTENTS /tmp/$XATTR_NAME.$$
rm /tmp/$XATTR_NAME.$$
}
@@ -76,8 +94,13 @@ function delete_xattr { # filename xattr_name
typeset XATTR_NAME=$2
# delete the xattr
- log_must runat $FILE rm $XATTR_NAME
- log_mustnot eval "runat $FILE ls $XATTR_NAME > /dev/null 2>&1"
+ if is_linux; then
+ log_must attr -r $XATTR_NAME $FILE
+ log_mustnot attr -q -g $XATTR_NAME $FILE
+ else
+ log_must runat $FILE rm $XATTR_NAME
+ log_mustnot eval "runat $FILE ls $XATTR_NAME > /dev/null 2>&1"
+ fi
}
# not sure about this : really this should be testing write/append
@@ -85,8 +108,15 @@ function verify_write_xattr { # filename xattr_name
typeset FILE=$1
typeset XATTR_NAME=$2
- log_must eval "runat $FILE dd if=/etc/passwd of=$XATTR_NAME"
- log_must eval "runat $FILE cat $XATTR_NAME > /tmp/$XATTR_NAME.$$ 2>&1"
+ if is_linux; then
+ log_must attr -q -s $XATTR_NAME $FILE < /etc/passwd
+ log_must eval \
+ "attr -q -g $XATTR_NAME $FILE >/tmp/$XATTR_NAME.$$"
+ else
+ log_must eval "runat $FILE dd if=/etc/passwd of=$XATTR_NAME"
+ log_must eval \
+ "runat $FILE cat $XATTR_NAME > /tmp/$XATTR_NAME.$$ 2>&1"
+ fi
log_must dd if=/etc/passwd of=/tmp/passwd_dd.$$
log_must diff /tmp/passwd_dd.$$ /tmp/$XATTR_NAME.$$
log_must rm /tmp/passwd_dd.$$ /tmp/$XATTR_NAME.$$