dmake: do not set MAKEFLAGS=k
[unleashed/tickless.git] / usr / src / test / zfs-tests / tests / functional / slog / slog.kshlib
bloba6d82f28d81bd1ab296761089f494e3aee420db3
2 # CDDL HEADER START
4 # The contents of this file are subject to the terms of the
5 # Common Development and Distribution License (the "License").
6 # You may not use this file except in compliance with the License.
8 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 # or http://www.opensolaris.org/os/licensing.
10 # See the License for the specific language governing permissions
11 # and limitations under the License.
13 # When distributing Covered Code, include this CDDL HEADER in each
14 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 # If applicable, add the following below this CDDL HEADER, with the
16 # fields enclosed by brackets "[]" replaced with your own identifying
17 # information: Portions Copyright [yyyy] [name of copyright owner]
19 # CDDL HEADER END
23 # Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
24 # Use is subject to license terms.
28 # Copyright (c) 2013, 2016 by Delphix. All rights reserved.
31 . $STF_SUITE/include/libtest.shlib
32 . $STF_SUITE/tests/functional/slog/slog.cfg
34 function cleanup
36         if datasetexists $TESTPOOL ; then
37                 log_must zpool destroy -f $TESTPOOL
38         fi
39         if datasetexists $TESTPOOL2 ; then
40                 log_must zpool destroy -f $TESTPOOL2
41         fi
45 # Try zpool status/iostat for given pool
47 # $1 pool
49 function display_status
51         typeset pool=$1
53         typeset -i ret=0
54         zpool status -xv $pool > /dev/null 2>&1
55         ret=$?
57         zpool iostat > /dev/null 2>&1
58         ((ret |= $?))
60         typeset mntpnt=$(get_prop mountpoint $pool)
61         dd if=/dev/random of=$mntpnt/testfile.$$ &
62         typeset pid=$!
64         zpool iostat -v 1 3 > /dev/null
65         ((ret |= $?))
67         kill -9 $pid
69         return $ret
73 # Verify the give slog device have correct type and status
75 # $1 pool name
76 # $2 device name
77 # $3 device status
78 # $4 device type
80 function verify_slog_device
82         typeset pool=$1
83         typeset device=$2
84         typeset status=$3
85         typeset type=$4
87         if [[ -z $pool || -z $device || -z $status ]]; then
88                 log_fail "Usage: verify_slog_device <pool> <device> " \
89                         "<status> [type]"
90         fi
92         #
93         # Get all the slog devices and status table like below
94         #
95         # mirror:/disks/d ONLINE mirror:/disks/e ONLINE stripe:/disks/f ONLINE
96         #
97         set -A dev_stat_tab $(zpool status -v $pool | nawk 'BEGIN {start=0} \
98                                 /\tlogs/ {start=1}
99                                 /\tmirror/ || /\tspares/ || /^$/ {start=0}
100                                 (start==1) && /\t  (\/|[a-zA-Z])/ \
101                                         {print "stripe:" $1 " " $2}
102                                 (start==1) && /\t    (\/|[a-zA-Z])/ \
103                                         {print "mirror:" $1 " " $2}
104                                 # When hotspare is replacing
105                                 (start==1) && /\t      (\/|[a-zA-Z])/ \
106                                         {print "mirror:" $1 " " $2}'
107                              )
109         typeset -i i=0
110         typeset find=0
111         while (( i < ${#dev_stat_tab[@]} )); do
112                 typeset dev=${dev_stat_tab[$i]}
113                 typeset stat=${dev_stat_tab[((i+1))]}
115                 case $dev in
116                         stripe:$device)
117                                 if [[ "$type" == 'mirror' ]]; then
118                                         log_note "Unexpected type: mirror"
119                                         return 1
120                                 else
121                                         if [[ $stat != $status ]]; then
122                                                 log_note "Status($stat) " \
123                                                         "!= Expected stat($status)"
124                                                 return 1
125                                         fi
126                                         return 0
127                                 fi
128                                 ;;
129                         mirror:$device)
130                                 if [[ -z "$type" || $type == 'stripe' ]]; then
131                                         log_note "Unexpected type: stripe"
132                                         return 1
133                                 else
134                                         if [[ $stat != $status ]]; then
135                                                 log_note "Status($stat) " \
136                                                         "!= Expected stat($status)"
137                                                 return 1
138                                         fi
139                                         return 0
140                                 fi
141                                 ;;
142                 esac
144                 ((i += 2))
145         done
147         log_note "Can not find device: $device"
149         return 1