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/tests/functional/cli_root/zfs_set/zfs_set_common.kshlib
33d583b39bSJohn Wren Kennedy
34d583b39bSJohn Wren Kennedy#
35d583b39bSJohn Wren Kennedy# DESCRIPTION:
36d583b39bSJohn Wren Kennedy#	User defined property are always inherited from its parent dataset
37d583b39bSJohn Wren Kennedy#	directly.
38d583b39bSJohn Wren Kennedy#
39d583b39bSJohn Wren Kennedy# STRATEGY:
40d583b39bSJohn Wren Kennedy#	1. Create pool, fs, volume, fsclone & volclone.
41d583b39bSJohn Wren Kennedy#	2. Get random user property name and set to the pool
42d583b39bSJohn Wren Kennedy#	3. Verify all dataset user property inherit from pool.
43d583b39bSJohn Wren Kennedy#	4. Set intermediate dataset and verify its children will inherit user
44d583b39bSJohn Wren Kennedy#	   property from it directly.
45d583b39bSJohn Wren Kennedy#
46d583b39bSJohn Wren Kennedy
47d583b39bSJohn Wren Kennedyverify_runnable "both"
48d583b39bSJohn Wren Kennedy
49d583b39bSJohn Wren Kennedyfunction cleanup
50d583b39bSJohn Wren Kennedy{
51*1d32ba66SJohn Wren Kennedy	datasetexists $new_vol && log_must zfs rename $new_vol $vol
52d583b39bSJohn Wren Kennedy
53d583b39bSJohn Wren Kennedy	typeset dtst
54d583b39bSJohn Wren Kennedy	for dtst in $new_fsclone $new_volclone $fsclone $volclone \
55d583b39bSJohn Wren Kennedy	    $fssnap $volsnap; do
56d583b39bSJohn Wren Kennedy		if datasetexists $dtst; then
57*1d32ba66SJohn Wren Kennedy			log_must zfs destroy -f $dtst
58d583b39bSJohn Wren Kennedy		fi
59d583b39bSJohn Wren Kennedy	done
60d583b39bSJohn Wren Kennedy
61d583b39bSJohn Wren Kennedy	cleanup_user_prop $pool
62d583b39bSJohn Wren Kennedy}
63d583b39bSJohn Wren Kennedy
64d583b39bSJohn Wren Kennedy#
65d583b39bSJohn Wren Kennedy# Verify options datasets (3-n) inherit from the inherited dataset $2.
66d583b39bSJohn Wren Kennedy#
67d583b39bSJohn Wren Kennedy# $1 user property
68d583b39bSJohn Wren Kennedy# $2 inherited dataset
69d583b39bSJohn Wren Kennedy# $3-n datasets
70d583b39bSJohn Wren Kennedy#
71d583b39bSJohn Wren Kennedyfunction inherit_check
72d583b39bSJohn Wren Kennedy{
73d583b39bSJohn Wren Kennedy	typeset prop=$1
74d583b39bSJohn Wren Kennedy	typeset inherited_dtst=$2
75d583b39bSJohn Wren Kennedy	shift 2
76d583b39bSJohn Wren Kennedy	[[ -z $@ ]] && return 1
77d583b39bSJohn Wren Kennedy
78d583b39bSJohn Wren Kennedy	typeset inherited_value=$(get_prop $prop $inherited_dtst)
79d583b39bSJohn Wren Kennedy	for dtst in $@; do
80d583b39bSJohn Wren Kennedy		typeset value=$(get_prop $prop $dtst)
81d583b39bSJohn Wren Kennedy		typeset source=$(get_source $prop $dtst)
82d583b39bSJohn Wren Kennedy		if [[ "$value" != "$inherited_value" || \
83d583b39bSJohn Wren Kennedy		      "$source" != "inherited from $inherited_dtst" ]]
84d583b39bSJohn Wren Kennedy		then
85d583b39bSJohn Wren Kennedy			return 1
86d583b39bSJohn Wren Kennedy		fi
87d583b39bSJohn Wren Kennedy
88d583b39bSJohn Wren Kennedy		shift
89d583b39bSJohn Wren Kennedy	done
90d583b39bSJohn Wren Kennedy
91d583b39bSJohn Wren Kennedy	return 0
92d583b39bSJohn Wren Kennedy}
93d583b39bSJohn Wren Kennedy
94d583b39bSJohn Wren Kennedylog_assert "User defined property inherited from its parent."
95d583b39bSJohn Wren Kennedylog_onexit cleanup
96d583b39bSJohn Wren Kennedy
97d583b39bSJohn Wren Kennedypool=$TESTPOOL; fs=$pool/$TESTFS; vol=$pool/$TESTVOL
98d583b39bSJohn Wren Kennedyfssnap=$fs@snap; volsnap=$vol@snap;
99*1d32ba66SJohn Wren Kennedylog_must zfs snapshot $fssnap
100*1d32ba66SJohn Wren Kennedylog_must zfs snapshot $volsnap
101d583b39bSJohn Wren Kennedyfsclone=$pool/fsclone; volclone=$pool/volclone
102*1d32ba66SJohn Wren Kennedylog_must zfs clone $fssnap $fsclone
103*1d32ba66SJohn Wren Kennedylog_must zfs clone $volsnap $volclone
104d583b39bSJohn Wren Kennedy
105d583b39bSJohn Wren Kennedyprop_name=$(valid_user_property 10)
106d583b39bSJohn Wren Kennedyvalue=$(user_property_value 16)
107*1d32ba66SJohn Wren Kennedylog_must eval "zfs set $prop_name='$value' $pool"
108d583b39bSJohn Wren Kennedylog_must eval "check_user_prop $pool $prop_name '$value'"
109d583b39bSJohn Wren Kennedylog_must inherit_check $prop_name $pool $fs $vol $fsclone $volclone
110d583b39bSJohn Wren Kennedy
111d583b39bSJohn Wren Kennedynew_fsclone=$fs/fsclone; new_volclone=$fs/volclone
112*1d32ba66SJohn Wren Kennedylog_must zfs rename $fsclone $new_fsclone
113*1d32ba66SJohn Wren Kennedylog_must zfs rename $volclone $new_volclone
114d583b39bSJohn Wren Kennedylog_must inherit_check $prop_name $pool $fs $new_fsclone $new_volclone
115d583b39bSJohn Wren Kennedy
116d583b39bSJohn Wren Kennedylog_note "Set intermediate dataset will change the inherited relationship."
117d583b39bSJohn Wren Kennedynew_value=$(user_property_value 16)
118*1d32ba66SJohn Wren Kennedylog_must eval "zfs set $prop_name='$new_value' $fs"
119d583b39bSJohn Wren Kennedylog_must eval "check_user_prop $fs $prop_name '$new_value'"
120d583b39bSJohn Wren Kennedylog_must inherit_check $prop_name $fs $new_fsclone $new_volclone
121d583b39bSJohn Wren Kennedy
122d583b39bSJohn Wren Kennedylog_pass "User defined property inherited from its parent passed."
123