aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorSean Eric Fagan <[email protected]>2022-03-18 17:02:12 -0700
committerGitHub <[email protected]>2022-03-18 17:02:12 -0700
commit565089f592426f4a8f0e3df1027f947700799fa6 (patch)
treeb1b4223cf80d5cb2a0ce84fd8560e39d2a656a47 /tests
parent3ce3d305324ba5ffddfcbc90a996a2b3a8424109 (diff)
Allow zfs send to exclude datasets
Add support for a -exclude/-X option to `zfs send` to allow dataset hierarchies to be excluded. Snapshots can be excluded using a channel program; however, this can result in failures with 'zfs send -R'; this option allows them to be excluded. Fortunately, this required a change only to cmd/zfs/zfs_main.c, using the already-existing callback argument to zfs_send() that is currently unused. Reviewed-by: Paul Dagnelie <[email protected]> Reviewed-by: Christian Schwarz <[email protected]> Reviewed-by: Ahelenia ZiemiaƄska <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Co-authored-by: Sean Eric Fagan <[email protected]> Signed-off-by: Sean Eric Fagan <[email protected]> Closes #13158
Diffstat (limited to 'tests')
-rw-r--r--tests/runfiles/common.run3
-rw-r--r--tests/zfs-tests/tests/functional/rsend/Makefile.am5
-rwxr-xr-xtests/zfs-tests/tests/functional/rsend/rsend_025_pos.ksh90
-rwxr-xr-xtests/zfs-tests/tests/functional/rsend/rsend_026_neg.ksh58
-rwxr-xr-xtests/zfs-tests/tests/functional/rsend/rsend_027_pos.ksh92
-rwxr-xr-xtests/zfs-tests/tests/functional/rsend/rsend_028_neg.ksh58
-rwxr-xr-xtests/zfs-tests/tests/functional/rsend/rsend_029_neg.ksh58
7 files changed, 363 insertions, 1 deletions
diff --git a/tests/runfiles/common.run b/tests/runfiles/common.run
index 6bc4bb583..87b669db7 100644
--- a/tests/runfiles/common.run
+++ b/tests/runfiles/common.run
@@ -824,7 +824,8 @@ tests = ['recv_dedup', 'recv_dedup_encrypted_zvol', 'rsend_001_pos',
'rsend_006_pos', 'rsend_007_pos', 'rsend_008_pos', 'rsend_009_pos',
'rsend_010_pos', 'rsend_011_pos', 'rsend_012_pos', 'rsend_013_pos',
'rsend_014_pos', 'rsend_016_neg', 'rsend_019_pos', 'rsend_020_pos',
- 'rsend_021_pos', 'rsend_022_pos', 'rsend_024_pos',
+ 'rsend_021_pos', 'rsend_022_pos', 'rsend_024_pos', 'rsend_025_pos',
+ 'rsend_026_neg', 'rsend_027_pos', 'rsend_028_neg', 'rsend_029_neg',
'send-c_verify_ratio', 'send-c_verify_contents', 'send-c_props',
'send-c_incremental', 'send-c_volume', 'send-c_zstreamdump',
'send-c_lz4_disabled', 'send-c_recv_lz4_disabled',
diff --git a/tests/zfs-tests/tests/functional/rsend/Makefile.am b/tests/zfs-tests/tests/functional/rsend/Makefile.am
index b8eb54f64..305fc0d51 100644
--- a/tests/zfs-tests/tests/functional/rsend/Makefile.am
+++ b/tests/zfs-tests/tests/functional/rsend/Makefile.am
@@ -24,6 +24,11 @@ dist_pkgdata_SCRIPTS = \
rsend_021_pos.ksh \
rsend_022_pos.ksh \
rsend_024_pos.ksh \
+ rsend_025_pos.ksh \
+ rsend_026_neg.ksh \
+ rsend_027_pos.ksh \
+ rsend_028_neg.ksh \
+ rsend_029_neg.ksh \
send_encrypted_files.ksh \
send_encrypted_hierarchy.ksh \
send_encrypted_props.ksh \
diff --git a/tests/zfs-tests/tests/functional/rsend/rsend_025_pos.ksh b/tests/zfs-tests/tests/functional/rsend/rsend_025_pos.ksh
new file mode 100755
index 000000000..99254cccd
--- /dev/null
+++ b/tests/zfs-tests/tests/functional/rsend/rsend_025_pos.ksh
@@ -0,0 +1,90 @@
+#!/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 2009 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+
+#
+# Copyright (c) 2013, 2016 by Delphix. All rights reserved.
+#
+
+. $STF_SUITE/tests/functional/rsend/rsend.kshlib
+
+# DESCRIPTION:
+# zfs send -exclude will exclude the given hierarchy
+# and only that given hierarchy.
+#
+# STRATEGY:
+# 1. Setup test model
+# 2. Create several datasets on pool.
+# 3. Send -R -X pool/dataset
+# 4. Verify receive does not have the excluded dataset(s).
+
+verify_runnable "both"
+
+function cleanup
+{
+ cleanup_pool $POOL2
+ cleanup_pool $POOL
+ log_must setup_test_model $POOL
+}
+
+log_assert "zfs send -R -X will skip excluded dataset(s)"
+log_onexit cleanup
+
+cleanup
+
+#
+# Create some datasets
+log_must zfs create -p $POOL/ds1/second/third
+log_must zfs create -p $POOL/ds2/second
+
+log_must zfs snapshot -r $POOL@presend
+
+log_must eval "zfs send -R $POOL@presend > $BACKDIR/presend"
+log_must eval "zfs receive -d -F $POOL2 < $BACKDIR/presend"
+
+for ds in ds1 ds1/second ds1/second/third \
+ ds2 ds2/second
+do
+ log_must datasetexists $POOL2/$ds
+done
+
+log_must_busy zfs destroy -r $POOL2
+
+log_must eval "zfs send -R -X $POOL/ds1/second $POOL@presend > $BACKDIR/presend"
+log_must eval "zfs receive -d -F $POOL2 < $BACKDIR/presend"
+
+for ds in ds1 ds2 ds2/second
+do
+ log_must datasetexists $POOL2/$ds
+done
+
+for ds in ds1/second ds1/second/third
+do
+ log_must datasetnonexists $POOL2/$ds
+done
+
+log_pass "zfs send -X excluded datasets"
+
diff --git a/tests/zfs-tests/tests/functional/rsend/rsend_026_neg.ksh b/tests/zfs-tests/tests/functional/rsend/rsend_026_neg.ksh
new file mode 100755
index 000000000..5248008a1
--- /dev/null
+++ b/tests/zfs-tests/tests/functional/rsend/rsend_026_neg.ksh
@@ -0,0 +1,58 @@
+#!/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 2009 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+
+#
+# Copyright (c) 2013, 2016 by Delphix. All rights reserved.
+#
+
+. $STF_SUITE/include/libtest.shlib
+. $STF_SUITE/tests/functional/rsend/rsend.kshlib
+
+# DESCRIPTION:
+# zfs send -X without -R will fail.
+#
+# STRATEGY:
+# 1. Setup test model
+# 2. Run "zfs send -X random $POOL" and check for failure.
+
+verify_runnable "both"
+
+function cleanup
+{
+ cleanup_pool $POOL2
+ cleanup_pool $POOL
+ log_must setup_test_model $POOL
+}
+
+log_assert "zfs send -X without -R will fail"
+log_onexit cleanup
+
+cleanup
+
+log_mustnot eval "zfs send -X $POOL/foobar $POOL@final"
+
+log_pass "Ensure that zfs send -X without -R will fail"
diff --git a/tests/zfs-tests/tests/functional/rsend/rsend_027_pos.ksh b/tests/zfs-tests/tests/functional/rsend/rsend_027_pos.ksh
new file mode 100755
index 000000000..645685e69
--- /dev/null
+++ b/tests/zfs-tests/tests/functional/rsend/rsend_027_pos.ksh
@@ -0,0 +1,92 @@
+#!/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 2009 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+
+#
+# Copyright (c) 2013, 2016 by Delphix. All rights reserved.
+#
+
+. $STF_SUITE/tests/functional/rsend/rsend.kshlib
+
+# DESCRIPTION:
+# zfs send with multiple -X/--exclude options will
+# exclude all of them.
+#
+# STRATEGY:
+# 1. Setup test model
+# 2. Create several datasets on pool.
+# 3. Send -R -X pool/dataset
+# 4. Verify receive does not have the excluded dataset(s).
+
+verify_runnable "both"
+
+function cleanup
+{
+ cleanup_pool $POOL2
+ cleanup_pool $POOL
+ log_must setup_test_model $POOL
+}
+
+log_assert "zfs send with multiple -X options will skip excluded dataset"
+log_onexit cleanup
+
+cleanup
+
+#
+# Create some datasets
+log_must zfs create -p $POOL/ds1/second/third
+log_must zfs create -p $POOL/ds2/second
+log_must zfs create -p $POOL/ds3/first/second/third
+
+log_must zfs snapshot -r $POOL@presend
+
+log_must eval "zfs send -R $POOL@presend > $BACKDIR/presend"
+log_must eval "zfs receive -d -F $POOL2 < $BACKDIR/presend"
+
+for ds in ds1 ds1/second ds1/second/third \
+ ds2 ds2/second \
+ ds3 ds3/first ds3/first/second ds3/first/second/third
+do
+ log_must datasetexists $POOL2/$ds
+done
+
+log_must_busy zfs destroy -r $POOL2
+
+log_must eval "zfs send -R -X $POOL/ds1/second --exclude $POOL/ds3/first/second $POOL@presend > $BACKDIR/presend"
+log_must eval "zfs receive -d -F $POOL2 < $BACKDIR/presend"
+
+for ds in ds1 ds2 ds2/second ds3 ds3/first
+do
+ log_must datasetexists $POOL2/$ds
+done
+
+for ds in ds1/second ds1/second/third ds3/first/second ds3/first/second/third
+do
+ log_must datasetnonexists $POOL2/$ds
+done
+
+log_pass "zfs send with multiple -X options excluded datasets"
+
diff --git a/tests/zfs-tests/tests/functional/rsend/rsend_028_neg.ksh b/tests/zfs-tests/tests/functional/rsend/rsend_028_neg.ksh
new file mode 100755
index 000000000..e9186d793
--- /dev/null
+++ b/tests/zfs-tests/tests/functional/rsend/rsend_028_neg.ksh
@@ -0,0 +1,58 @@
+#!/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 2009 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+
+#
+# Copyright (c) 2013, 2016 by Delphix. All rights reserved.
+#
+
+. $STF_SUITE/include/libtest.shlib
+. $STF_SUITE/tests/functional/rsend/rsend.kshlib
+
+# DESCRIPTION:
+# zfs send -X with invalid dataset name will fail.
+#
+# STRATEGY:
+# 1. Setup test model
+# 2. Run "zfs send -X $POOL $POOL" and check for failure.
+
+verify_runnable "both"
+
+function cleanup
+{
+ cleanup_pool $POOL2
+ cleanup_pool $POOL
+ log_must setup_test_model $POOL
+}
+
+log_assert "zfs send -X $POOL will fail"
+log_onexit cleanup
+
+cleanup
+
+log_mustnot eval "zfs send -X $POOL $POOL@final"
+
+log_pass "Ensure that zfs send -X $POOL will fail"
diff --git a/tests/zfs-tests/tests/functional/rsend/rsend_029_neg.ksh b/tests/zfs-tests/tests/functional/rsend/rsend_029_neg.ksh
new file mode 100755
index 000000000..7c3a96b71
--- /dev/null
+++ b/tests/zfs-tests/tests/functional/rsend/rsend_029_neg.ksh
@@ -0,0 +1,58 @@
+#!/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 2009 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+
+#
+# Copyright (c) 2013, 2016 by Delphix. All rights reserved.
+#
+
+. $STF_SUITE/include/libtest.shlib
+. $STF_SUITE/tests/functional/rsend/rsend.kshlib
+
+# DESCRIPTION:
+# zfs send -X with invalid dataset name will fail.
+#
+# STRATEGY:
+# 1. Setup test model
+# 2. Run "zfs send -X $POOL/da%set $POOL" and check for failure.
+
+verify_runnable "both"
+
+function cleanup
+{
+ cleanup_pool $POOL2
+ cleanup_pool $POOL
+ log_must setup_test_model $POOL
+}
+
+log_assert "zfs send -X $POOL/da%set will fail"
+log_onexit cleanup
+
+cleanup
+
+log_mustnot eval "zfs send -X $POOL/da%set $POOL@final"
+
+log_pass "Ensure that zfs send -X with invalid dataset name will fail"