annotate usr/src/test/zfs-tests/tests/functional/cli_root/zpool_clear/zpool_clear_001_pos.ksh @ 13899:0bcf78798346

3311 Want a test framework for arbitrary OS unit tests 3312 Add a testrunner package for OS unit tests 3313 Add a testrunner package to convert ZFS tests from STF Reviewed by: Matt Ahrens <matthew.ahrens@delphix.com> Reviewed by: Will Guyette <will.guyette@delphix.com> Reviewed by: Dan Kimmel <dan.kimmel@delphix.com> Reviewed by: Adam Leventhal <ahl@delphix.com> Reviewed by: Henrik Mattson <henrik.mattson@delphix.com> Reviewed by: Sonu Pillai <sonu.pillai@delphix.com> Reviewed by: Christopher Siden <chris.siden@delphix.com> Reviewed by: George Wilson <george.wilson@delphix.com> Reviewed by: Richard Lowe <richlowe@richlowe.net> Approved by: Richard Lowe <richlowe@richlowe.net>
author John Wren Kennedy <john.kennedy@delphix.com>
date Wed, 05 Dec 2012 22:04:50 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13899
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
1 #!/bin/ksh -p
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
2 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
3 # CDDL HEADER START
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
4 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
5 # The contents of this file are subject to the terms of the
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
6 # Common Development and Distribution License (the "License").
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
7 # You may not use this file except in compliance with the License.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
8 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
10 # or http://www.opensolaris.org/os/licensing.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
11 # See the License for the specific language governing permissions
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
12 # and limitations under the License.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
13 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
14 # When distributing Covered Code, include this CDDL HEADER in each
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
16 # If applicable, add the following below this CDDL HEADER, with the
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
17 # fields enclosed by brackets "[]" replaced with your own identifying
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
18 # information: Portions Copyright [yyyy] [name of copyright owner]
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
19 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
20 # CDDL HEADER END
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
21 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
22
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
23 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
24 # Copyright 2007 Sun Microsystems, Inc. All rights reserved.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
25 # Use is subject to license terms.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
26 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
27
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
28 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
29 # Copyright (c) 2012 by Delphix. All rights reserved.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
30 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
31
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
32 . $STF_SUITE/include/libtest.shlib
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
33 . $STF_SUITE/tests/functional/cli_root/zpool_clear/zpool_clear.cfg
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
34
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
35 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
36 # DESCRIPTION:
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
37 # Verify 'zpool clear' can clear pool errors.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
38 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
39 # STRATEGY:
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
40 # 1. Create various configuration pools
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
41 # 2. Make errors to pool
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
42 # 3. Use zpool clear to clear errors
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
43 # 4. Verify the errors has been cleared.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
44 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
45
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
46 verify_runnable "global"
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
47
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
48 function cleanup
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
49 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
50 poolexists $TESTPOOL1 && \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
51 log_must $ZPOOL destroy -f $TESTPOOL1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
52
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
53 for file in `$LS $TESTDIR/file.*`; do
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
54 log_must $RM -f $file
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
55 done
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
56 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
57
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
58
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
59 log_assert "Verify 'zpool clear' can clear errors of a storage pool."
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
60 log_onexit cleanup
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
61
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
62 #make raw files to create various configuration pools
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
63 typeset -i i=0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
64 while (( i < 3 )); do
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
65 log_must $MKFILE $FILESIZE $TESTDIR/file.$i
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
66
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
67 (( i = i + 1 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
68 done
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
69
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
70 fbase=$TESTDIR/file
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
71 set -A poolconf "mirror $fbase.0 $fbase.1 $fbase.2" \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
72 "raidz1 $fbase.0 $fbase.1 $fbase.2" \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
73 "raidz2 $fbase.0 $fbase.1 $fbase.2"
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
74
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
75 function check_err # <pool> [<vdev>]
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
76 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
77 typeset pool=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
78 shift
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
79 if (( $# > 0 )); then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
80 typeset checkvdev=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
81 else
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
82 typeset checkvdev=""
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
83 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
84 typeset -i errnum=0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
85 typeset c_read=0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
86 typeset c_write=0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
87 typeset c_cksum=0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
88 typeset tmpfile=/var/tmp/file.$$
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
89 typeset healthstr="pool '$pool' is healthy"
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
90 typeset output="`$ZPOOL status -x $pool`"
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
91
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
92 [[ "$output" == "$healthstr" ]] && return $errnum
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
93
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
94 $ZPOOL status -x $pool | $GREP -v "^$" | $GREP -v "pool:" \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
95 | $GREP -v "state:" | $GREP -v "config:" \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
96 | $GREP -v "errors:" > $tmpfile
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
97 typeset line
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
98 typeset -i fetchbegin=1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
99 while read line; do
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
100 if (( $fetchbegin != 0 )); then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
101 $ECHO $line | $GREP "NAME" >/dev/null 2>&1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
102 (( $? == 0 )) && (( fetchbegin = 0 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
103 continue
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
104 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
105
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
106 if [[ -n $checkvdev ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
107 $ECHO $line | $GREP $checkvdev >/dev/null 2>&1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
108 (( $? != 0 )) && continue
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
109 c_read=`$ECHO $line | $AWK '{print $3}'`
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
110 c_write=`$ECHO $line | $AWK '{print $4}'`
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
111 c_cksum=`$ECHO $line | $AWK '{print $5}'`
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
112 if [ $c_read != 0 ] || [ $c_write != 0 ] || \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
113 [ $c_cksum != 0 ]
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
114 then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
115 (( errnum = errnum + 1 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
116 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
117 break
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
118 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
119
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
120 c_read=`$ECHO $line | $AWK '{print $3}'`
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
121 c_write=`$ECHO $line | $AWK '{print $4}'`
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
122 c_cksum=`$ECHO $line | $AWK '{print $5}'`
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
123 if [ $c_read != 0 ] || [ $c_write != 0 ] || \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
124 [ $c_cksum != 0 ]
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
125 then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
126 (( errnum = errnum + 1 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
127 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
128 done <$tmpfile
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
129
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
130 return $errnum
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
131 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
132
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
133 function do_testing #<clear type> <vdevs>
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
134 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
135 typeset FS=$TESTPOOL1/fs
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
136 typeset file=/$FS/f
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
137 typeset type=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
138 shift
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
139 typeset vdev="$@"
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
140
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
141 log_must $ZPOOL create -f $TESTPOOL1 $vdev
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
142 log_must $ZFS create $FS
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
143 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
144 # Fully fill up the zfs filesystem in order to make data block errors
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
145 # zfs filesystem
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
146 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
147 typeset -i ret=0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
148 typeset -i i=0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
149 while $TRUE ; do
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
150 $FILE_WRITE -o create -f $file.$i -b $BLOCKSZ -c $NUM_WRITES
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
151 ret=$?
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
152 (( $ret != 0 )) && break
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
153 (( i = i + 1 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
154 done
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
155 (( $ret != 28 )) && log_fail "$FILE_WRITE fails to fully fill up the $FS."
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
156
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
157 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
158 #Make errors to the testing pool by overwrite the vdev device with
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
159 #/usr/bin/dd command. We donot want to have a full overwrite. That
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
160 #may cause the system panic. So, we should skip the vdev label space.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
161 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
162 (( i = $RANDOM % 3 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
163 typeset -i wcount=0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
164 typeset -i size
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
165 case $FILESIZE in
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
166 *g|*G)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
167 (( size = ${FILESIZE%%[g|G]} ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
168 (( wcount = size*1024*1024 - 512 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
169 ;;
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
170 *m|*M)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
171 (( size = ${FILESIZE%%[m|M]} ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
172 (( wcount = size*1024 - 512 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
173 ;;
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
174 *k|*K)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
175 (( size = ${FILESIZE%%[k|K]} ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
176 (( wcount = size - 512 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
177 ;;
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
178 *)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
179 (( wcount = FILESIZE/1024 - 512 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
180 ;;
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
181 esac
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
182 $DD if=/dev/zero of=$fbase.$i seek=512 bs=1024 count=$wcount conv=notrunc \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
183 > /dev/null 2>&1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
184 log_must $SYNC
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
185 log_must $ZPOOL scrub $TESTPOOL1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
186 # Wait for the completion of scrub operation
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
187 while is_pool_scrubbing $TESTPOOL1; do
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
188 $SLEEP 1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
189 done
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
190
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
191 check_err $TESTPOOL1 && \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
192 log_fail "No error generated."
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
193 if [[ $type == "device" ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
194 log_must $ZPOOL clear $TESTPOOL1 $fbase.$i
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
195 ! check_err $TESTPOOL1 $fbase.$i && \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
196 log_fail "'zpool clear' fails to clear error for $fbase.$i device."
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
197 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
198
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
199 if [[ $type == "pool" ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
200 log_must $ZPOOL clear $TESTPOOL1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
201 ! check_err $TESTPOOL1 && \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
202 log_fail "'zpool clear' fails to clear error for pool $TESTPOOL1."
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
203 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
204
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
205 log_must $ZPOOL destroy $TESTPOOL1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
206 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
207
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
208 log_note "'zpool clear' clears leaf-device error."
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
209 for devconf in "${poolconf[@]}"; do
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
210 do_testing "device" $devconf
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
211 done
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
212 log_note "'zpool clear' clears top-level pool error."
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
213 for devconf in "${poolconf[@]}"; do
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
214 do_testing "pool" $devconf
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
215 done
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
216
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
217 log_pass "'zpool clear' clears pool errors as expected."