blob: c98e49518712bc05bd2c42eda60b55f2df27aad2 [file] [log] [blame]
#
# 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 2009 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
. $STF_SUITE/tests/functional/cli_root/zpool_create/zpool_create.cfg
#
# Given a pool vdevs list, create the pool,verify the created pool,
# and destroy the pool
# $1, pool name
# $2, pool type, mirror, raidz, or none
# $3, vdevs list
#
function create_pool_test
{
typeset pool=$1
typeset keywd=$2
typeset vdevs
eval "typeset -a diskarray=($3)"
for vdevs in "${diskarray[@]}"; do
create_pool $pool $keywd $vdevs
log_must poolexists $pool
destroy_pool $pool
done
}
#
# Create a file for storage pool vdev
# $1, file size
#
function create_blockfile
{
typeset size=$1
typeset file=$(mktemp)
truncate -s $size $file
echo $file
}
#
# Find the storage device in /etc/vfstab
#
function find_vfstab_dev
{
typeset vfstabdev
typeset vfstabdevs=""
typeset line
if is_illumos; then
vfstab="/etc/vfstab"
tmpfile="$TEST_BASE_DIR/vfstab.tmp"
else
vfstab="/etc/fstab"
tmpfile="$TEST_BASE_DIR/fstab.tmp"
fi
cat $vfstab | grep "^${DEV_DSKDIR}" >$tmpfile
while read -r line
do
vfstabdev=`echo "$line" | awk '{print $1}'`
vfstabdev=${vfstabdev%%:}
vfstabdevs="$vfstabdev $vfstabdevs"
done <$tmpfile
rm -f $tmpfile
echo $vfstabdevs
}
#
# Save the system current dump device configuration
#
function save_dump_dev
{
typeset dumpdev=""
if is_illumos; then
typeset fnd="Dump device"
dumpdev=`dumpadm | grep "$fnd" | cut -f2 -d : | \
awk '{print $1}'`
fi
echo $dumpdev
}
#
# Verify a pools enabled features match the provided feature set.
# $1, pool name
# $2, feature set(s)
#
# check_feature_set $TESTPOOL set1 set2 set3 ...
#
function check_feature_set
{
typeset pool=$1
typeset feature_set=$2
shift
for set in "$@"; do
if test -e "$ZPOOL_COMPAT_DIR/$set"; then
file="$ZPOOL_COMPAT_DIR/$set"
else
log_fail "Missing feature file: $ZPOOL_COMPAT_DIR/$set"
fi
done
#
# Create a temporary file which contains all features which are
# common to the listed feature sets. This is used for comparison
# below to determine which features should be enabled.
#
typeset tmpfile=$(mktemp)
while read line; do
typeset flag=1
if [[ "$line" == "#*" ]]; then
continue
fi
for set in "$@"; do
if ! grep -q "$line" $ZPOOL_COMPAT_DIR/$set; then
flag=0
break;
fi
done
if [[ $flag -eq 1 ]]; then
echo "$line" >>$tmpfile
fi
done <"$file"
#
# Verify every enabled feature appears in the merged feature set.
# Verify every disabled feature does not.
#
for feature in $(zpool get all $pool | \
awk '$2 ~ /feature@/ { print $2 }'); do
state=$(get_pool_prop $feature $pool)
name=$(cut -d'@' -f2 <<<"$feature")
if [[ "$state" = "enabled" || "$state" = "active" ]]; then
if ! grep -q $name $tmpfile; then
cat $tmpfile
rm -f $tmpfile
log_fail "Enabled feature $name not " \
"in feature set file"
fi
elif [[ "$state" = "disabled" ]]; then
if grep -q $name $tmpfile; then
cat $tmpfile
rm -f $tmpfile
log_fail "Disabled feature $name is " \
"in feature set file"
fi
else
rm -f $tmpfile
log_fail "Feature $name in unknown state $state"
fi
done
log_note "Checked all features"
rm -f $tmpfile
}