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 2009 Sun Microsystems, Inc.  All rights reserved.
24d583b39bSJohn Wren Kennedy# Use is subject to license terms.
25d583b39bSJohn Wren Kennedy#
26d583b39bSJohn Wren Kennedy
271d32ba66SJohn Wren Kennedy#
28*591e0e13SSebastien Roy# Copyright (c) 2017 by Delphix. All rights reserved.
291d32ba66SJohn Wren Kennedy#
301d32ba66SJohn Wren Kennedy
31d583b39bSJohn Wren Kennedy. $STF_SUITE/include/libtest.shlib
32d583b39bSJohn Wren Kennedy. $STF_SUITE/tests/functional/cli_root/zfs_mount/zfs_mount.cfg
33d583b39bSJohn Wren Kennedy
34d583b39bSJohn Wren Kennedyfunction force_unmount #dev
35d583b39bSJohn Wren Kennedy{
36d583b39bSJohn Wren Kennedy	typeset dev=$1
37d583b39bSJohn Wren Kennedy
38d583b39bSJohn Wren Kennedy	ismounted $dev
39d583b39bSJohn Wren Kennedy	if (( $? == 0 )); then
401d32ba66SJohn Wren Kennedy		log_must zfs $unmountforce $dev
41d583b39bSJohn Wren Kennedy	fi
42d583b39bSJohn Wren Kennedy	return 0
43d583b39bSJohn Wren Kennedy}
44d583b39bSJohn Wren Kennedy
45d583b39bSJohn Wren Kennedy# Create pool and  ( fs | container | vol ) with the given parameters,
46d583b39bSJohn Wren Kennedy# it'll destroy prior exist one that has the same name.
47d583b39bSJohn Wren Kennedy
48d583b39bSJohn Wren Kennedyfunction setup_filesystem #disklist #pool #fs #mntpoint #type #vdev
49d583b39bSJohn Wren Kennedy{
50d583b39bSJohn Wren Kennedy	typeset disklist=$1
51d583b39bSJohn Wren Kennedy	typeset pool=$2
52d583b39bSJohn Wren Kennedy	typeset fs=${3##/}
53d583b39bSJohn Wren Kennedy	typeset mntpoint=$4
54d583b39bSJohn Wren Kennedy	typeset type=$5
55d583b39bSJohn Wren Kennedy	typeset vdev=$6
56d583b39bSJohn Wren Kennedy
57d583b39bSJohn Wren Kennedy	if [[ -z $pool || -z $fs || -z $mntpoint ]]; then
58d583b39bSJohn Wren Kennedy		log_note "Missing parameter: (\"$pool\", \"$fs\", \"$mntpoint\")"
59d583b39bSJohn Wren Kennedy		return 1
60d583b39bSJohn Wren Kennedy	fi
61d583b39bSJohn Wren Kennedy
62d583b39bSJohn Wren Kennedy	if is_global_zone && [[ -z $disklist ]] ; then
63d583b39bSJohn Wren Kennedy		log_note "Missing disklist."
64d583b39bSJohn Wren Kennedy		return 1
65d583b39bSJohn Wren Kennedy	fi
66d583b39bSJohn Wren Kennedy
67d583b39bSJohn Wren Kennedy	if [[ $vdev != "" && \
68d583b39bSJohn Wren Kennedy		$vdev != "mirror" && \
69d583b39bSJohn Wren Kennedy		$vdev != "raidz" ]] ; then
70d583b39bSJohn Wren Kennedy
71d583b39bSJohn Wren Kennedy		log_note "Wrong vdev: (\"$vdev\")"
72d583b39bSJohn Wren Kennedy		return 1
73d583b39bSJohn Wren Kennedy	fi
74d583b39bSJohn Wren Kennedy
75d583b39bSJohn Wren Kennedy	poolexists $pool || \
76d583b39bSJohn Wren Kennedy		create_pool $pool $vdev $disklist
77d583b39bSJohn Wren Kennedy
78d583b39bSJohn Wren Kennedy	datasetexists $pool/$fs && \
79d583b39bSJohn Wren Kennedy		log_must cleanup_filesystem $pool $fs
80d583b39bSJohn Wren Kennedy
811d32ba66SJohn Wren Kennedy	rmdir $mntpoint > /dev/null 2>&1
82d583b39bSJohn Wren Kennedy	if [[ ! -d $mntpoint ]]; then
831d32ba66SJohn Wren Kennedy		log_must mkdir -p $mntpoint
84d583b39bSJohn Wren Kennedy	fi
85d583b39bSJohn Wren Kennedy
86d583b39bSJohn Wren Kennedy	case "$type" in
87*591e0e13SSebastien Roy		'ctr')	log_must zfs create -o mountpoint=$mntpoint $pool/$fs
88d583b39bSJohn Wren Kennedy			;;
891d32ba66SJohn Wren Kennedy		'vol')	log_must zfs create -V $VOLSIZE $pool/$fs
90d583b39bSJohn Wren Kennedy			;;
91*591e0e13SSebastien Roy		*)	log_must zfs create -o mountpoint=$mntpoint $pool/$fs
92d583b39bSJohn Wren Kennedy			;;
93d583b39bSJohn Wren Kennedy	esac
94d583b39bSJohn Wren Kennedy
95d583b39bSJohn Wren Kennedy	return 0
96d583b39bSJohn Wren Kennedy}
97d583b39bSJohn Wren Kennedy
98d583b39bSJohn Wren Kennedy# Destroy ( fs | container | vol ) with the given parameters.
99d583b39bSJohn Wren Kennedyfunction cleanup_filesystem #pool #fs
100d583b39bSJohn Wren Kennedy{
101d583b39bSJohn Wren Kennedy	typeset pool=$1
102d583b39bSJohn Wren Kennedy	typeset fs=${2##/}
103d583b39bSJohn Wren Kennedy	typeset mtpt=""
104d583b39bSJohn Wren Kennedy
105d583b39bSJohn Wren Kennedy	if [[ -z $pool || -z $fs ]]; then
106d583b39bSJohn Wren Kennedy		log_note "Missing parameter: (\"$pool\", \"$fs\")"
107d583b39bSJohn Wren Kennedy		return 1
108d583b39bSJohn Wren Kennedy	fi
109d583b39bSJohn Wren Kennedy
110d583b39bSJohn Wren Kennedy	if datasetexists "$pool/$fs" ; then
111d583b39bSJohn Wren Kennedy		mtpt=$(get_prop mountpoint "$pool/$fs")
1121d32ba66SJohn Wren Kennedy		log_must zfs destroy -r $pool/$fs
113d583b39bSJohn Wren Kennedy
114d583b39bSJohn Wren Kennedy		[[ -d $mtpt ]] && \
1151d32ba66SJohn Wren Kennedy			log_must rm -rf $mtpt
116d583b39bSJohn Wren Kennedy	else
117d583b39bSJohn Wren Kennedy		return 1
118d583b39bSJohn Wren Kennedy	fi
119d583b39bSJohn Wren Kennedy
120d583b39bSJohn Wren Kennedy	return 0
121d583b39bSJohn Wren Kennedy}
122d583b39bSJohn Wren Kennedy
123d583b39bSJohn Wren Kennedy# Make sure 'zfs mount' should display all ZFS filesystems currently mounted.
124d583b39bSJohn Wren Kennedy# The results of 'zfs mount' and 'df -F zfs' should be identical.
125d583b39bSJohn Wren Kennedyfunction verify_mount_display
126d583b39bSJohn Wren Kennedy{
127d583b39bSJohn Wren Kennedy	typeset fs
128d583b39bSJohn Wren Kennedy
1291d32ba66SJohn Wren Kennedy	for fs in $(zfs $mountcmd | awk '{print $1}') ; do
130d583b39bSJohn Wren Kennedy		log_must mounted $fs
131d583b39bSJohn Wren Kennedy	done
132d583b39bSJohn Wren Kennedy	return 0
133d583b39bSJohn Wren Kennedy}
134