ZTS: Refactor is_shared, fix impl on FreeBSD

FreeBSD doesn't have a `share` command.  It does have showmount.

Split the separate platform impls out of is_shared_impl.
Dispatch to the correct platform impl function from is_shared.
Eliminate the use of is_shared_impl from tests.  is_shared works.

Reviewed-by: John Kennedy <john.kennedy@delphix.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
Closes #10037
This commit is contained in:
Ryan Moeller 2020-02-21 18:59:20 -05:00 committed by GitHub
parent f5f438194d
commit b7dbbf6aa7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 17 deletions

View File

@ -127,6 +127,7 @@ export SYSTEM_FILES_FREEBSD='chflags
rmextattr rmextattr
setextattr setextattr
sha256 sha256
showmount
swapctl swapctl
sysctl sysctl
uncompress' uncompress'

View File

@ -1324,20 +1324,18 @@ function datasetnonexists
return 0 return 0
} }
function is_shared_impl function is_shared_freebsd
{
typeset fs=$1
showmount -E | grep -qx $fs
}
function is_shared_illumos
{ {
typeset fs=$1 typeset fs=$1
typeset mtpt typeset mtpt
if is_linux; then
for mtpt in `share | awk '{print $1}'` ; do
if [[ $mtpt == $fs ]] ; then
return 0
fi
done
return 1
fi
for mtpt in `share | awk '{print $2}'` ; do for mtpt in `share | awk '{print $2}'` ; do
if [[ $mtpt == $fs ]] ; then if [[ $mtpt == $fs ]] ; then
return 0 return 0
@ -1352,6 +1350,19 @@ function is_shared_impl
return 1 return 1
} }
function is_shared_linux
{
typeset fs=$1
typeset mtpt
for mtpt in `share | awk '{print $1}'` ; do
if [[ $mtpt == $fs ]] ; then
return 0
fi
done
return 1
}
# #
# Given a mountpoint, or a dataset name, determine if it is shared via NFS. # Given a mountpoint, or a dataset name, determine if it is shared via NFS.
# #
@ -1376,7 +1387,11 @@ function is_shared
fi fi
fi fi
is_shared_impl "$fs" case $(uname) in
FreeBSD) is_shared_freebsd "$fs" ;;
Linux) is_shared_linux "$fs" ;;
*) is_shared_illumos "$fs" ;;
esac
} }
# #

View File

@ -57,16 +57,12 @@ log_must zfs create \
# #
# 2. Verify the datasets is shared. # 2. Verify the datasets is shared.
# #
# The "non-impl" variant of "is_shared" requires the dataset to exist. log_must is_shared $TESTDIR/1
# Thus, we can only use the "impl" variant in step 4, below. To be
# consistent with step 4, we also use the "impl" variant here.
#
log_must eval "is_shared_impl $TESTDIR/1"
# 3. Invoke 'zfs destroy' on the dataset. # 3. Invoke 'zfs destroy' on the dataset.
log_must zfs destroy -f $TESTPOOL/$TESTFS/shared1 log_must zfs destroy -f $TESTPOOL/$TESTFS/shared1
# 4. Verify the dataset is not shared. # 4. Verify the dataset is not shared.
log_mustnot eval "is_shared_impl $TESTDIR/1" log_mustnot is_shared $TESTDIR/1
log_pass "'zfs destroy' will unshare the dataset." log_pass "'zfs destroy' will unshare the dataset."