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