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 2009 Sun Microsystems, Inc.  All rights reserved.
25d583b39bSJohn Wren Kennedy# Use is subject to license terms.
26d583b39bSJohn Wren Kennedy#
27d583b39bSJohn Wren Kennedy
281d32ba66SJohn Wren Kennedy#
29*ebaf15cbSPrakash Surya# Copyright (c) 2016, 2017 by Delphix. All rights reserved.
301d32ba66SJohn Wren Kennedy#
311d32ba66SJohn Wren Kennedy
32d583b39bSJohn Wren Kennedy. $STF_SUITE/include/libtest.shlib
33d583b39bSJohn Wren Kennedy. $STF_SUITE/tests/functional/cli_root/zfs_set/zfs_set_common.kshlib
34d583b39bSJohn Wren Kennedy
35d583b39bSJohn Wren Kennedy#
36d583b39bSJohn Wren Kennedy# DESCRIPTION:
37d583b39bSJohn Wren Kennedy# Verify the properties with aliases also work with those aliases
38d583b39bSJohn Wren Kennedy#
39d583b39bSJohn Wren Kennedy# STRATEGY:
40d583b39bSJohn Wren Kennedy# 1. Create pool, then create filesystem & volume within it.
41d583b39bSJohn Wren Kennedy# 2. Set or retrieve property via alias with datasets.
42d583b39bSJohn Wren Kennedy# 3. Verify the result should be successful.
43d583b39bSJohn Wren Kennedy#
44d583b39bSJohn Wren Kennedy
45d583b39bSJohn Wren Kennedyverify_runnable "both"
46d583b39bSJohn Wren Kennedy
47d583b39bSJohn Wren Kennedyfunction set_and_check #<dataset><set_prop_name><set_value><check_prop_name>
48d583b39bSJohn Wren Kennedy{
49d583b39bSJohn Wren Kennedy	typeset ds=$1
50d583b39bSJohn Wren Kennedy	typeset setprop=$2
51d583b39bSJohn Wren Kennedy	typeset setval=$3
52d583b39bSJohn Wren Kennedy	typeset chkprop=$4
53d583b39bSJohn Wren Kennedy	typeset getval
54d583b39bSJohn Wren Kennedy
551d32ba66SJohn Wren Kennedy	log_must zfs set $setprop=$setval $ds
56d583b39bSJohn Wren Kennedy	if [[ $setval == "gzip-6" ]]; then
57d583b39bSJohn Wren Kennedy		setval="gzip"
58d583b39bSJohn Wren Kennedy	fi
59d583b39bSJohn Wren Kennedy	getval=$(get_prop $chkprop $ds)
60d583b39bSJohn Wren Kennedy
61d583b39bSJohn Wren Kennedy	case $setprop in
62d583b39bSJohn Wren Kennedy		reservation|reserv )
63d583b39bSJohn Wren Kennedy			if [[ $setval == "none" ]]; then
64d583b39bSJohn Wren Kennedy				 [[ $getval != "0" ]] && \
65d583b39bSJohn Wren Kennedy					log_fail "Setting the property $setprop" \
66d583b39bSJohn Wren Kennedy						"with value $setval fails."
67d583b39bSJohn Wren Kennedy                        elif [[ $getval != $setval ]]; then
68d583b39bSJohn Wren Kennedy				log_fail "Setting the property $setprop with" \
69d583b39bSJohn Wren Kennedy					"with $setval fails."
70d583b39bSJohn Wren Kennedy			fi
71d583b39bSJohn Wren Kennedy                        ;;
72d583b39bSJohn Wren Kennedy                 * )
73d583b39bSJohn Wren Kennedy                        [[ $getval != $setval ]] && \
74d583b39bSJohn Wren Kennedy				log_fail "Setting the property $setprop with value \
75d583b39bSJohn Wren Kennedy					$setval fails."
76d583b39bSJohn Wren Kennedy                        ;;
77d583b39bSJohn Wren Kennedy         esac
78d583b39bSJohn Wren Kennedy}
79d583b39bSJohn Wren Kennedy
80d583b39bSJohn Wren Kennedylog_assert "Properties with aliases also work with those aliases."
81d583b39bSJohn Wren Kennedy
82d583b39bSJohn Wren Kennedyset -A ro_prop "available" "avail" "referenced" "refer"
83d583b39bSJohn Wren Kennedyset -A rw_prop "readonly" "rdonly" "compression" "compress" "reservation" "reserv"
84d583b39bSJohn Wren Kennedyset -A chk_prop "rdonly" "readonly" "compress" "compression" "reserv" "reservation"
85d583b39bSJohn Wren Kennedyset -A size "512" "1024" "2048" "4096" "8192" "16384" "32768" "65536" "131072"
86d583b39bSJohn Wren Kennedy
87d583b39bSJohn Wren Kennedypool=$TESTPOOL
88d583b39bSJohn Wren Kennedyfs=$TESTPOOL/$TESTFS
89d583b39bSJohn Wren Kennedyvol=$TESTPOOL/$TESTVOL
90d583b39bSJohn Wren Kennedytypeset -l avail_space=$(get_prop avail $pool)
91d583b39bSJohn Wren Kennedytypeset -l reservsize
92d583b39bSJohn Wren Kennedytypeset -i i=0
93d583b39bSJohn Wren Kennedy
94d583b39bSJohn Wren Kennedyfor ds in $pool $fs $vol; do
95d583b39bSJohn Wren Kennedy	for propname in ${ro_prop[*]}; do
961d32ba66SJohn Wren Kennedy		zfs get -pH -o value $propname $ds >/dev/null 2>&1
97d583b39bSJohn Wren Kennedy		(( $? != 0 )) && \
98d583b39bSJohn Wren Kennedy			log_fail "Get the property $proname of $ds failed."
99d583b39bSJohn Wren Kennedy	done
100d583b39bSJohn Wren Kennedy	i=0
101d583b39bSJohn Wren Kennedy	while (( i < ${#rw_prop[*]} )); do
102d583b39bSJohn Wren Kennedy		case ${rw_prop[i]} in
103d583b39bSJohn Wren Kennedy		readonly|rdonly )
104d583b39bSJohn Wren Kennedy			for val in "on" "off"; do
105d583b39bSJohn Wren Kennedy				set_and_check $ds ${rw_prop[i]} $val ${chk_prop[i]}
106d583b39bSJohn Wren Kennedy			done
107d583b39bSJohn Wren Kennedy			;;
108d583b39bSJohn Wren Kennedy		compression|compress )
109d583b39bSJohn Wren Kennedy			for val in $(get_compress_opts zfs_set); do
110d583b39bSJohn Wren Kennedy				set_and_check $ds ${rw_prop[i]} $val ${chk_prop[i]}
111d583b39bSJohn Wren Kennedy			done
112d583b39bSJohn Wren Kennedy			;;
113d583b39bSJohn Wren Kennedy		reservation|reserv )
114*ebaf15cbSPrakash Surya			(( reservsize = $avail_space % (( $RANDOM + 1 )) ))
115d583b39bSJohn Wren Kennedy			for val in "0" "$reservsize" "none"; do
116d583b39bSJohn Wren Kennedy				set_and_check $ds ${rw_prop[i]} $val ${chk_prop[i]}
117d583b39bSJohn Wren Kennedy			done
118d583b39bSJohn Wren Kennedy			;;
119d583b39bSJohn Wren Kennedy		esac
120d583b39bSJohn Wren Kennedy
121d583b39bSJohn Wren Kennedy		(( i = i + 1 ))
122d583b39bSJohn Wren Kennedy	done
123d583b39bSJohn Wren Kennedy	if [[ $ds == $vol ]]; then
124d583b39bSJohn Wren Kennedy		for propname in "volblocksize" "volblock" ; do
1251d32ba66SJohn Wren Kennedy			zfs get -pH -o value $propname $ds >/dev/null 2>&1
126d583b39bSJohn Wren Kennedy			(( $? != 0 )) && \
127d583b39bSJohn Wren Kennedy				log_fail "Get the property $propname of $ds failed."
128d583b39bSJohn Wren Kennedy		done
129d583b39bSJohn Wren Kennedy	fi
130d583b39bSJohn Wren Kennedydone
131d583b39bSJohn Wren Kennedy
132d583b39bSJohn Wren Kennedyfor ds in $pool $fs; do
133d583b39bSJohn Wren Kennedy	for propname in "recordsize" "recsize"; do
134d583b39bSJohn Wren Kennedy		for val in ${size[*]}; do
135d583b39bSJohn Wren Kennedy			if [[ $propname == "recordsize" ]]; then
136d583b39bSJohn Wren Kennedy				set_and_check $ds $propname $val "recsize"
137d583b39bSJohn Wren Kennedy			else
138d583b39bSJohn Wren Kennedy				set_and_check $ds $propname $val "recordsize"
139d583b39bSJohn Wren Kennedy			fi
140d583b39bSJohn Wren Kennedy		done
141d583b39bSJohn Wren Kennedy	done
142d583b39bSJohn Wren Kennedydone
143d583b39bSJohn Wren Kennedy
144d583b39bSJohn Wren Kennedylog_pass "The alias of a property works as expected."
145