Mercurial > illumos > illumos-gate
comparison usr/src/test/zfs-tests/tests/functional/cli_root/zfs_destroy/zfs_destroy_005_neg.ksh @ 13899:0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
3312 Add a testrunner package for OS unit tests
3313 Add a testrunner package to convert ZFS tests from STF
Reviewed by: Matt Ahrens <matthew.ahrens@delphix.com>
Reviewed by: Will Guyette <will.guyette@delphix.com>
Reviewed by: Dan Kimmel <dan.kimmel@delphix.com>
Reviewed by: Adam Leventhal <ahl@delphix.com>
Reviewed by: Henrik Mattson <henrik.mattson@delphix.com>
Reviewed by: Sonu Pillai <sonu.pillai@delphix.com>
Reviewed by: Christopher Siden <chris.siden@delphix.com>
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: Richard Lowe <richlowe@richlowe.net>
Approved by: Richard Lowe <richlowe@richlowe.net>
author | John Wren Kennedy <john.kennedy@delphix.com> |
---|---|
date | Wed, 05 Dec 2012 22:04:50 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
13898:7f822b09519b | 13899:0bcf78798346 |
---|---|
1 #!/bin/ksh -p | |
2 # | |
3 # CDDL HEADER START | |
4 # | |
5 # The contents of this file are subject to the terms of the | |
6 # Common Development and Distribution License (the "License"). | |
7 # You may not use this file except in compliance with the License. | |
8 # | |
9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | |
10 # or http://www.opensolaris.org/os/licensing. | |
11 # See the License for the specific language governing permissions | |
12 # and limitations under the License. | |
13 # | |
14 # When distributing Covered Code, include this CDDL HEADER in each | |
15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE. | |
16 # If applicable, add the following below this CDDL HEADER, with the | |
17 # fields enclosed by brackets "[]" replaced with your own identifying | |
18 # information: Portions Copyright [yyyy] [name of copyright owner] | |
19 # | |
20 # CDDL HEADER END | |
21 # | |
22 | |
23 # | |
24 # Copyright 2009 Sun Microsystems, Inc. All rights reserved. | |
25 # Use is subject to license terms. | |
26 # | |
27 | |
28 # | |
29 # Copyright (c) 2012 by Delphix. All rights reserved. | |
30 # | |
31 | |
32 . $STF_SUITE/include/libtest.shlib | |
33 . $STF_SUITE/tests/functional/cli_root/zfs_destroy/zfs_destroy.cfg | |
34 . $STF_SUITE/tests/functional/cli_root/zfs_destroy/zfs_destroy_common.kshlib | |
35 | |
36 # | |
37 # DESCRIPTION: | |
38 # Seperately verify 'zfs destroy -f|-r|-rf|-R|-rR <dataset>' will fail in | |
39 # different conditions. | |
40 # | |
41 # STRATEGY: | |
42 # 1. Create pool, fs & vol. | |
43 # 2. Create snapshot for fs & vol. | |
44 # 3. Invoke 'zfs destroy ''|-f <dataset>', it should fail. | |
45 # 4. Create clone for fs & vol. | |
46 # 5. Invoke 'zfs destroy -r|-rf <dataset>', it should fail. | |
47 # 6. Write file to filesystem or enter snapshot mountpoint. | |
48 # 7. Invoke 'zfs destroy -R|-rR <dataset>', it should fail. | |
49 # | |
50 | |
51 verify_runnable "both" | |
52 | |
53 log_assert "Seperately verify 'zfs destroy -f|-r|-rf|-R|-rR <dataset>' will " \ | |
54 "fail in different conditions." | |
55 log_onexit cleanup_testenv | |
56 | |
57 # | |
58 # Run 'zfs destroy [-rRf] <dataset>', make sure it fail. | |
59 # | |
60 # $1 the collection of options | |
61 # $2 the collection of datasets | |
62 # | |
63 function negative_test | |
64 { | |
65 typeset options=$1 | |
66 typeset datasets=$2 | |
67 | |
68 for dtst in $datasets; do | |
69 if ! is_global_zone; then | |
70 if [[ $dtst == $VOL || $dtst == $VOLSNAP || \ | |
71 $dtst == $VOLCLONE ]] | |
72 then | |
73 log_note "UNSUPPORTED: " \ | |
74 "Volume is unavailable in LZ." | |
75 continue | |
76 fi | |
77 fi | |
78 for opt in $options; do | |
79 log_mustnot $ZFS destroy $opt $dtst | |
80 done | |
81 done | |
82 } | |
83 | |
84 # | |
85 # Create snapshots for filesystem and volume, | |
86 # and verify 'zfs destroy' fails without '-r' or '-R'. | |
87 # | |
88 setup_testenv snap | |
89 negative_test "-f" "$CTR $FS $VOL" | |
90 | |
91 # | |
92 # Create clones for filesystem and volume, | |
93 # and verify 'zfs destroy' fails without '-R'. | |
94 # | |
95 setup_testenv clone | |
96 negative_test "-r -rf" "$CTR $FS $VOL" | |
97 | |
98 # | |
99 # Get $FS mountpoint and make it busy, and verify 'zfs destroy $CTR' fails | |
100 # without '-f'. Then verify the remaining datasets are correct. See below for | |
101 # an explanation of what 'correct' means for this test. | |
102 # | |
103 mntpt=$(get_prop mountpoint $FS) | |
104 pidlist=$($MKBUSY $mntpt/$TESTFILE0) | |
105 log_note "$MKBUSY $mntpt/$TESTFILE0 (pidlist: $pidlist)" | |
106 [[ -z $pidlist ]] && log_fail "Failure from mkbusy" | |
107 negative_test "-R -rR" $CTR | |
108 | |
109 # | |
110 # Checking the outcome of the test above is tricky, because the order in | |
111 # which datasets are destroyed is not deterministic. Both $FS and $VOL are | |
112 # busy, and the remaining datasets will be different depending on whether we | |
113 # tried (and failed) to delete $FS or $VOL first. | |
114 | |
115 # The following datasets will exist independent of the order | |
116 check_dataset datasetexists $CTR $FS $VOL | |
117 | |
118 if datasetexists $VOLSNAP && datasetnonexists $FSSNAP; then | |
119 # The recursive destroy failed on $FS | |
120 check_dataset datasetnonexists $FSSNAP $FSCLONE | |
121 check_dataset datasetexists $VOLSNAP $VOLCLONE | |
122 elif datasetexists $FSSNAP && datasetnonexists $VOLSNAP; then | |
123 # The recursive destroy failed on $VOL | |
124 check_dataset datasetnonexists $VOLSNAP $VOLCLONE | |
125 check_dataset datasetexists $FSSNAP $FSCLONE | |
126 else | |
127 log_must $ZFS list -rtall | |
128 log_fail "Unexpected datasets remaining" | |
129 fi | |
130 | |
131 # | |
132 # Create the clones for test environment, and verify 'zfs destroy $FS' fails | |
133 # without '-f'. Then verify the FS snap and clone are the only datasets | |
134 # that were removed. | |
135 # | |
136 setup_testenv clone | |
137 negative_test "-R -rR" $FS | |
138 check_dataset datasetexists $CTR $FS $VOL $VOLSNAP $VOLCLONE | |
139 check_dataset datasetnonexists $FSSNAP $FSCLONE | |
140 | |
141 log_must $KILL $pidlist | |
142 log_mustnot $PGREP -fl $MKBUSY | |
143 pidlist="" | |
144 | |
145 # | |
146 # Create the clones for test environment and make the volume busy. | |
147 # Then verify 'zfs destroy $CTR' fails without '-f'. | |
148 # | |
149 # Then verify the expected datasets exist (see below). | |
150 # | |
151 if is_global_zone; then | |
152 setup_testenv clone | |
153 pidlist=$($MKBUSY $TESTDIR1/$TESTFILE0) | |
154 log_note "$MKBUSY $TESTDIR1/$TESTFILE0 (pidlist: $pidlist)" | |
155 [[ -z $pidlist ]] && log_fail "Failure from mkbusy" | |
156 negative_test "-R -rR" $CTR | |
157 check_dataset datasetexists $CTR $VOL | |
158 check_dataset datasetnonexists $VOLSNAP $VOLCLONE | |
159 | |
160 # Here again, the non-determinism of destroy order is a factor. $FS, | |
161 # $FSSNAP and $FSCLONE will still exist here iff we attempted to destroy | |
162 # $VOL (and failed) first. So check that either all of the datasets are | |
163 # present, or they're all gone. | |
164 if datasetexists $FS; then | |
165 check_dataset datasetexists $FS $FSSNAP $FSCLONE | |
166 else | |
167 check_dataset datasetnonexists $FS $FSSNAP $FSCLONE | |
168 fi | |
169 fi | |
170 | |
171 # | |
172 # Create the clones for test environment and make the volume busy. | |
173 # Then verify 'zfs destroy $VOL' fails without '-f'. | |
174 # | |
175 # Then verify the snapshot and clone are destroyed, but nothing else is. | |
176 # | |
177 if is_global_zone; then | |
178 setup_testenv clone | |
179 negative_test "-R -rR" $VOL | |
180 check_dataset datasetexists $CTR $VOL $FS $FSSNAP $FSCLONE | |
181 check_dataset datasetnonexists $VOLSNAP $VOLCLONE | |
182 fi | |
183 | |
184 log_must $KILL $pidlist | |
185 log_mustnot $PGREP -fl $MKBUSY | |
186 pidlist="" | |
187 | |
188 # | |
189 # Create the clones for test environment and make the snapshot busy. | |
190 # Then verify 'zfs destroy $snap' succeeds without '-f'. | |
191 # | |
192 # Then verify the snapshot and clone are destroyed, but nothing else is. | |
193 # | |
194 | |
195 mntpt=$(snapshot_mountpoint $FSSNAP) | |
196 pidlist=$($MKBUSY $mntpt) | |
197 log_note "$MKBUSY $mntpt (pidlist: $pidlist)" | |
198 [[ -z $pidlist ]] && log_fail "Failure from mkbusy" | |
199 | |
200 for option in -R -rR ; do | |
201 setup_testenv clone | |
202 log_must $ZFS destroy $option $FSSNAP | |
203 check_dataset datasetexists $CTR $FS $VOL | |
204 check_dataset datasetnonexists $FSSNAP $FSCLONE | |
205 done | |
206 | |
207 log_must $KILL $pidlist | |
208 log_mustnot $PGREP -fl $MKBUSY | |
209 pidlist="" | |
210 | |
211 log_pass "zfs destroy -f|-r|-rf|-R|-rR <dataset>' failed in different " \ | |
212 "condition passed." |