7290 ZFS test suite needs to control what utilities it can run
[unleashed.git] / usr / src / test / zfs-tests / tests / functional / cli_root / zfs_destroy / zfs_destroy_015_pos.ksh
blob487c7a64227e4d3346aa66f7a1fe26817137d38e
1 #!/bin/ksh
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
6 # 1.0 of the CDDL.
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.
17 # DESCRIPTION
18 # zfs destroy <dataset@snap1,snap2..> can destroy a list of multiple
19 # snapshots from the same datasets
21 # STRATEGY
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
26 # pools
28 . $STF_SUITE/include/libtest.shlib
29 . $STF_SUITE/tests/functional/cli_root/zfs_destroy/zfs_destroy.cfg
31 function cleanup
33 datasetexists $TESTPOOL/$TESTFS1 && zfs destroy -R $TESTPOOL/$TESTFS1
34 datasetexists $TESTPOOL/$TESTFS2 && zfs destroy -R $TESTPOOL/$TESTFS2
35 poolexists $TESTPOOL2 && zpool destroy $TESTPOOL2
36 rm -rf $VIRTUAL_DISK
39 log_assert "zfs destroy for multiple snapshot is handled correctly"
40 log_onexit cleanup
42 zfs create $TESTPOOL/$TESTFS1
43 typeset -i i=1
44 snaplist=""
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
49 done
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
54 done
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"
60 for i in 1 2 3; do
61 log_must zfs snapshot $TESTPOOL/$TESTFS1@snap$i
62 done
63 log_must zfs destroy $TESTPOOL/$TESTFS1@snap1,snap2,snapple1,snappy2,snap3
64 for i in 1 2 3; do
65 log_mustnot snapexists $TESTPOOL/$TESTFS1@snap$i
66 done
68 log_note "zfs destroy with some snapshot names having special characters"
69 for i in 1 2 3; do
70 log_must zfs snapshot $TESTPOOL/$TESTFS1@snap$i
71 done
72 log_must zfs destroy $TESTPOOL/$TESTFS1@snap1,@,snap2,,,,snap3,
73 for i in 1 2 3; do
74 log_mustnot snapexists $TESTPOOL/$TESTFS1@snap$i
75 done
76 log_note "zfs destroy for too many snapshots"
77 snaplist=""
78 for i in {1..100}; do
79 log_must zfs snapshot $TESTPOOL/$TESTFS1@snap$i
80 snaplist=$snaplist,snap$i
81 done
82 snaplist=${snaplist#,}
83 log_must zfs destroy $TESTPOOL/$TESTFS1@$snaplist
84 for i in {1..100}; do
85 log_mustnot snapexists $TESTPOOL/$TESTFS1@snap$i
86 done
87 log_note "zfs destroy multiple snapshots with hold"
88 snaplist=""
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
93 done
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
98 done
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
104 done
105 snaplist=""
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
109 done
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
115 done
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"