1d583b39bSJohn Wren Kennedy#
2d583b39bSJohn Wren Kennedy# CDDL HEADER START
3d583b39bSJohn Wren Kennedy#
4d583b39bSJohn Wren Kennedy# The contents of this file are subject to the terms of the
5d583b39bSJohn Wren Kennedy# Common Development and Distribution License (the "License").
6d583b39bSJohn Wren Kennedy# You may not use this file except in compliance with the License.
7d583b39bSJohn Wren Kennedy#
8d583b39bSJohn Wren Kennedy# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9d583b39bSJohn Wren Kennedy# or http://www.opensolaris.org/os/licensing.
10d583b39bSJohn Wren Kennedy# See the License for the specific language governing permissions
11d583b39bSJohn Wren Kennedy# and limitations under the License.
12d583b39bSJohn Wren Kennedy#
13d583b39bSJohn Wren Kennedy# When distributing Covered Code, include this CDDL HEADER in each
14d583b39bSJohn Wren Kennedy# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15d583b39bSJohn Wren Kennedy# If applicable, add the following below this CDDL HEADER, with the
16d583b39bSJohn Wren Kennedy# fields enclosed by brackets "[]" replaced with your own identifying
17d583b39bSJohn Wren Kennedy# information: Portions Copyright [yyyy] [name of copyright owner]
18d583b39bSJohn Wren Kennedy#
19d583b39bSJohn Wren Kennedy# CDDL HEADER END
20d583b39bSJohn Wren Kennedy#
21d583b39bSJohn Wren Kennedy
22d583b39bSJohn Wren Kennedy#
23d583b39bSJohn Wren Kennedy# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
24d583b39bSJohn Wren Kennedy# Use is subject to license terms.
25d583b39bSJohn Wren Kennedy#
26d583b39bSJohn Wren Kennedy
27d583b39bSJohn Wren Kennedy#
28*1d32ba66SJohn Wren Kennedy# Copyright (c) 2012, 2016 by Delphix. All rights reserved.
29d583b39bSJohn Wren Kennedy#
30d583b39bSJohn Wren Kennedy
31d583b39bSJohn Wren Kennedy. $STF_SUITE/include/libtest.shlib
32d583b39bSJohn Wren Kennedy. $STF_SUITE/tests/functional/cli_root/zfs_destroy/zfs_destroy.cfg
33d583b39bSJohn Wren Kennedy
34d583b39bSJohn Wren Kennedy#
35d583b39bSJohn Wren Kennedy# Create or recover a set of test environment which include ctr, vol, fs,
36d583b39bSJohn Wren Kennedy# snap & clone. It looks like the following.
37d583b39bSJohn Wren Kennedy#
38d583b39bSJohn Wren Kennedy# pool
39d583b39bSJohn Wren Kennedy#    |ctr
40d583b39bSJohn Wren Kennedy#    |  |fs
41d583b39bSJohn Wren Kennedy#    |  | |fssnap
42d583b39bSJohn Wren Kennedy#    |  |vol
43d583b39bSJohn Wren Kennedy#    |     |volsnap
44d583b39bSJohn Wren Kennedy#    |fsclone
45d583b39bSJohn Wren Kennedy#    |volclone
46d583b39bSJohn Wren Kennedy#
47d583b39bSJohn Wren Kennedy# $1 indicate which dependent dataset need be created. Such as 'snap', 'clone'.
48d583b39bSJohn Wren Kennedy#
49d583b39bSJohn Wren Kennedyfunction setup_testenv #[dtst]
50d583b39bSJohn Wren Kennedy{
51d583b39bSJohn Wren Kennedy	typeset dtst=$1
52d583b39bSJohn Wren Kennedy
53d583b39bSJohn Wren Kennedy	if ! datasetexists $CTR; then
54*1d32ba66SJohn Wren Kennedy		log_must zfs create $CTR
55d583b39bSJohn Wren Kennedy	fi
56d583b39bSJohn Wren Kennedy	if ! datasetexists $FS; then
57*1d32ba66SJohn Wren Kennedy		log_must zfs create $FS
58d583b39bSJohn Wren Kennedy	fi
59d583b39bSJohn Wren Kennedy	# Volume test is only availible on globle zone
60d583b39bSJohn Wren Kennedy	if ! datasetexists $VOL && is_global_zone; then
61*1d32ba66SJohn Wren Kennedy		log_must zfs create -V $VOLSIZE $VOL
62d583b39bSJohn Wren Kennedy
63*1d32ba66SJohn Wren Kennedy		echo "y" | newfs /dev/zvol/dsk/$VOL > /dev/null 2>&1
64d583b39bSJohn Wren Kennedy		if (( $? == 0 )); then
65*1d32ba66SJohn Wren Kennedy			log_note "SUCCESS: newfs /dev/zvol/dsk/$VOL>/dev/null"
66d583b39bSJohn Wren Kennedy		else
67*1d32ba66SJohn Wren Kennedy			log_fail "newfs /dev/zvol/dsk/$VOL > /dev/null"
68d583b39bSJohn Wren Kennedy		fi
69d583b39bSJohn Wren Kennedy
70d583b39bSJohn Wren Kennedy		if [[ ! -d $TESTDIR1 ]]; then
71*1d32ba66SJohn Wren Kennedy			log_must mkdir $TESTDIR1
72d583b39bSJohn Wren Kennedy		fi
73*1d32ba66SJohn Wren Kennedy		log_must mount /dev/zvol/dsk/$VOL $TESTDIR1
74d583b39bSJohn Wren Kennedy	fi
75d583b39bSJohn Wren Kennedy
76d583b39bSJohn Wren Kennedy	if [[ $dtst == snap || $dtst == clone ]]; then
77d583b39bSJohn Wren Kennedy		if ! datasetexists $FSSNAP; then
78*1d32ba66SJohn Wren Kennedy			log_must zfs snapshot $FSSNAP
79d583b39bSJohn Wren Kennedy		fi
80d583b39bSJohn Wren Kennedy		if ! datasetexists $VOLSNAP && is_global_zone; then
81*1d32ba66SJohn Wren Kennedy			log_must zfs snapshot $VOLSNAP
82d583b39bSJohn Wren Kennedy		fi
83d583b39bSJohn Wren Kennedy	fi
84d583b39bSJohn Wren Kennedy
85d583b39bSJohn Wren Kennedy	if [[ $dtst == clone ]]; then
86d583b39bSJohn Wren Kennedy		if ! datasetexists $FSCLONE; then
87*1d32ba66SJohn Wren Kennedy			log_must zfs clone $FSSNAP $FSCLONE
88d583b39bSJohn Wren Kennedy		fi
89d583b39bSJohn Wren Kennedy		if ! datasetexists $VOLCLONE && is_global_zone; then
90*1d32ba66SJohn Wren Kennedy			log_must zfs clone $VOLSNAP $VOLCLONE
91d583b39bSJohn Wren Kennedy		fi
92d583b39bSJohn Wren Kennedy	fi
93d583b39bSJohn Wren Kennedy}
94d583b39bSJohn Wren Kennedy
95d583b39bSJohn Wren Kennedy# Clean up the testing environment
96d583b39bSJohn Wren Kennedy#
97d583b39bSJohn Wren Kennedyfunction cleanup_testenv
98d583b39bSJohn Wren Kennedy{
99d583b39bSJohn Wren Kennedy	if is_global_zone && ismounted "$TESTDIR1" "ufs" ; then
100*1d32ba66SJohn Wren Kennedy		log_must umount -f $TESTDIR1
101d583b39bSJohn Wren Kennedy	fi
102d583b39bSJohn Wren Kennedy	if [[ -d $TESTDIR1 ]]; then
103*1d32ba66SJohn Wren Kennedy		log_must rm -rf $TESTDIR1
104d583b39bSJohn Wren Kennedy	fi
105d583b39bSJohn Wren Kennedy
106*1d32ba66SJohn Wren Kennedy	pkill mkbusy
107d583b39bSJohn Wren Kennedy
108d583b39bSJohn Wren Kennedy	if datasetexists $CTR; then
109*1d32ba66SJohn Wren Kennedy		log_must zfs destroy -Rf $CTR
110d583b39bSJohn Wren Kennedy	fi
111d583b39bSJohn Wren Kennedy}
112d583b39bSJohn Wren Kennedy
113d583b39bSJohn Wren Kennedy#
114d583b39bSJohn Wren Kennedy# Delete volume and related datasets from list, if the test cases was
115d583b39bSJohn Wren Kennedy# runing in local zone. Then check them are existed or non-exists.
116d583b39bSJohn Wren Kennedy#
117d583b39bSJohn Wren Kennedy# $1   function name
118d583b39bSJohn Wren Kennedy# $2-n datasets name
119d583b39bSJohn Wren Kennedy#
120d583b39bSJohn Wren Kennedyfunction check_dataset
121d583b39bSJohn Wren Kennedy{
122d583b39bSJohn Wren Kennedy	typeset funname=$1
123d583b39bSJohn Wren Kennedy	typeset newlist=""
124d583b39bSJohn Wren Kennedy	typeset dtst
125d583b39bSJohn Wren Kennedy	shift
126d583b39bSJohn Wren Kennedy
127d583b39bSJohn Wren Kennedy	for dtst in "$@"; do
128d583b39bSJohn Wren Kennedy		# Volume and related stuff are unvailable in local zone
129d583b39bSJohn Wren Kennedy		if ! is_global_zone; then
130d583b39bSJohn Wren Kennedy			if [[ $dtst == $VOL || $dtst == $VOLSNAP || \
131d583b39bSJohn Wren Kennedy				$dtst == $VOLCLONE ]]
132d583b39bSJohn Wren Kennedy			then
133d583b39bSJohn Wren Kennedy				continue
134d583b39bSJohn Wren Kennedy			fi
135d583b39bSJohn Wren Kennedy		fi
136d583b39bSJohn Wren Kennedy		newlist="$newlist $dtst"
137d583b39bSJohn Wren Kennedy	done
138d583b39bSJohn Wren Kennedy
139d583b39bSJohn Wren Kennedy	if (( ${#newlist} != 0 )); then
140d583b39bSJohn Wren Kennedy		# Run each item in $newlist individually so on failure, the
141d583b39bSJohn Wren Kennedy		# probelmatic dataset is listed in the logs.
142d583b39bSJohn Wren Kennedy		for i in $newlist; do
143d583b39bSJohn Wren Kennedy			log_must $funname $i
144d583b39bSJohn Wren Kennedy		done
145d583b39bSJohn Wren Kennedy	fi
146d583b39bSJohn Wren Kennedy}
147