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
28d583b39bSJohn Wren Kennedy#
29*1d32ba66SJohn Wren Kennedy# Copyright (c) 2012, 2016 by Delphix. All rights reserved.
30d583b39bSJohn Wren Kennedy#
31d583b39bSJohn Wren Kennedy
32d583b39bSJohn Wren Kennedy. $STF_SUITE/include/libtest.shlib
33d583b39bSJohn Wren Kennedy. $STF_SUITE/tests/functional/cli_root/zfs_create/zfs_create.cfg
34d583b39bSJohn Wren Kennedy. $STF_SUITE/tests/functional/cli_root/zfs_create/properties.kshlib
35d583b39bSJohn Wren Kennedy
36d583b39bSJohn Wren Kennedy#
37d583b39bSJohn Wren Kennedy# DESCRIPTION:
38d583b39bSJohn Wren Kennedy# 'zfs create [-b <blocksize> ] -V <size> <volume>' fails with badly formed
39d583b39bSJohn Wren Kennedy# <size> or <volume> arguments,including:
40d583b39bSJohn Wren Kennedy#	*Invalid volume size and volume name
41d583b39bSJohn Wren Kennedy#	*Invalid blocksize
42d583b39bSJohn Wren Kennedy#	*Incomplete component in the dataset tree
43d583b39bSJohn Wren Kennedy#	*The volume already exists
44d583b39bSJohn Wren Kennedy#	*The volume name beyond the maximal name length - 256.
45d583b39bSJohn Wren Kennedy#       *Same property set multiple times via '-o property=value'
46d583b39bSJohn Wren Kennedy#       *Filesystems's property set on volume
47d583b39bSJohn Wren Kennedy#
48d583b39bSJohn Wren Kennedy# STRATEGY:
49d583b39bSJohn Wren Kennedy# 1. Create an array of badly formed arguments
50d583b39bSJohn Wren Kennedy# 2. For each argument, execute 'zfs create -V <size> <volume>'
51d583b39bSJohn Wren Kennedy# 3. Verify an error is returned.
52d583b39bSJohn Wren Kennedy#
53d583b39bSJohn Wren Kennedy
54d583b39bSJohn Wren Kennedyverify_runnable "global"
55d583b39bSJohn Wren Kennedy
56d583b39bSJohn Wren Kennedyfunction cleanup
57d583b39bSJohn Wren Kennedy{
58d583b39bSJohn Wren Kennedy	typeset -i i
59d583b39bSJohn Wren Kennedy	typeset found
60d583b39bSJohn Wren Kennedy
61d583b39bSJohn Wren Kennedy	#
62d583b39bSJohn Wren Kennedy	# check to see if there is any new fs created during the test
63d583b39bSJohn Wren Kennedy	# if so destroy it.
64d583b39bSJohn Wren Kennedy	#
65*1d32ba66SJohn Wren Kennedy	for dset in $(zfs list -H | \
66*1d32ba66SJohn Wren Kennedy		awk '{print $1}' | grep / ); do
67d583b39bSJohn Wren Kennedy		found=false
68d583b39bSJohn Wren Kennedy		i=0
69d583b39bSJohn Wren Kennedy		while (( $i < ${#existed_fs[*]} )); do
70d583b39bSJohn Wren Kennedy			if [[ $dset == ${existed_fs[i]} ]]; then
71d583b39bSJohn Wren Kennedy				found=true
72d583b39bSJohn Wren Kennedy				break
73d583b39bSJohn Wren Kennedy			fi
74d583b39bSJohn Wren Kennedy			(( i = i  + 1 ))
75d583b39bSJohn Wren Kennedy		done
76d583b39bSJohn Wren Kennedy
77d583b39bSJohn Wren Kennedy		#
78d583b39bSJohn Wren Kennedy		# new fs created during the test, cleanup it
79d583b39bSJohn Wren Kennedy		#
80d583b39bSJohn Wren Kennedy		if [[ $found == "false" ]]; then
81*1d32ba66SJohn Wren Kennedy			log_must zfs destroy -f $dset
82d583b39bSJohn Wren Kennedy		fi
83d583b39bSJohn Wren Kennedy	done
84d583b39bSJohn Wren Kennedy}
85d583b39bSJohn Wren Kennedy
86d583b39bSJohn Wren Kennedylog_onexit cleanup
87d583b39bSJohn Wren Kennedy
88d583b39bSJohn Wren Kennedylog_assert "Verify 'zfs create [-s] [-b <blocksize> ] -V <size> <volume>' fails with" \
89d583b39bSJohn Wren Kennedy    "badly-formed <size> or <volume> arguments."
90d583b39bSJohn Wren Kennedy
91d583b39bSJohn Wren Kennedyset -A args "$VOLSIZE" "$TESTVOL1" \
92d583b39bSJohn Wren Kennedy	"$VOLSIZE $TESTVOL1" "0 $TESTPOOL/$TESTVOL1" \
93d583b39bSJohn Wren Kennedy	"-1gb $TESTPOOL/$TESTVOL1" "1g? $TESTPOOL/$TESTVOL1" \
94d583b39bSJohn Wren Kennedy	"1.01BB $TESTPOOL/$TESTVOL1" "1%g $TESTPOOL/$TESTVOL1" \
95d583b39bSJohn Wren Kennedy	"1g% $TESTPOOL/$TESTVOL1" "1g$ $TESTPOOL/$TESTVOL1" \
96d583b39bSJohn Wren Kennedy	"$m $TESTPOOL/$TESTVOL1" "1m$ $TESTPOOL/$TESTVOL1" \
97d583b39bSJohn Wren Kennedy	"1m! $TESTPOOL/$TESTVOL1" \
98d583b39bSJohn Wren Kennedy	"1gbb $TESTPOOL/blah" "1blah $TESTPOOL/blah" "blah $TESTPOOL/blah" \
99d583b39bSJohn Wren Kennedy	"$VOLSIZE $TESTPOOL" "$VOLSIZE $TESTPOOL/" "$VOLSIZE $TESTPOOL//blah"\
100d583b39bSJohn Wren Kennedy	"$VOLSIZE $TESTPOOL/blah@blah" "$VOLSIZE $TESTPOOL/blah^blah" \
101d583b39bSJohn Wren Kennedy	"$VOLSIZE $TESTPOOL/blah*blah" "$VOLSIZE $TESTPOOL/blah%blah" \
102d583b39bSJohn Wren Kennedy	"$VOLSIZE blah" "$VOLSIZE $TESTPOOL/$BYND_MAX_NAME" \
103d583b39bSJohn Wren Kennedy	"1m -b $TESTPOOL/$TESTVOL1" "1m -b 11k $TESTPOOL/$TESTVOL1" \
104d583b39bSJohn Wren Kennedy	"1m -b 511 $TESTPOOL/$TESTVOL1" "1m -b 256k $TESTPOOL/$TESTVOL1"
105d583b39bSJohn Wren Kennedy
106d583b39bSJohn Wren Kennedyset -A options "" "-s"
107d583b39bSJohn Wren Kennedy
108d583b39bSJohn Wren Kennedydatasetexists $TESTPOOL/$TESTVOL || \
109*1d32ba66SJohn Wren Kennedy		log_must zfs create -V $VOLSIZE $TESTPOOL/$TESTVOL
110d583b39bSJohn Wren Kennedy
111*1d32ba66SJohn Wren Kennedyset -A existed_fs $(zfs list -H | awk '{print $1}' | grep / )
112d583b39bSJohn Wren Kennedy
113*1d32ba66SJohn Wren Kennedylog_mustnot zfs create -V $VOLSIZE $TESTPOOL/$TESTVOL
114*1d32ba66SJohn Wren Kennedylog_mustnot zfs create -s -V $VOLSIZE $TESTPOOL/$TESTVOL
115d583b39bSJohn Wren Kennedy
116d583b39bSJohn Wren Kennedytypeset -i i=0
117d583b39bSJohn Wren Kennedytypeset -i j=0
118d583b39bSJohn Wren Kennedywhile (( i < ${#options[*]} )); do
119d583b39bSJohn Wren Kennedy
120d583b39bSJohn Wren Kennedy	j=0
121d583b39bSJohn Wren Kennedy	while (( j < ${#args[*]} )); do
122*1d32ba66SJohn Wren Kennedy		log_mustnot zfs create ${options[$i]} -V ${args[$j]}
123*1d32ba66SJohn Wren Kennedy		log_mustnot zfs create -p ${options[$i]} -V ${args[$j]}
124d583b39bSJohn Wren Kennedy
125d583b39bSJohn Wren Kennedy		((j = j + 1))
126d583b39bSJohn Wren Kennedy	done
127d583b39bSJohn Wren Kennedy
128d583b39bSJohn Wren Kennedy	j=0
129d583b39bSJohn Wren Kennedy	while (( $j < ${#RW_VOL_PROP[*]} )); do
130*1d32ba66SJohn Wren Kennedy		log_mustnot zfs create ${options[$i]} -o ${RW_VOL_PROP[j]} \
131d583b39bSJohn Wren Kennedy		    -o ${RW_VOL_PROP[j]} -V $VOLSIZE $TESTPOOL/$TESTVOL1
132*1d32ba66SJohn Wren Kennedy		log_mustnot zfs create -p ${options[$i]} -o ${RW_VOL_PROP[j]} \
133d583b39bSJohn Wren Kennedy		    -o ${RW_VOL_PROP[j]} -V $VOLSIZE $TESTPOOL/$TESTVOL1
134d583b39bSJohn Wren Kennedy		((j = j + 1))
135d583b39bSJohn Wren Kennedy	done
136d583b39bSJohn Wren Kennedy
137d583b39bSJohn Wren Kennedy	j=0
138d583b39bSJohn Wren Kennedy	while (( $j < ${#FS_ONLY_PROP[*]} )); do
139*1d32ba66SJohn Wren Kennedy		log_mustnot zfs create ${options[$i]} -o ${FS_ONLY_PROP[j]} \
140d583b39bSJohn Wren Kennedy		    -V $VOLSIZE $TESTPOOL/$TESTVOL1
141*1d32ba66SJohn Wren Kennedy		log_mustnot zfs create -p ${options[$i]} -o ${FS_ONLY_PROP[j]} \
142d583b39bSJohn Wren Kennedy		    -V $VOLSIZE $TESTPOOL/$TESTVOL1
143d583b39bSJohn Wren Kennedy		((j = j + 1))
144d583b39bSJohn Wren Kennedy	done
145d583b39bSJohn Wren Kennedy
146d583b39bSJohn Wren Kennedy	((i = i + 1))
147d583b39bSJohn Wren Kennedydone
148d583b39bSJohn Wren Kennedy
149d583b39bSJohn Wren Kennedylog_pass "'zfs create [-s][-b <blocksize>] -V <size> <volume>' fails as expected."
150