Update ZTS to work on FreeBSD

Update the common ZTS scripts and individual test cases as needed 
in order to allow them to be run on FreeBSD.  The high level goal
is to provide compatibility wrappers whenever possible to minimize
changes to individual test cases.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: John Kennedy <john.kennedy@delphix.com>
Signed-off-by: Matt Macy <mmacy@FreeBSD.org>
Signed-off-by: Ryan Moeller <ryan@ixsystems.com>
Closes #9692
This commit is contained in:
Matthew Macy
2019-12-18 12:29:43 -08:00
committed by Brian Behlendorf
parent 118fc3ef07
commit 7839c4b5e1
145 changed files with 1723 additions and 573 deletions
@@ -43,6 +43,10 @@ if ! is_linux; then
fi
fi
if is_freebsd; then
log_must sysctl vfs.usermount=0
fi
if is_linux; then
log_must set_tunable64 zfs_admin_snapshot 0
fi
@@ -483,6 +483,7 @@ function verify_userprop
typeset stamp=${perm}.${user}.$(date +'%F-%T-%N')
user_run $user zfs set "$user:ts=$stamp" $dtst
zpool sync ${dtst%%/*}
if [[ $stamp != $(get_prop "$user:ts" $dtst) ]]; then
return 1
fi
@@ -684,7 +685,7 @@ function verify_fs_destroy
# Verify that given the correct delegation, a regular user can:
# Take a snapshot of an unmounted dataset
# Take a snapshot of an mounted dataset
# Take a snapshot of a mounted dataset
# Create a snapshot by making a directory in the .zfs/snapshot directory
function verify_fs_snapshot
{
@@ -716,12 +717,15 @@ function verify_fs_snapshot
fi
log_must zfs destroy $snap
typeset snapdir=${mntpt}/.zfs/snapshot/snap.$stamp
user_run $user mkdir $snapdir
if ! datasetexists $snap ; then
return 1
# Creating snaps via mkdir is not supported on FreeBSD
if ! is_freebsd; then
typeset snapdir=${mntpt}/.zfs/snapshot/snap.$stamp
user_run $user mkdir $snapdir
if ! datasetexists $snap ; then
return 1
fi
log_must zfs destroy $snap
fi
log_must zfs destroy $snap
return 0
}
@@ -44,6 +44,11 @@ if ! is_linux; then
fi
fi
if is_freebsd; then
# To pass user mount tests
log_must sysctl vfs.usermount=1
fi
cleanup_user_group
# Create staff group and add two user to it
@@ -83,7 +83,7 @@ if ! cat /etc/group | awk -F: '{print $1}' | \
grep -w 'everyone' > /dev/null 2>&1
then
group_added="TRUE"
log_must groupadd everyone
log_must add_group everyone
fi
for dtst in $DATASETS ; do
@@ -92,7 +92,7 @@ for dtst in $DATASETS ; do
done
log_must restore_root_datasets
if [[ $group_added == "TRUE" ]]; then
log_must groupdel everyone
log_must del_group everyone
fi
log_pass "everyone is always interpreted as keyword passed."
@@ -87,6 +87,47 @@ set -A perms create true false \
promote true true \
xattr true false \
receive true false
elif is_freebsd; then
# Results in Results in
# Permission Filesystem Volume
#
# Removed for FreeBSD
# - zoned - zones are not supported
# - sharenfs - sharing requires superuser privileges
# - share - sharing requires superuser privileges
# - xattr - Not supported on FreeBSD
#
set -A perms create true false \
snapshot true true \
mount true false \
send true true \
allow true true \
quota true false \
reservation true true \
dnodesize true false \
recordsize true false \
mountpoint true false \
checksum true true \
compression true true \
canmount true false \
atime true false \
devices true false \
exec true false \
volsize false true \
setuid true false \
readonly true true \
snapdir true false \
userprop true true \
aclmode true false \
aclinherit true false \
rollback true true \
clone true true \
rename true true \
promote true true \
receive true false \
destroy true true
else
set -A perms create true false \
@@ -61,6 +61,12 @@ set -A perms create snapshot mount send allow quota reservation \
devices exec volsize setuid readonly snapdir userprop \
rollback clone rename promote dnodesize \
zoned xattr receive destroy
elif is_freebsd; then
set -A perms create snapshot mount send allow quota reservation \
recordsize mountpoint checksum compression canmount atime \
devices exec volsize setuid readonly snapdir userprop \
aclmode aclinherit rollback clone rename promote dnodesize \
zoned receive destroy
else
set -A perms create snapshot mount send allow quota reservation \
recordsize mountpoint checksum compression canmount atime \