aboutsummaryrefslogtreecommitdiff
path: root/tests/zfs-tests/tests/functional/cache/cache.kshlib
diff options
context:
space:
mode:
Diffstat (limited to 'tests/zfs-tests/tests/functional/cache/cache.kshlib')
-rw-r--r--tests/zfs-tests/tests/functional/cache/cache.kshlib154
1 files changed, 154 insertions, 0 deletions
diff --git a/tests/zfs-tests/tests/functional/cache/cache.kshlib b/tests/zfs-tests/tests/functional/cache/cache.kshlib
new file mode 100644
index 000000000000..2e258e22cd39
--- /dev/null
+++ b/tests/zfs-tests/tests/functional/cache/cache.kshlib
@@ -0,0 +1,154 @@
+#
+# 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) 2013, 2016 by Delphix. All rights reserved.
+#
+
+. $STF_SUITE/include/libtest.shlib
+
+function cleanup
+{
+ if datasetexists $TESTPOOL ; then
+ log_must zpool destroy -f $TESTPOOL
+ fi
+ if datasetexists $TESTPOOL2 ; then
+ log_must zpool destroy -f $TESTPOOL2
+ fi
+}
+
+#
+# Try zpool status/iostat for given pool
+#
+# $1 pool
+#
+function display_status
+{
+ typeset pool=$1
+
+ typeset -i ret=0
+ zpool status -xv $pool > /dev/null 2>&1
+ ret=$?
+
+ zpool iostat > /dev/null 2>&1
+ ((ret |= $?))
+
+ typeset mntpnt=$(get_prop mountpoint $pool)
+ dd if=/dev/urandom of=$mntpnt/testfile.$$ &
+ typeset pid=$!
+
+ zpool iostat -v 1 3 > /dev/null
+ ((ret |= $?))
+
+ kill -9 $pid
+ wait
+
+ return $ret
+}
+
+#
+# Verify the given cache device have correct type and status
+#
+# $1 pool name
+# $2 device name
+# $3 device status
+# $4 device type
+#
+function verify_cache_device
+{
+ typeset pool=$1
+ typeset device=$2
+ typeset status=$3
+ typeset type=$4
+
+ if [[ -z $pool || -z $device || -z $status ]]; then
+ log_fail "Usage: verify_cache_device <pool> <device> " \
+ "<status> [type]"
+ fi
+
+ #
+ # Get all the cache devices and status table like below
+ #
+ # mirror:/disks/d ONLINE mirror:/disks/e ONLINE stripe:/disks/f ONLINE
+ #
+ set -A dev_stat_tab $(zpool status -v $pool | nawk 'BEGIN {start=0} \
+ /\tcache/ {start=1}
+ /\tmirror/ || /\tspares/ || /^$/ {start=0}
+ (start==1) && /\t (\/|[a-zA-Z])/ \
+ {print "stripe:" $1 " " $2}
+ (start==1) && /\t (\/|[a-zA-Z])/ \
+ {print "mirror:" $1 " " $2}
+ # When hotspare is replacing
+ (start==1) && /\t (\/|[a-zA-Z])/ \
+ {print "mirror:" $1 " " $2}'
+ )
+
+ typeset -i i=0
+ typeset find=0
+ while (( i < ${#dev_stat_tab[@]} )); do
+ typeset dev=${dev_stat_tab[$i]}
+ typeset stat=${dev_stat_tab[((i+1))]}
+
+ case $dev in
+ stripe:$device)
+ if [[ "$type" == 'mirror' ]]; then
+ log_note "Unexpected type: mirror"
+ return 1
+ else
+ if [[ $stat != $status ]]; then
+ log_note "Status($stat) " \
+ "!= Expected stat($status)"
+ return 1
+ fi
+ return 0
+ fi
+ ;;
+ mirror:$device)
+ if [[ -z "$type" || $type == 'stripe' ]]; then
+ log_note "Unexpected type: stripe"
+ return 1
+ else
+ if [[ $stat != $status ]]; then
+ log_note "Status($stat) " \
+ "!= Expected stat($status)"
+ return 1
+ fi
+ return 0
+ fi
+ ;;
+ esac
+ ((i += 2))
+ done
+
+ log_note "Can not find device: $device"
+ return 1
+}
+
+function verify_cache_support
+{
+ zpool upgrade -v | grep "Cache devices" > /dev/null 2>&1
+ return $?
+}