]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Verify 'zfs destroy' will unshare the dataset
authorPrakash Surya <prakash.surya@delphix.com>
Fri, 21 Sep 2018 17:54:49 +0000 (10:54 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 3 Oct 2018 17:17:58 +0000 (10:17 -0700)
This change adds a new test case to the zfs-test suite to verify that
when 'zfs destroy' is used on a shared dataset, the dataset will be
unshared after the destroy operation completes.

Reviewed by: loli10K <ezomori.nozomu@gmail.com>
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Prakash Surya <prakash.surya@delphix.com>
Closes #7941

tests/runfiles/linux.run
tests/zfs-tests/include/libtest.shlib
tests/zfs-tests/tests/functional/cli_root/zfs_unshare/Makefile.am
tests/zfs-tests/tests/functional/cli_root/zfs_unshare/zfs_unshare_007_pos.ksh [new file with mode: 0755]

index 32bc9c3283616c506751bb0131d67679df3514e9..92964139b88fd546edff4418aa9bf5a7d0eb8f54 100644 (file)
@@ -282,7 +282,8 @@ tags = ['functional', 'cli_root', 'zfs_unmount']
 
 [tests/functional/cli_root/zfs_unshare]
 tests = ['zfs_unshare_001_pos', 'zfs_unshare_002_pos', 'zfs_unshare_003_pos',
-    'zfs_unshare_004_neg', 'zfs_unshare_005_neg', 'zfs_unshare_006_pos']
+    'zfs_unshare_004_neg', 'zfs_unshare_005_neg', 'zfs_unshare_006_pos',
+    'zfs_unshare_007_pos']
 tags = ['functional', 'cli_root', 'zfs_unshare']
 
 [tests/functional/cli_root/zfs_upgrade]
index 608f4f29b1fd1bde9335cd047c3dcbace973dabe..28ee345c8bc34f316f1331b0e207f81c100c68cf 100644 (file)
@@ -1230,30 +1230,11 @@ function datasetnonexists
        return 0
 }
 
-#
-# Given a mountpoint, or a dataset name, determine if it is shared via NFS.
-#
-# Returns 0 if shared, 1 otherwise.
-#
-function is_shared
+function is_shared_impl
 {
        typeset fs=$1
        typeset mtpt
 
-       if [[ $fs != "/"* ]] ; then
-               if datasetnonexists "$fs" ; then
-                       return 1
-               else
-                       mtpt=$(get_prop mountpoint "$fs")
-                       case $mtpt in
-                               none|legacy|-) return 1
-                                       ;;
-                               *)      fs=$mtpt
-                                       ;;
-                       esac
-               fi
-       fi
-
        if is_linux; then
                for mtpt in `share | awk '{print $1}'` ; do
                        if [[ $mtpt == $fs ]] ; then
@@ -1277,6 +1258,33 @@ function is_shared
        return 1
 }
 
+#
+# Given a mountpoint, or a dataset name, determine if it is shared via NFS.
+#
+# Returns 0 if shared, 1 otherwise.
+#
+function is_shared
+{
+       typeset fs=$1
+       typeset mtpt
+
+       if [[ $fs != "/"* ]] ; then
+               if datasetnonexists "$fs" ; then
+                       return 1
+               else
+                       mtpt=$(get_prop mountpoint "$fs")
+                       case $mtpt in
+                               none|legacy|-) return 1
+                                       ;;
+                               *)      fs=$mtpt
+                                       ;;
+                       esac
+               fi
+       fi
+
+       is_shared_impl "$fs"
+}
+
 #
 # Given a dataset name determine if it is shared via SMB.
 #
index e1d2e6b8a891ae45adfbeecc3da9ca814a19c8c3..0845f1e2f9f61291e8cbeda71aff7ecc7eee0f9e 100644 (file)
@@ -7,4 +7,5 @@ dist_pkgdata_SCRIPTS = \
        zfs_unshare_003_pos.ksh \
        zfs_unshare_004_neg.ksh \
        zfs_unshare_005_neg.ksh \
-       zfs_unshare_006_pos.ksh
+       zfs_unshare_006_pos.ksh \
+       zfs_unshare_007_pos.ksh
diff --git a/tests/zfs-tests/tests/functional/cli_root/zfs_unshare/zfs_unshare_007_pos.ksh b/tests/zfs-tests/tests/functional/cli_root/zfs_unshare/zfs_unshare_007_pos.ksh
new file mode 100755 (executable)
index 0000000..0749dc1
--- /dev/null
@@ -0,0 +1,72 @@
+#!/bin/ksh -p
+#
+# 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 2016, loli10K. All rights reserved.
+# Copyright (c) 2018 by Delphix. All rights reserved.
+#
+
+. $STF_SUITE/include/libtest.shlib
+
+#
+# DESCRIPTION:
+# Verify that 'zfs destroy' on a shared dataset, will unshare it.
+#
+# STRATEGY:
+# 1. Create and share a dataset with sharenfs.
+# 2. Verify the dataset is shared.
+# 3. Invoke 'zfs destroy' on the dataset.
+# 4. Verify the dataset is not shared.
+#
+
+verify_runnable "global"
+
+function cleanup
+{
+       if datasetexists "$TESTPOOL/$TESTFS/shared1"; then
+               log_must zfs destroy -f $TESTPOOL/$TESTFS/shared1
+       fi
+}
+
+log_assert "Verify 'zfs destroy' will unshare the dataset"
+log_onexit cleanup
+
+# 1. Create and share a dataset with sharenfs.
+log_must zfs create \
+       -o sharenfs=on -o mountpoint=$TESTDIR/1 $TESTPOOL/$TESTFS/shared1
+
+#
+# 2. Verify the datasets is shared.
+#
+# The "non-impl" variant of "is_shared" requires the dataset to exist.
+# 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.
+log_must zfs destroy -f $TESTPOOL/$TESTFS/shared1
+
+# 4. Verify the dataset is not shared.
+log_mustnot eval "is_shared_impl $TESTDIR/1"
+
+log_pass "'zfs destroy' will unshare the dataset."