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 # Verify zfs destroy test for range of snapshots by giving a list
19 # of valid and invalid arguments.
22 # 1. Create a list of valid and invalid arguments for range snapshot
24 # 2. Set up a filesystem and a volume with multiple snapshots
25 # 3. Run zfs destroy for all the arguments and verify existence of snapshots
26 # 4. Verify the destroy for snapshots with clones and hold
28 . $STF_SUITE/include/libtest.shlib
32 datasetexists $TESTPOOL/$TESTFS1 && \
33 log_must zfs destroy -R $TESTPOOL/$TESTFS1
34 datasetexists $TESTPOOL/$TESTVOL && \
35 log_must zfs destroy -Rf $TESTPOOL/$TESTVOL
38 function setup_snapshots
41 datasetexists $TESTPOOL/$TESTFS1@snap$i && \
42 log_must zfs destroy $TESTPOOL/$TESTFS1@snap$i
43 datasetexists $TESTPOOL/$TESTVOL@snap$i && \
44 log_must zfs destroy $TESTPOOL/$TESTVOL@snap$i
45 log_must zfs snapshot $TESTPOOL/$TESTFS1@snap$i
46 log_must zfs snapshot $TESTPOOL/$TESTVOL@snap$i
50 function verify_snapshots
52 typeset snap_exists=${1:-0}
53 if [[ $snap_exists == 1 ]]; then
55 snapexists $TESTPOOL/$TESTFS1@snap$i || \
56 log_fail "zfs destroy should not have destroyed" \
57 "$TESTPOOL/$TESTFS1@snap$i"
58 snapexists $TESTPOOL/$TESTVOL@snap$i || \
59 log_fail "zfs destroy should not have destroyed" \
60 "$TESTPOOL/$TESTVOL@snap$i"
64 snapexists $TESTPOOL/$TESTFS1@snap$i && \
65 log_fail "zfs destroy should have destroyed" \
66 "$TESTPOOL/$TESTFS1@snap$i"
67 snapexists $TESTPOOL/$TESTVOL@snap$i && \
68 log_fail "zfs destroy should have destroyed" \
69 "$TESTPOOL/$TESTVOL@snap$i"
74 invalid_args="@snap0%snap5 @snap1%snap6 @snap0%snap6 @snap5%snap1 \
75 @snap1%$TESTPOOL/$TESTFS1@snap5 @snap1%%snap5 @snap1%@snap5 \
76 @@snap1%snap5 snap1%snap5 snap1%snap3%snap5"
77 valid_args="@snap1%snap5 @%"
78 log_assert "zfs destroy deletes ranges of snapshots"
81 log_must zfs create $TESTPOOL/$TESTFS1
82 log_must zfs create -V $VOLSIZE $TESTPOOL/$TESTVOL
84 log_note "Verify the valid arguments"
86 for args in $valid_args; do
88 log_must zfs destroy $TESTPOOL/$TESTFS1$args
89 log_must zfs destroy $TESTPOOL/$TESTVOL$args
93 log_note "Verify invalid arguments"
95 for args in $invalid_args; do
96 log_mustnot zfs destroy $TESTPOOL/$TESTFS1$args
97 log_mustnot zfs destroy $TESTPOOL/$TESTVOL$args
98 log_must verify_snapshots 1
101 log_note "Destroy the beginning range"
103 log_must zfs destroy $TESTPOOL/$TESTFS1@%snap3
104 log_must zfs destroy $TESTPOOL/$TESTVOL@%snap3
111 log_note "Destroy the mid range"
112 log_must zfs destroy $TESTPOOL/$TESTFS1@snap2%snap4
113 log_must zfs destroy $TESTPOOL/$TESTVOL@snap2%snap4
116 log_must zfs destroy $TESTPOOL/$TESTFS1@snap1%snap5
117 log_must zfs destroy $TESTPOOL/$TESTVOL@snap1%snap5
122 log_note "Destroy the end range"
123 log_must zfs destroy $TESTPOOL/$TESTFS1@snap3%
124 log_must zfs destroy $TESTPOOL/$TESTVOL@snap3%
131 log_note "Destroy a simple list"
132 log_must zfs destroy $TESTPOOL/$TESTFS1@snap2,snap4
133 log_must zfs destroy $TESTPOOL/$TESTVOL@snap2,snap4
140 log_note "Destroy a list and range together"
141 log_must zfs destroy $TESTPOOL/$TESTFS1@snap1%snap3,snap5
142 log_must zfs destroy $TESTPOOL/$TESTVOL@snap1%snap3,snap5
148 snaps="1 2 3 5 6 7 8 9 10"
150 log_note "Destroy a list of ranges"
151 log_must zfs destroy $TESTPOOL/$TESTFS1@snap1%snap3,snap5
152 log_must zfs destroy $TESTPOOL/$TESTVOL@snap1%snap3,snap5
160 log_note "Snapshot destroy with hold"
162 for i in 1 2 3 4 5; do
163 log_must zfs hold keep $TESTPOOL/$TESTFS1@snap$i
164 log_must zfs hold keep $TESTPOOL/$TESTVOL@snap$i
166 log_mustnot zfs destroy $TESTPOOL/$TESTFS1@snap1%snap5
167 log_mustnot zfs destroy $TESTPOOL/$TESTVOL@snap1%snap5
169 for i in 1 2 3 4 5; do
170 log_must zfs release keep $TESTPOOL/$TESTFS1@snap$i
171 log_must zfs release keep $TESTPOOL/$TESTVOL@snap$i
173 log_must zfs destroy $TESTPOOL/$TESTFS1@snap1%snap5
174 log_must zfs destroy $TESTPOOL/$TESTVOL@snap1%snap5
177 log_note "Range destroy for snapshots having clones"
179 for i in 1 2 3 4 5; do
180 log_must zfs clone $TESTPOOL/$TESTFS1@snap$i $TESTPOOL/$TESTFS1/clone$i
182 log_must zfs destroy -R $TESTPOOL/$TESTFS1@snap1%snap5
183 log_must zfs destroy $TESTPOOL/$TESTVOL@snap1%snap5
186 log_pass "'zfs destroy' successfully destroys ranges of snapshots"