diff options
author | Ryan Moeller <[email protected]> | 2020-01-23 20:14:40 -0500 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2020-01-23 17:14:40 -0800 |
commit | dbfec5cc09cedfe3a31fc958a80e111f50716929 (patch) | |
tree | 8de52f6f4d39a7596868eeb36eb01614798d4942 /tests | |
parent | 35b07497c60701465a87aab48fc890a0bc502561 (diff) |
ZTS: Get xattr tests running on FreeBSD
This mostly involves reworking platform checks to make illumos the
exception (thanks to their unusual way of exposing xattrs). Other
platforms are able to take advantage of the recently added xattr
wrappers in libtest.
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: Ryan Moeller <[email protected]>
Closes #9872
Diffstat (limited to 'tests')
-rw-r--r-- | tests/runfiles/common.run | 6 | ||||
-rw-r--r-- | tests/runfiles/linux.run | 7 | ||||
-rw-r--r-- | tests/runfiles/sunos.run | 4 | ||||
-rwxr-xr-x | tests/test-runner/bin/zts-report.py | 3 | ||||
-rwxr-xr-x | tests/zfs-tests/tests/functional/xattr/xattr_003_neg.ksh | 8 | ||||
-rwxr-xr-x | tests/zfs-tests/tests/functional/xattr/xattr_004_pos.ksh | 84 | ||||
-rwxr-xr-x | tests/zfs-tests/tests/functional/xattr/xattr_007_neg.ksh | 16 | ||||
-rwxr-xr-x | tests/zfs-tests/tests/functional/xattr/xattr_008_pos.ksh | 4 | ||||
-rwxr-xr-x | tests/zfs-tests/tests/functional/xattr/xattr_009_neg.ksh | 4 | ||||
-rwxr-xr-x | tests/zfs-tests/tests/functional/xattr/xattr_010_neg.ksh | 4 | ||||
-rwxr-xr-x | tests/zfs-tests/tests/functional/xattr/xattr_011_pos.ksh | 63 | ||||
-rwxr-xr-x | tests/zfs-tests/tests/functional/xattr/xattr_012_pos.ksh | 15 | ||||
-rwxr-xr-x | tests/zfs-tests/tests/functional/xattr/xattr_013_pos.ksh | 24 | ||||
-rw-r--r-- | tests/zfs-tests/tests/functional/xattr/xattr_common.kshlib | 64 |
14 files changed, 166 insertions, 140 deletions
diff --git a/tests/runfiles/common.run b/tests/runfiles/common.run index f93f6479a..a04f5f3cc 100644 --- a/tests/runfiles/common.run +++ b/tests/runfiles/common.run @@ -868,6 +868,12 @@ tags = ['functional', 'vdev_zaps'] tests = ['write_dirs_001_pos', 'write_dirs_002_pos'] tags = ['functional', 'write_dirs'] +[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_011_pos', 'xattr_012_pos', 'xattr_013_pos'] +tags = ['functional', 'xattr'] + [tests/functional/zvol/zvol_ENOSPC] tests = ['zvol_ENOSPC_001_pos'] tags = ['functional', 'zvol', 'zvol_ENOSPC'] diff --git a/tests/runfiles/linux.run b/tests/runfiles/linux.run index 5fe16bcfb..b4322991e 100644 --- a/tests/runfiles/linux.run +++ b/tests/runfiles/linux.run @@ -130,10 +130,3 @@ tags = ['functional', 'upgrade'] tests = ['groupspace_001_pos', 'groupspace_002_pos', 'groupspace_003_pos', 'userquota_013_pos', 'userspace_003_pos'] tags = ['functional', 'userquota'] - -[tests/functional/xattr:Linux] -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'] -tags = ['functional', 'xattr'] diff --git a/tests/runfiles/sunos.run b/tests/runfiles/sunos.run index a0dae504a..232f561a7 100644 --- a/tests/runfiles/sunos.run +++ b/tests/runfiles/sunos.run @@ -33,6 +33,10 @@ tags = ['functional', 'cli_root', 'zpool_add'] tests = ['zpool_create_016_pos'] tags = ['functional', 'cli_root', 'zpool_create'] +[tests/functional/xattr:illumos] +tests = ['xattr_008_pos', 'xattr_009_neg', 'xattr_010_neg'] +tags = ['functional', 'xattr'] + [tests/functional/zvol/zvol_misc:illumos] tests = ['zvol_misc_001_neg', 'zvol_misc_003_neg', 'zvol_misc_004_pos', 'zvol_misc_005_neg', 'zvol_misc_006_pos'] diff --git a/tests/test-runner/bin/zts-report.py b/tests/test-runner/bin/zts-report.py index a6937b52c..66ecbeb07 100755 --- a/tests/test-runner/bin/zts-report.py +++ b/tests/test-runner/bin/zts-report.py @@ -162,9 +162,6 @@ known = { 'rootpool/setup': ['SKIP', na_reason], 'rsend/rsend_008_pos': ['SKIP', '6066'], 'vdev_zaps/vdev_zaps_007_pos': ['FAIL', known_reason], - 'xattr/xattr_008_pos': ['SKIP', na_reason], - 'xattr/xattr_009_neg': ['SKIP', na_reason], - 'xattr/xattr_010_neg': ['SKIP', na_reason], 'zvol/zvol_swap/zvol_swap_003_pos': ['SKIP', na_reason], 'zvol/zvol_swap/zvol_swap_005_pos': ['SKIP', na_reason], 'zvol/zvol_swap/zvol_swap_006_pos': ['SKIP', na_reason], 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 a4cb996c4..a3b25ff66 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,10 @@ log_must touch $TESTDIR/myfile.$$ create_xattr $TESTDIR/myfile.$$ passwd /etc/passwd log_must chmod 000 $TESTDIR/myfile.$$ -if is_linux; then +if is_illumos; then + log_mustnot su $ZFS_USER -c "runat $TESTDIR/myfile.$$ cat passwd" + log_mustnot su $ZFS_USER -c "runat $TESTDIR/myfile.$$ cp /etc/passwd ." +else user_run $ZFS_USER eval \ "get_xattr passwd $TESTDIR/myfile.$$ >/tmp/passwd.$$" log_mustnot diff /etc/passwd /tmp/passwd.$$ @@ -68,9 +71,6 @@ if is_linux; then get_xattr 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 745f06064..0a25d7ac5 100755 --- a/tests/zfs-tests/tests/functional/xattr/xattr_004_pos.ksh +++ b/tests/zfs-tests/tests/functional/xattr/xattr_004_pos.ksh @@ -63,37 +63,8 @@ block_device_wait log_must eval "new_fs $ZVOL_DEVDIR/$TESTPOOL/$TESTFS/zvol > /dev/null 2>&1" log_must mkdir /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 ext and tmpfs, and set some xattrs on them. - # Use small values for xattrs for ext compatibility. - log_must touch /tmp/$NEWFS_DEFAULT_FS.$$/$NEWFS_DEFAULT_FS-file.$$ - - log_must touch /tmp/tmpfs-file.$$ - echo "TEST XATTR" >/tmp/xattr1 - echo "1234567890" >/tmp/xattr2 - log_must set_xattr_stdin xattr1 \ - /tmp/$NEWFS_DEFAULT_FS.$$/$NEWFS_DEFAULT_FS-file.$$ </tmp/xattr1 - log_must set_xattr_stdin xattr2 /tmp/tmpfs-file.$$ </tmp/xattr2 - - # 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 eval "get_xattr xattr1 $TESTDIR/$NEWFS_DEFAULT_FS-file.$$ \ - >/tmp/xattr1.$$" - - log_must diff /tmp/xattr1.$$ /tmp/xattr1 - log_must eval "get_xattr 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 mkdir /tmp/tmpfs.$$ +if is_illumos; then log_must mount $ZVOL_DEVDIR/$TESTPOOL/$TESTFS/zvol \ /tmp/$NEWFS_DEFAULT_FS.$$ @@ -116,6 +87,57 @@ else log_must runat $TESTDIR/tmpfs-file.$$ diff group /etc/group log_must umount /tmp/$NEWFS_DEFAULT_FS.$$ +else + if is_linux; then + options="-o user_xattr" + fi + log_must mount ${options:+""} \ + $ZVOL_DEVDIR/$TESTPOOL/$TESTFS/zvol /tmp/$NEWFS_DEFAULT_FS.$$ + + # Create files in ext and tmpfs, and set some xattrs on them. + # Use small values for xattrs for ext compatibility. + log_must touch /tmp/$NEWFS_DEFAULT_FS.$$/$NEWFS_DEFAULT_FS-file.$$ + + echo "TEST XATTR" >/tmp/xattr1 + echo "1234567890" >/tmp/xattr2 + + log_must set_xattr_stdin xattr1 \ + /tmp/$NEWFS_DEFAULT_FS.$$/$NEWFS_DEFAULT_FS-file.$$ </tmp/xattr1 + + if is_linux; then + log_must touch /tmp/tmpfs-file.$$ + log_must set_xattr_stdin xattr2 /tmp/tmpfs-file.$$ </tmp/xattr2 + fi + + # copy those files to ZFS + if is_freebsd; then + # cp does not preserve extattrs on FreeBSD + export TAPE="-" + log_must eval "tar cC /tmp/$NEWFS_DEFAULT_FS.$$ \ + $NEWFS_DEFAULT_FS-file.$$ | tar xC $TESTDIR" + else + log_must cp -a \ + /tmp/$NEWFS_DEFAULT_FS.$$/$NEWFS_DEFAULT_FS-file.$$ \ + $TESTDIR + log_must cp -a /tmp/tmpfs-file.$$ $TESTDIR + fi + + # ensure the xattr information has been copied correctly + log_must eval "get_xattr xattr1 $TESTDIR/$NEWFS_DEFAULT_FS-file.$$ \ + >/tmp/xattr1.$$" + log_must diff /tmp/xattr1.$$ /tmp/xattr1 + log_must rm $TESTDIR/$NEWFS_DEFAULT_FS-file.$$ + log_must rm /tmp/xattr1 /tmp/xattr1.$$ + + if is_linux; then + log_must eval "get_xattr xattr2 $TESTDIR/tmpfs-file.$$ \ + >/tmp/xattr2.$$" + log_must diff /tmp/xattr2.$$ /tmp/xattr2 + log_must rm /tmp/tmpfs-file.$$ + log_must rm /tmp/xattr2 /tmp/xattr2.$$ + fi + + log_must umount /tmp/$NEWFS_DEFAULT_FS.$$ fi 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 3073409c2..5189b6272 100755 --- a/tests/zfs-tests/tests/functional/xattr/xattr_007_neg.ksh +++ b/tests/zfs-tests/tests/functional/xattr/xattr_007_neg.ksh @@ -68,20 +68,20 @@ log_must touch $TESTDIR/myfile2.$$ log_must zfs snapshot $TESTPOOL/$TESTFS@snap # we shouldn't be able to alter the first file's xattr -if is_linux; then - log_mustnot eval "set_xattr_stdin cp $TESTDIR/.zfs/snapshot/snap/myfile.$$ \ - </etc/passwd > $TEST_BASE_DIR/output.$$ 2>&1" - log_must grep -i Read-only $TEST_BASE_DIR/output.$$ - log_must eval "ls_xattr $TESTDIR/.zfs/snapshot/snap/myfile2.$$ \ - > $TEST_BASE_DIR/output.$$ 2>&1" - log_must eval "ls_xattr $TESTDIR/myfile2.$$ > $TEST_BASE_DIR/expected_output.$$" -else +if is_illumos; then log_mustnot eval " runat $TESTDIR/.zfs/snapshot/snap/myfile.$$ \ cp /etc/passwd . > $TEST_BASE_DIR/output.$$ 2>&1" log_must grep -i Read-only $TEST_BASE_DIR/output.$$ log_must eval "runat $TESTDIR/.zfs/snapshot/snap/myfile2.$$ \ ls > $TEST_BASE_DIR/output.$$ 2>&1" create_expected_output $TEST_BASE_DIR/expected_output.$$ SUNWattr_ro SUNWattr_rw +else + log_mustnot eval "set_xattr_stdin cp $TESTDIR/.zfs/snapshot/snap/myfile.$$ \ + </etc/passwd > $TEST_BASE_DIR/output.$$ 2>&1" + log_must grep -i Read-only $TEST_BASE_DIR/output.$$ + log_must eval "ls_xattr $TESTDIR/.zfs/snapshot/snap/myfile2.$$ \ + > $TEST_BASE_DIR/output.$$ 2>&1" + log_must eval "ls_xattr $TESTDIR/myfile2.$$ > $TEST_BASE_DIR/expected_output.$$" fi log_must diff $TEST_BASE_DIR/output.$$ $TEST_BASE_DIR/expected_output.$$ 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 45d24ac27..099a61010 100755 --- a/tests/zfs-tests/tests/functional/xattr/xattr_008_pos.ksh +++ b/tests/zfs-tests/tests/functional/xattr/xattr_008_pos.ksh @@ -49,10 +49,6 @@ 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 f64f7e42b..c9d636ecb 100755 --- a/tests/zfs-tests/tests/functional/xattr/xattr_009_neg.ksh +++ b/tests/zfs-tests/tests/functional/xattr/xattr_009_neg.ksh @@ -40,10 +40,6 @@ # 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 db218c434..43502bfff 100755 --- a/tests/zfs-tests/tests/functional/xattr/xattr_010_neg.ksh +++ b/tests/zfs-tests/tests/functional/xattr/xattr_010_neg.ksh @@ -41,10 +41,6 @@ # # -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 6a06d1b93..fdfefbf67 100755 --- a/tests/zfs-tests/tests/functional/xattr/xattr_011_pos.ksh +++ b/tests/zfs-tests/tests/functional/xattr/xattr_011_pos.ksh @@ -65,9 +65,7 @@ create_xattr $TESTDIR/myfile.$$ passwd /etc/passwd # and try various cpio options extracting the archives # with and without xattr support, checking for correct behaviour -if is_linux; then - log_note "Checking cpio - unsupported" -else +if is_illumos; then log_note "Checking cpio" log_must touch $TESTDIR/cpio.$$ create_xattr $TESTDIR/cpio.$$ passwd /etc/passwd @@ -90,11 +88,15 @@ else log_must cpio -iu@ < $TEST_BASE_DIR/noxattr.$$.cpio log_mustnot eval "runat $TESTDIR/cpio.$$ cat passwd > /dev/null 2>&1" log_must rm $TESTDIR/cpio.$$ $TEST_BASE_DIR/xattr.$$.cpio $TEST_BASE_DIR/noxattr.$$.cpio +else + log_note "Checking cpio - unsupported" fi -log_note "Checking cp" # check that with the right flag, the xattr is preserved -if is_linux; then +if is_freebsd; then + log_note "Checking cp - unsupported" +elif is_linux; then + log_note "Checking cp" log_must cp -a $TESTDIR/myfile.$$ $TESTDIR/myfile2.$$ compare_xattrs $TESTDIR/myfile.$$ $TESTDIR/myfile2.$$ passwd @@ -105,6 +107,7 @@ if is_linux; then log_mustnot get_xattr passwd $TESTDIR/myfile2.$$ log_must rm $TESTDIR/myfile2.$$ else + log_note "Checking cp" log_must cp -@ $TESTDIR/myfile.$$ $TESTDIR/myfile2.$$ compare_xattrs $TESTDIR/myfile.$$ $TESTDIR/myfile2.$$ passwd @@ -118,9 +121,7 @@ fi # create a file without xattrs, and check that find -xattr only finds # our test file that has an xattr. -if is_linux; then - log_note "Checking find - unsupported" -else +if is_illumos; then log_note "Checking find" log_must mkdir $TESTDIR/noxattrs log_must touch $TESTDIR/noxattrs/no-xattr @@ -132,6 +133,8 @@ else [[ $? -eq 0 ]] && \ log_fail "find -xattr found a file that didn't have an xattr." log_must rm -rf $TESTDIR/noxattrs +else + log_note "Checking find - unsupported" fi log_note "Checking mv" @@ -143,9 +146,7 @@ log_must mv $TESTDIR/mvfile.$$ $TESTDIR/mvfile2.$$ verify_xattr $TESTDIR/mvfile2.$$ passwd /etc/passwd log_must rm $TESTDIR/mvfile2.$$ -if is_linux; then - log_note "Checking pax - unsupported" -else +if is_illumos; then log_note "Checking pax" log_must touch $TESTDIR/pax.$$ create_xattr $TESTDIR/pax.$$ passwd /etc/passwd @@ -172,37 +173,39 @@ else 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 +else + log_note "Checking pax - unsupported" fi log_note "Checking tar" -if is_linux; then +if is_illumos; 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 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 --no-xattrs -xf xattr.tar - log_mustnot get_xattr passwd $TESTDIR/tar.$$ + 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 --xattrs -xf xattr.tar + 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 --no-xattrs -xf $TESTDIR/noxattr.tar - log_mustnot get_xattr passwd $TESTDIR/tar.$$ + 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 --xattrs -xf $TESTDIR/noxattr.tar - log_mustnot get_xattr passwd $TESTDIR/tar.$$ + 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 else log_must touch $TESTDIR/tar.$$ @@ -210,28 +213,28 @@ else log_must cd $TESTDIR - log_must tar cf noxattr.tar tar.$$ - log_must tar c@f xattr.tar tar.$$ + log_must tar --no-xattrs -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 xf xattr.tar - log_mustnot eval "runat $TESTDIR/tar.$$ cat passwd > /dev/null 2>&1" + log_must tar --no-xattrs -xf xattr.tar + log_mustnot get_xattr passwd $TESTDIR/tar.$$ log_must rm $TESTDIR/tar.$$ # we should have an xattr here - log_must tar x@f xattr.tar + 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 xf $TESTDIR/noxattr.tar - log_mustnot eval "runat $TESTDIR/tar.$$ cat passwd > /dev/null 2>&1" + log_must tar --no-xattrs -xf $TESTDIR/noxattr.tar + log_mustnot get_xattr passwd $TESTDIR/tar.$$ 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 tar --xattrs -xf $TESTDIR/noxattr.tar + log_mustnot get_xattr passwd $TESTDIR/tar.$$ log_must rm $TESTDIR/tar.$$ $TESTDIR/noxattr.tar $TESTDIR/xattr.tar fi 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 7241caf8e..693ca0a63 100755 --- a/tests/zfs-tests/tests/functional/xattr/xattr_012_pos.ksh +++ b/tests/zfs-tests/tests/functional/xattr/xattr_012_pos.ksh @@ -47,6 +47,9 @@ function cleanup { log_must rm $TESTDIR/myfile.$$ + if is_freebsd; then + log_must rm /tmp/xattr.$$ + fi } function get_pool_size { @@ -79,7 +82,17 @@ fi FS_SIZE=$(zfs get -p -H -o value used $TESTPOOL/$TESTFS) -if is_linux; then +if is_freebsd; then + # FreeBSD setextattr has awful scaling with respect to input size. + # It reallocs after every 1024 bytes. For now we'll just break up + # the 200MB into 10 20MB attributes, but this test could be revisited + # if someone cared about large extattrs and improves setextattr -i. + log_must mkfile 20m /tmp/xattr.$$ + for i in {0..10}; do + log_must eval "set_xattr_stdin xattr$i $TESTDIR/myfile.$$ \ + < /tmp/xattr.$$" + done +elif 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 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 ec608ce28..efa9faab9 100755 --- a/tests/zfs-tests/tests/functional/xattr/xattr_013_pos.ksh +++ b/tests/zfs-tests/tests/functional/xattr/xattr_013_pos.ksh @@ -65,15 +65,7 @@ log_must umount $TESTDIR log_must zfs mount -o noxattr $TESTPOOL/$TESTFS # check that we can't perform xattr operations -if is_linux; then - log_mustnot get_xattr passwd $TESTDIR/myfile.$$ - log_mustnot rm_xattr passwd $TESTDIR/myfile.$$ - log_mustnot set_xattr_stdin passwd $TESTDIR/myfile.$$ </etc/passwd - - log_must touch $TESTDIR/new.$$ - log_mustnot set_xattr_stdin passwd $TESTDIR/new.$$ </etc/passwd - log_mustnot rm_xattr passwd $TESTDIR/new.$$ -else +if is_illumos; then 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 . \ @@ -83,6 +75,14 @@ else 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" +else + log_mustnot get_xattr passwd $TESTDIR/myfile.$$ + log_mustnot rm_xattr passwd $TESTDIR/myfile.$$ + log_mustnot set_xattr_stdin passwd $TESTDIR/myfile.$$ </etc/passwd + + log_must touch $TESTDIR/new.$$ + log_mustnot set_xattr_stdin passwd $TESTDIR/new.$$ </etc/passwd + log_mustnot rm_xattr passwd $TESTDIR/new.$$ fi # now mount the filesystem again as normal @@ -94,10 +94,10 @@ verify_xattr $TESTDIR/myfile.$$ passwd /etc/passwd # there should be no xattr on the file we created while the fs was mounted # -o noxattr -if is_linux; then - log_mustnot get_xattr passwd $TESTDIR/new.$$ -else +if is_illumos; then log_mustnot eval "runat $TESTDIR/new.$$ cat passwd > /dev/null 2>&1" +else + log_mustnot get_xattr passwd $TESTDIR/new.$$ fi create_xattr $TESTDIR/new.$$ passwd /etc/passwd diff --git a/tests/zfs-tests/tests/functional/xattr/xattr_common.kshlib b/tests/zfs-tests/tests/functional/xattr/xattr_common.kshlib index 5c7e8eb65..bc06f4716 100644 --- a/tests/zfs-tests/tests/functional/xattr/xattr_common.kshlib +++ b/tests/zfs-tests/tests/functional/xattr/xattr_common.kshlib @@ -39,14 +39,14 @@ function create_xattr { # filename xattr_name xattr_contents typeset XATTR_NAME=$2 typeset XATTR_CONTENTS=$3 - if is_linux; then - log_mustnot get_xattr $XATTR_NAME $FILE - log_must set_xattr_stdin $XATTR_NAME $FILE < $XATTR_CONTENTS - else + if is_illumos; then # read any empty xattr on that file log_must runat $FILE ls # create the xattr log_must runat $FILE cp $XATTR_CONTENTS $XATTR_NAME + else + log_mustnot get_xattr $XATTR_NAME $FILE + log_must set_xattr_stdin $XATTR_NAME $FILE < $XATTR_CONTENTS fi verify_xattr $FILE $XATTR_NAME $XATTR_CONTENTS @@ -59,12 +59,12 @@ function compare_xattrs { # filename1 filename2 xattr_name typeset FILE2=$2 typeset XATTR_NAME=$3 - if is_linux; then - get_xattr $XATTR_NAME $FILE1 > $TEST_BASE_DIR/file1.$$ - get_xattr $XATTR_NAME $FILE2 > $TEST_BASE_DIR/file2.$$ - else + if is_illumos; then runat $FILE1 cat $XATTR_NAME > $TEST_BASE_DIR/file1.$$ runat $FILE2 cat $XATTR_NAME > $TEST_BASE_DIR/file2.$$ + else + get_xattr $XATTR_NAME $FILE1 > $TEST_BASE_DIR/file1.$$ + get_xattr $XATTR_NAME $FILE2 > $TEST_BASE_DIR/file2.$$ fi log_must diff $TEST_BASE_DIR/file1.$$ $TEST_BASE_DIR/file2.$$ @@ -77,12 +77,12 @@ function verify_xattr { # filename xattr_name xattr_contents typeset XATTR_CONTENTS=$3 # read the xattr, writing it to a temp file - if is_linux; then + if is_illumos; then log_must eval \ - "get_xattr $XATTR_NAME $FILE > $TEST_BASE_DIR/$XATTR_NAME.$$" + "runat $FILE cat $XATTR_NAME > $TEST_BASE_DIR/$XATTR_NAME.$$ 2>&1" else log_must eval \ - "runat $FILE cat $XATTR_NAME > $TEST_BASE_DIR/$XATTR_NAME.$$ 2>&1" + "get_xattr $XATTR_NAME $FILE > $TEST_BASE_DIR/$XATTR_NAME.$$" fi log_must diff $XATTR_CONTENTS $TEST_BASE_DIR/$XATTR_NAME.$$ @@ -94,12 +94,12 @@ function delete_xattr { # filename xattr_name typeset XATTR_NAME=$2 # delete the xattr - if is_linux; then - log_must rm_xattr $XATTR_NAME $FILE - log_mustnot get_xattr $XATTR_NAME $FILE - else + if is_illumos; then log_must runat $FILE rm $XATTR_NAME log_mustnot eval "runat $FILE ls $XATTR_NAME > /dev/null 2>&1" + else + log_must rm_xattr $XATTR_NAME $FILE + log_mustnot get_xattr $XATTR_NAME $FILE fi } @@ -108,14 +108,14 @@ function verify_write_xattr { # filename xattr_name typeset FILE=$1 typeset XATTR_NAME=$2 - if is_linux; then - log_must set_xattr_stdin $XATTR_NAME $FILE < /etc/passwd - log_must eval \ - "get_xattr $XATTR_NAME $FILE > $TEST_BASE_DIR/$XATTR_NAME.$$" - else + if is_illumos; then log_must eval "runat $FILE dd if=/etc/passwd of=$XATTR_NAME" log_must eval \ "runat $FILE cat $XATTR_NAME > $TEST_BASE_DIR/$XATTR_NAME.$$ 2>&1" + else + log_must set_xattr_stdin $XATTR_NAME $FILE < /etc/passwd + log_must eval \ + "get_xattr $XATTR_NAME $FILE > $TEST_BASE_DIR/$XATTR_NAME.$$" fi log_must dd if=/etc/passwd of=$TEST_BASE_DIR/passwd_dd.$$ log_must diff $TEST_BASE_DIR/passwd_dd.$$ $TEST_BASE_DIR/$XATTR_NAME.$$ @@ -123,15 +123,15 @@ function verify_write_xattr { # filename xattr_name } # this function is to create the expected output -function create_expected_output { # expected_output_file contents_of_the_output - typeset FILE=$1 - shift - if [[ -f $FILE ]]; then - log_must rm $FILE - fi - - for line in $@ - do - log_must eval "echo $line >> $FILE" - done - } +function create_expected_output { # expected_output_file contents_of_the_output + typeset FILE=$1 + shift + if [[ -f $FILE ]]; then + log_must rm $FILE + fi + + for line in $@ + do + log_must eval "echo $line >> $FILE" + done +} |