1d583b39bSJohn Wren Kennedy#!/bin/ksh -p
2d583b39bSJohn Wren Kennedy#
3d583b39bSJohn Wren Kennedy# CDDL HEADER START
4d583b39bSJohn Wren Kennedy#
5d583b39bSJohn Wren Kennedy# The contents of this file are subject to the terms of the
6d583b39bSJohn Wren Kennedy# Common Development and Distribution License (the "License").
7d583b39bSJohn Wren Kennedy# You may not use this file except in compliance with the License.
8d583b39bSJohn Wren Kennedy#
9d583b39bSJohn Wren Kennedy# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10d583b39bSJohn Wren Kennedy# or http://www.opensolaris.org/os/licensing.
11d583b39bSJohn Wren Kennedy# See the License for the specific language governing permissions
12d583b39bSJohn Wren Kennedy# and limitations under the License.
13d583b39bSJohn Wren Kennedy#
14d583b39bSJohn Wren Kennedy# When distributing Covered Code, include this CDDL HEADER in each
15d583b39bSJohn Wren Kennedy# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16d583b39bSJohn Wren Kennedy# If applicable, add the following below this CDDL HEADER, with the
17d583b39bSJohn Wren Kennedy# fields enclosed by brackets "[]" replaced with your own identifying
18d583b39bSJohn Wren Kennedy# information: Portions Copyright [yyyy] [name of copyright owner]
19d583b39bSJohn Wren Kennedy#
20d583b39bSJohn Wren Kennedy# CDDL HEADER END
21d583b39bSJohn Wren Kennedy#
22d583b39bSJohn Wren Kennedy
23d583b39bSJohn Wren Kennedy#
24d583b39bSJohn Wren Kennedy# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
25d583b39bSJohn Wren Kennedy# Use is subject to license terms.
26d583b39bSJohn Wren Kennedy#
27d583b39bSJohn Wren Kennedy
28*1d32ba66SJohn Wren Kennedy#
29*1d32ba66SJohn Wren Kennedy# Copyright (c) 2016 by Delphix. All rights reserved.
30*1d32ba66SJohn Wren Kennedy#
31*1d32ba66SJohn Wren Kennedy
32d583b39bSJohn Wren Kennedy. $STF_SUITE/include/libtest.shlib
33d583b39bSJohn Wren Kennedy
34d583b39bSJohn Wren Kennedy#
35d583b39bSJohn Wren Kennedy# DESCRIPTION:
36d583b39bSJohn Wren Kennedy# Verify that 'zfs set sharenfs' and 'zfs share' shares a given dataset.
37d583b39bSJohn Wren Kennedy#
38d583b39bSJohn Wren Kennedy# STRATEGY:
39d583b39bSJohn Wren Kennedy# 1. Invoke 'zfs set sharenfs'.
40d583b39bSJohn Wren Kennedy# 2. Verify that the file system is shared.
41d583b39bSJohn Wren Kennedy# 3. Invoke 'zfs share'.
42d583b39bSJohn Wren Kennedy# 4. Verify that the file system is shared.
43d583b39bSJohn Wren Kennedy# 5. Verify that a shared filesystem cannot be shared again.
44d583b39bSJohn Wren Kennedy# 6. Verify that share -a succeeds.
45d583b39bSJohn Wren Kennedy#
46d583b39bSJohn Wren Kennedy
47d583b39bSJohn Wren Kennedyverify_runnable "global"
48d583b39bSJohn Wren Kennedy
49d583b39bSJohn Wren Kennedyset -A fs \
50d583b39bSJohn Wren Kennedy    "$TESTDIR" "$TESTPOOL/$TESTFS" \
51d583b39bSJohn Wren Kennedy    "$TESTDIR1" "$TESTPOOL/$TESTCTR/$TESTFS1" \
52d583b39bSJohn Wren Kennedy    "$TESTDIR2" "$TESTPOOL/$TESTFS-clone"
53d583b39bSJohn Wren Kennedy
54d583b39bSJohn Wren Kennedyfunction cleanup
55d583b39bSJohn Wren Kennedy{
56d583b39bSJohn Wren Kennedy	typeset -i i=0
57d583b39bSJohn Wren Kennedy	while (( i < ${#fs[*]} )); do
58*1d32ba66SJohn Wren Kennedy		log_must zfs set sharenfs=off ${fs[((i+1))]}
59d583b39bSJohn Wren Kennedy		unshare_fs ${fs[i]}
60d583b39bSJohn Wren Kennedy
61d583b39bSJohn Wren Kennedy		((i = i + 2))
62d583b39bSJohn Wren Kennedy	done
63d583b39bSJohn Wren Kennedy
64d583b39bSJohn Wren Kennedy	if mounted $TESTPOOL/$TESTFS-clone; then
65*1d32ba66SJohn Wren Kennedy		log_must zfs unmount $TESTDIR2
66d583b39bSJohn Wren Kennedy	fi
67d583b39bSJohn Wren Kennedy
68d583b39bSJohn Wren Kennedy	datasetexists $TESTPOOL/$TESTFS-clone && \
69*1d32ba66SJohn Wren Kennedy		log_must zfs destroy -f $TESTPOOL/$TESTFS-clone
70d583b39bSJohn Wren Kennedy
71d583b39bSJohn Wren Kennedy	if snapexists "$TESTPOOL/$TESTFS@snapshot"; then
72*1d32ba66SJohn Wren Kennedy		log_must zfs destroy -f $TESTPOOL/$TESTFS@snapshot
73d583b39bSJohn Wren Kennedy	fi
74d583b39bSJohn Wren Kennedy}
75d583b39bSJohn Wren Kennedy
76d583b39bSJohn Wren Kennedy
77d583b39bSJohn Wren Kennedy#
78d583b39bSJohn Wren Kennedy# Main test routine.
79d583b39bSJohn Wren Kennedy#
80d583b39bSJohn Wren Kennedy# Given a mountpoint and file system this routine will attempt
81d583b39bSJohn Wren Kennedy# share the mountpoint and then verify it has been shared.
82d583b39bSJohn Wren Kennedy#
83d583b39bSJohn Wren Kennedyfunction test_share # mntp filesystem
84d583b39bSJohn Wren Kennedy{
85d583b39bSJohn Wren Kennedy	typeset mntp=$1
86d583b39bSJohn Wren Kennedy	typeset filesystem=$2
87d583b39bSJohn Wren Kennedy
88d583b39bSJohn Wren Kennedy	not_shared $mntp || \
89d583b39bSJohn Wren Kennedy	    log_fail "File system $filesystem is already shared."
90d583b39bSJohn Wren Kennedy
91*1d32ba66SJohn Wren Kennedy	log_must zfs set sharenfs=on $filesystem
92d583b39bSJohn Wren Kennedy	is_shared $mntp || \
93d583b39bSJohn Wren Kennedy	    log_fail "File system $filesystem is not shared (set sharenfs)."
94d583b39bSJohn Wren Kennedy
95d583b39bSJohn Wren Kennedy	#
96d583b39bSJohn Wren Kennedy	# Verify 'zfs share' works as well.
97d583b39bSJohn Wren Kennedy	#
98*1d32ba66SJohn Wren Kennedy	log_must zfs unshare $filesystem
99d583b39bSJohn Wren Kennedy	is_shared $mntp && \
100d583b39bSJohn Wren Kennedy	    log_fail "File system $filesystem is still shared."
101d583b39bSJohn Wren Kennedy
102*1d32ba66SJohn Wren Kennedy	log_must zfs share $filesystem
103d583b39bSJohn Wren Kennedy	is_shared $mntp || \
104d583b39bSJohn Wren Kennedy	    log_fail "file system $filesystem is not shared (zfs share)."
105d583b39bSJohn Wren Kennedy
106d583b39bSJohn Wren Kennedy	log_note "Sharing a shared file system fails."
107*1d32ba66SJohn Wren Kennedy	log_mustnot zfs share $filesystem
108d583b39bSJohn Wren Kennedy}
109d583b39bSJohn Wren Kennedy
110d583b39bSJohn Wren Kennedylog_assert "Verify that 'zfs share' succeeds as root."
111d583b39bSJohn Wren Kennedylog_onexit cleanup
112d583b39bSJohn Wren Kennedy
113*1d32ba66SJohn Wren Kennedylog_must zfs snapshot $TESTPOOL/$TESTFS@snapshot
114*1d32ba66SJohn Wren Kennedylog_must zfs clone $TESTPOOL/$TESTFS@snapshot $TESTPOOL/$TESTFS-clone
115*1d32ba66SJohn Wren Kennedylog_must zfs set mountpoint=$TESTDIR2 $TESTPOOL/$TESTFS-clone
116d583b39bSJohn Wren Kennedy
117d583b39bSJohn Wren Kennedytypeset -i i=0
118d583b39bSJohn Wren Kennedywhile (( i < ${#fs[*]} )); do
119d583b39bSJohn Wren Kennedy	test_share ${fs[i]} ${fs[((i + 1))]}
120d583b39bSJohn Wren Kennedy
121d583b39bSJohn Wren Kennedy	((i = i + 2))
122d583b39bSJohn Wren Kennedydone
123d583b39bSJohn Wren Kennedy
124d583b39bSJohn Wren Kennedylog_note "Verify 'zfs share -a' succeeds."
125d583b39bSJohn Wren Kennedy
126d583b39bSJohn Wren Kennedy#
127d583b39bSJohn Wren Kennedy# Unshare each of the file systems.
128d583b39bSJohn Wren Kennedy#
129d583b39bSJohn Wren Kennedyi=0
130d583b39bSJohn Wren Kennedywhile (( i < ${#fs[*]} )); do
131d583b39bSJohn Wren Kennedy	unshare_fs ${fs[i]}
132d583b39bSJohn Wren Kennedy
133d583b39bSJohn Wren Kennedy	((i = i + 2))
134d583b39bSJohn Wren Kennedydone
135d583b39bSJohn Wren Kennedy
136d583b39bSJohn Wren Kennedy#
137d583b39bSJohn Wren Kennedy# Try a zfs share -a and verify all file systems are shared.
138d583b39bSJohn Wren Kennedy#
139*1d32ba66SJohn Wren Kennedylog_must zfs share -a
140d583b39bSJohn Wren Kennedy
141d583b39bSJohn Wren Kennedyi=0
142d583b39bSJohn Wren Kennedywhile (( i < ${#fs[*]} )); do
143d583b39bSJohn Wren Kennedy	is_shared ${fs[i]} || \
144d583b39bSJohn Wren Kennedy	    log_fail "File system ${fs[i]} is not shared (share -a)"
145d583b39bSJohn Wren Kennedy
146d583b39bSJohn Wren Kennedy	((i = i + 2))
147d583b39bSJohn Wren Kennedydone
148d583b39bSJohn Wren Kennedy
149*1d32ba66SJohn Wren Kennedylog_pass "'zfs share [ -a ] <filesystem>' succeeds as root."
150