diff options
Diffstat (limited to 'sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_get/zfs_get_004_pos.ksh')
-rwxr-xr-x | sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_get/zfs_get_004_pos.ksh | 227 |
1 files changed, 227 insertions, 0 deletions
diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_get/zfs_get_004_pos.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_get/zfs_get_004_pos.ksh new file mode 100755 index 000000000000..4bd61137c7be --- /dev/null +++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/cli_root/zfs_get/zfs_get_004_pos.ksh @@ -0,0 +1,227 @@ +#!/bin/ksh -p +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +# +# Copyright 2007 Sun Microsystems, Inc. All rights reserved. +# Use is subject to license terms. +# + +# +# Copyright (c) 2012, 2016 by Delphix. All rights reserved. +# + +. $STF_SUITE/include/libtest.shlib + +# +# DESCRIPTION: +# Verify 'zfs get all' can get all properties for all datasets in the system +# +# STRATEGY: +# 1. Create datasets for testing +# 2. Issue 'zfs get all' command +# 3. Verify the command gets all available properties of all datasets +# + +verify_runnable "both" + +function cleanup +{ + [[ -e $propfile ]] && rm -f $propfile + + datasetexists $clone && \ + log_must zfs destroy $clone + for snap in $fssnap $volsnap ; do + snapexists $snap && \ + log_must zfs destroy $snap + done + + if [[ -n $globalzone ]] ; then + for pool in $TESTPOOL1 $TESTPOOL2 $TESTPOOL3; do + poolexists $pool && \ + log_must zpool destroy -f $pool + done + for file in `ls $TESTDIR1/poolfile*`; do + rm -f $file + done + else + for fs in $TESTPOOL/$TESTFS1 $TESTPOOL/$TESTFS2 $TESTPOOL/$TESTFS3; do + datasetexists $fs && \ + log_must zfs destroy -rf $fs + done + fi +} + +log_assert "Verify the functions of 'zfs get all' work." +log_onexit cleanup + +typeset globalzone="" + +if is_global_zone ; then + globalzone="true" +fi + +set -A opts "" "-r" "-H" "-p" "-rHp" "-o name" \ + "-s local,default,temporary,inherited,none" \ + "-o name -s local,default,temporary,inherited,none" \ + "-rHp -o name -s local,default,temporary,inherited,none" +set -A usrprops "a:b=c" "d_1:1_e=0f" "123:456=789" + +fs=$TESTPOOL/$TESTFS +fssnap=$fs@$TESTSNAP +clone=$TESTPOOL/$TESTCLONE +volsnap=$TESTPOOL/$TESTVOL@$TESTSNAP + +#set user defined properties for $TESTPOOL +for usrprop in ${usrprops[@]}; do + log_must zfs set $usrprop $TESTPOOL +done +# create snapshot and clone in $TESTPOOL +log_must zfs snapshot $fssnap +log_must zfs clone $fssnap $clone +log_must zfs snapshot $volsnap + +# collect datasets which can be set user defined properties +usrpropds="$clone $fs" + +# collect all datasets which we are creating +allds="$fs $clone $fssnap $volsnap" + +#create pool and datasets to guarantee testing under multiple pools and datasets. +file=$TESTDIR1/poolfile +typeset FILESIZE=$MINVDEVSIZE +(( DFILESIZE = $FILESIZE * 2 )) +typeset -i VOLSIZE=10485760 +availspace=$(get_prop available $TESTPOOL) +typeset -i i=0 + +# make sure 'availspace' is larger then twice of FILESIZE to create a new pool. +# If any, we only totally create 3 pools for multiple datasets testing to limit +# testing time +while (( availspace > DFILESIZE )) && (( i < 3 )) ; do + (( i += 1 )) + + if [[ -n $globalzone ]] ; then + log_must mkfile $FILESIZE ${file}$i + eval pool=\$TESTPOOL$i + log_must zpool create $pool ${file}$i + else + eval pool=$TESTPOOL/\$TESTFS$i + log_must zfs create $pool + fi + + #set user defined properties for testing + for usrprop in ${usrprops[@]}; do + log_must zfs set $usrprop $pool + done + + #create datasets in pool + log_must zfs create $pool/$TESTFS + log_must zfs snapshot $pool/$TESTFS@$TESTSNAP + log_must zfs clone $pool/$TESTFS@$TESTSNAP $pool/$TESTCLONE + + if [[ -n $globalzone ]] ; then + log_must zfs create -V $VOLSIZE $pool/$TESTVOL + else + log_must zfs create $pool/$TESTVOL + fi + + ds=`zfs list -H -r -o name -t filesystem,volume $pool` + usrpropds="$usrpropds $pool/$TESTFS $pool/$TESTCLONE $pool/$TESTVOL" + allds="$allds $pool/$TESTFS $pool/$TESTCLONE $pool/$TESTVOL \ + $pool/$TESTFS@$TESTSNAP" + + availspace=$(get_prop available $TESTPOOL) +done + +#the expected number of property for each type of dataset in this testing +typeset -i fspropnum=27 +typeset -i snappropnum=8 +typeset -i volpropnum=15 +propfile=$TEST_BASE_DIR/allpropfile.$$ + +typeset -i i=0 +typeset -i propnum=0 +typeset -i failflag=0 +while (( i < ${#opts[*]} )); do + [[ -e $propfile ]] && rm -f $propfile + log_must eval "zfs get ${opts[i]} all >$propfile" + + for ds in $allds; do + grep $ds $propfile >/dev/null 2>&1 + (( $? != 0 )) && \ + log_fail "There is no property for" \ + "dataset $ds in 'get all' output." + + propnum=`cat $propfile | awk '{print $1}' | \ + grep "${ds}$" | wc -l` + ds_type=`zfs get -H -o value type $ds` + case $ds_type in + filesystem ) + (( propnum < fspropnum )) && \ + (( failflag += 1 )) + ;; + snapshot ) + (( propnum < snappropnum )) && \ + (( failflag += 1 )) + ;; + volume ) + (( propnum < volpropnum )) && \ + (( failflag += 1 )) + ;; + esac + + (( failflag != 0 )) && \ + log_fail " 'zfs get all' fails to get out " \ + "all properties for dataset $ds." + + (( propnum = 0 )) + (( failflag = 0 )) + done + + (( i += 1 )) +done + +log_note "'zfs get' can get particular property for all datasets with that property." + +function do_particular_prop_test #<property> <suitable datasets> +{ + typeset props="$1" + typeset ds="$2" + + for prop in ${commprops[*]}; do + ds=`zfs get -H -o name $prop` + + [[ "$ds" != "$allds" ]] && \ + log_fail "The result datasets are $ds, but all suitable" \ + "datasets are $allds for the property $prop" + done +} + +# Here, we do a testing for user defined properties and the most common properties +# for all datasets. +commprop="type creation used referenced compressratio" +usrprop="a:b d_1:1_e 123:456" + +do_particular_prop_test "$commprop" "$allds" +do_particular_prop_test "$usrprop" "$usrpropds" + +log_pass "'zfs get all' works as expected." |