#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#

#
# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#

#
# Copyright (c) 2016 by Delphix. All rights reserved.
#

. $STF_SUITE/include/libtest.shlib

DEPTH_FS=$TESTPOOL/depth_fs
MAX_DEPTH=3
DS_COUNT=3
set -A depth_options  "d 0" "d 1" "d 2" "d 4" "d 32"
set -A depth_array  0 1 2 4 32

#
# Setup multiple depths datasets, including fs, volumes, snapshots and bookmarks.
#
function depth_fs_setup
{
	typeset -i i j k
	typeset fslist

	log_must zfs create $DEPTH_FS

	(( i=1 ))
	while (( i<=MAX_DEPTH )); do
		if (( i==1 )); then
			fslist=$DEPTH_FS
		else
			(( k=i-1 ))
			fslist=$(zfs list -rH -t filesystem -o name $DEPTH_FS|grep depth"$k"$)
			if (( $? != 0 )); then
				log_fail "No depth$k filesystem"
			fi
		fi
		for fs in $fslist; do
			(( j=1 ))
			while (( j<=DS_COUNT )); do
				log_must zfs create $fs/fs_"$j"_depth"$i"
				if is_global_zone ; then
					log_must zfs create -V 8M $fs/vol_"$j"_depth"$i"
				fi
				log_must zfs snapshot $fs@snap_"$j"_depth"$i"
				log_must zfs bookmark $fs@snap_"$j"_depth"$i" '#bookmark'_"$j"_depth"$i"
				(( j=j+1 ))
			done
		done
		(( i=i+1 ))
	done
}

#
# Cleanup multiple depths filesystem.
#
function depth_fs_cleanup
{
	datasetexists $DEPTH_FS && destroy_dataset $DEPTH_FS -rR
}
