3 # This file and its contents are supplied under the terms of the
4 # Common Development and Distribution License ("CDDL"), version 1.0.
5 # You may only use this file in accordance with the terms of version
8 # A full copy of the text of the CDDL should have accompanied this
9 # source. A copy of the CDDL is also available via the Internet at
10 # http://www.illumos.org/license/CDDL.
14 # Copyright (c) 2012, 2016 by Delphix. All rights reserved.
18 # zfs destroy <dataset@snap1,snap2..> can destroy a list of multiple
19 # snapshots from the same datasets
22 # 1. Create multiple snapshots for the same datset
23 # 2. Run zfs destroy for these snapshots for a mix of valid and
24 # invalid snapshot names
25 # 3. Run zfs destroy for snapshots from different datasets and
28 .
$STF_SUITE/include
/libtest.shlib
29 .
$STF_SUITE/tests
/functional
/cli_root
/zfs_destroy
/zfs_destroy.cfg
33 datasetexists
$TESTPOOL/$TESTFS1 && zfs destroy
-R $TESTPOOL/$TESTFS1
34 datasetexists
$TESTPOOL/$TESTFS2 && zfs destroy
-R $TESTPOOL/$TESTFS2
35 poolexists
$TESTPOOL2 && zpool destroy
$TESTPOOL2
39 log_assert
"zfs destroy for multiple snapshot is handled correctly"
42 zfs create
$TESTPOOL/$TESTFS1
45 log_note
"zfs destroy on valid snapshot names"
46 for i
in 1 2 3 4 5; do
47 log_must zfs snapshot
$TESTPOOL/$TESTFS1@snap
$i
48 snaplist
=$snaplist,snap
$i
50 snaplist
=${snaplist#,}
51 log_must zfs destroy
$TESTPOOL/$TESTFS1@
$snaplist
52 for i
in 1 2 3 4 5; do
53 log_mustnot snapexists
$TESTPOOL/$TESFS1@snap
$i
56 log_note
"zfs destroy with all bogus snapshot names"
57 log_mustnot zfs destroy
$TESTPOOL/$TESTFS1@snap12
,snap21
,sna@pple1@
,s
""nappy2
59 log_note
"zfs destroy with some bogus snapshot names"
61 log_must zfs snapshot
$TESTPOOL/$TESTFS1@snap
$i
63 log_must zfs destroy
$TESTPOOL/$TESTFS1@snap1
,snap2
,snapple1
,snappy2
,snap3
65 log_mustnot snapexists
$TESTPOOL/$TESTFS1@snap
$i
68 log_note
"zfs destroy with some snapshot names having special characters"
70 log_must zfs snapshot
$TESTPOOL/$TESTFS1@snap
$i
72 log_must zfs destroy
$TESTPOOL/$TESTFS1@snap1
,@
,snap2
,,,,snap3
,
74 log_mustnot snapexists
$TESTPOOL/$TESTFS1@snap
$i
76 log_note
"zfs destroy for too many snapshots"
79 log_must zfs snapshot
$TESTPOOL/$TESTFS1@snap
$i
80 snaplist
=$snaplist,snap
$i
82 snaplist
=${snaplist#,}
83 log_must zfs destroy
$TESTPOOL/$TESTFS1@
$snaplist
85 log_mustnot snapexists
$TESTPOOL/$TESTFS1@snap
$i
87 log_note
"zfs destroy multiple snapshots with hold"
89 for i
in 1 2 3 4 5; do
90 log_must zfs snapshot
$TESTPOOL/$TESTFS1@snap
$i
91 log_must zfs hold keep
$TESTPOOL/$TESTFS1@snap
$i
92 snaplist
=$snaplist,snap
$i
94 snaplist
=${snaplist#,}
95 log_mustnot zfs destroy
$TESTPOOL/$TESTFS1@
$snaplist
96 for i
in 1 2 3 4 5; do
97 log_must zfs release keep
$TESTPOOL/$TESTFS1@snap
$i
99 log_must zfs destroy
$TESTPOOL/$TESTFS1@
$snaplist
101 log_note
"zfs destroy for multiple snapshots having clones"
102 for i
in 1 2 3 4 5; do
103 log_must zfs snapshot
$TESTPOOL/$TESTFS1@snap
$i
106 for i
in 1 2 3 4 5; do
107 log_must zfs clone
$TESTPOOL/$TESTFS1@snap
$i $TESTPOOL/$TESTFS1/clone
$i
108 snaplist
=$snaplist,snap
$i
110 snaplist
=${snaplist#,}
111 log_mustnot zfs destroy
$TESTPOOL/$TESTFS1@
$snaplist
112 for i
in 1 2 3 4 5; do
113 log_must snapexists
$TESTPOOL/$TESTFS1@snap
$i
114 log_must zfs destroy
$TESTPOOL/$TESTFS1/clone
$i
117 log_note
"zfs destroy for snapshots for different datasets"
118 log_must zfs create
$TESTPOOL/$TESTFS2
119 log_must zfs snapshot
$TESTPOOL/$TESTFS2@fs2snap
120 log_must zfs create
$TESTPOOL/$TESTFS1/$TESTFS2
121 log_must zfs snapshot
$TESTPOOL/$TESTFS1/$TESTFS2@fs12snap
123 long_arg
=$TESTPOOL/$TESTFS1@snap1
,$TESTPOOL/$TESTFS2@fs2snap
,
124 long_arg
=$long_arg$TESTPOOL/$TESTFS1/$TESTFS2@fs12snap
125 log_must zfs destroy
$long_arg
126 log_mustnot snapexists
$TESTPOOL/$TESTFS1@snap1
127 log_must snapexists
$TESTPOOL/$TESTFS2@fs2snap
128 log_must snapexists
$TESTPOOL/$TESTFS1/$TESTFS2@fs12snap
130 log_must zfs destroy
$TESTPOOL/$TESTFS1@fs2snap
,fs12snap
,snap2
131 log_must snapexists
$TESTPOOL/$TESTFS2@fs2snap
132 log_must snapexists
$TESTPOOL/$TESTFS1/$TESTFS2@fs12snap
133 log_mustnot snapexists
$TESTPOOL/$TESTFS1@snap2
135 log_must zfs destroy
$TESTPOOL/$TESTFS2@fs2snap
,fs12snap
,snap3
136 log_mustnot snapexists
$TESTPOOL/$TESTFS2@fs2snap
137 log_must snapexists
$TESTPOOL/$TESTFS1/$TESTFS2@fs12snap
138 log_must snapexists
$TESTPOOL/$TESTFS1@snap3
140 log_note
"zfs destroy for snapshots from different pools"
141 VIRTUAL_DISK
=/var
/tmp
/disk
142 log_must mkfile
$MINVDEVSIZE $VIRTUAL_DISK
143 log_must zpool create
$TESTPOOL2 $VIRTUAL_DISK
144 log_must poolexists
$TESTPOOL2
146 log_must zfs create
$TESTPOOL2/$TESTFS1
147 log_must zfs snapshot
$TESTPOOL2/$TESTFS1@snap
148 long_arg
=$TESTPOOL2/$TESTFS1@snap
,$TESTPOOL/$TESTFS1@snap3
,
149 long_arg
=$long_arg$TESTPOOL/$TESTFS1@snap5
150 log_must zfs destroy
$long_arg
151 log_mustnot snapexists
$TESTPOOL2/$TESTFS1@snap
152 log_must snapexists
$TESTPOOL/$TESTFS1@snap3
153 log_must snapexists
$TESTPOOL/$TESTFS1@snap5
155 log_must zfs snapshot
$TESTPOOL2/$TESTFS1@snap
156 log_must zfs destroy
$TESTPOOL2/$TESTFS1@snap5
,snap3
,snap
157 log_mustnot snapexists
$TESTPOOL2/$TESTFS1@snap
158 log_must snapexists
$TESTPOOL/$TESTFS1@snap3
159 log_must snapexists
$TESTPOOL/$TESTFS1@snap5
161 log_pass
"zfs destroy for multiple snapshots passes"