| # |
| # 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 |
| } |