1*f38cb554SJohn Wren Kennedy#!/bin/ksh -p
2*f38cb554SJohn Wren Kennedy#
3*f38cb554SJohn Wren Kennedy# CDDL HEADER START
4*f38cb554SJohn Wren Kennedy#
5*f38cb554SJohn Wren Kennedy# The contents of this file are subject to the terms of the
6*f38cb554SJohn Wren Kennedy# Common Development and Distribution License (the "License").
7*f38cb554SJohn Wren Kennedy# You may not use this file except in compliance with the License.
8*f38cb554SJohn Wren Kennedy#
9*f38cb554SJohn Wren Kennedy# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*f38cb554SJohn Wren Kennedy# or http://www.opensolaris.org/os/licensing.
11*f38cb554SJohn Wren Kennedy# See the License for the specific language governing permissions
12*f38cb554SJohn Wren Kennedy# and limitations under the License.
13*f38cb554SJohn Wren Kennedy#
14*f38cb554SJohn Wren Kennedy# When distributing Covered Code, include this CDDL HEADER in each
15*f38cb554SJohn Wren Kennedy# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*f38cb554SJohn Wren Kennedy# If applicable, add the following below this CDDL HEADER, with the
17*f38cb554SJohn Wren Kennedy# fields enclosed by brackets "[]" replaced with your own identifying
18*f38cb554SJohn Wren Kennedy# information: Portions Copyright [yyyy] [name of copyright owner]
19*f38cb554SJohn Wren Kennedy#
20*f38cb554SJohn Wren Kennedy# CDDL HEADER END
21*f38cb554SJohn Wren Kennedy#
22*f38cb554SJohn Wren Kennedy
23*f38cb554SJohn Wren Kennedy#
24*f38cb554SJohn Wren Kennedy# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
25*f38cb554SJohn Wren Kennedy# Use is subject to license terms.
26*f38cb554SJohn Wren Kennedy#
27*f38cb554SJohn Wren Kennedy
28*f38cb554SJohn Wren Kennedy#
29*f38cb554SJohn Wren Kennedy# Copyright (c) 2013 by Delphix. All rights reserved.
30*f38cb554SJohn Wren Kennedy#
31*f38cb554SJohn Wren Kennedy
32*f38cb554SJohn Wren Kennedy. $STF_SUITE/tests/functional/redundancy/redundancy.kshlib
33*f38cb554SJohn Wren Kennedy
34*f38cb554SJohn Wren Kennedy#
35*f38cb554SJohn Wren Kennedy# DESCRIPTION:
36*f38cb554SJohn Wren Kennedy#	A mirrored pool can withstand N-1 device are failing or missing.
37*f38cb554SJohn Wren Kennedy#
38*f38cb554SJohn Wren Kennedy# STRATEGY:
39*f38cb554SJohn Wren Kennedy#	1. Create N(>2,<5) virtual disk files.
40*f38cb554SJohn Wren Kennedy#	2. Create mirror pool based on the virtual disk files.
41*f38cb554SJohn Wren Kennedy#	3. Fill the filesystem with directories and files.
42*f38cb554SJohn Wren Kennedy#	4. Record all the files and directories checksum information.
43*f38cb554SJohn Wren Kennedy#	5. Damaged at most N-1 of the virtual disk files.
44*f38cb554SJohn Wren Kennedy#	6. Verify the data are correct to prove mirror can withstand N-1 devices
45*f38cb554SJohn Wren Kennedy#	   are failing.
46*f38cb554SJohn Wren Kennedy#
47*f38cb554SJohn Wren Kennedy
48*f38cb554SJohn Wren Kennedyverify_runnable "global"
49*f38cb554SJohn Wren Kennedy
50*f38cb554SJohn Wren Kennedylog_assert "Verify mirrored pool can withstand N-1 devices are failing or missing."
51*f38cb554SJohn Wren Kennedylog_onexit cleanup
52*f38cb554SJohn Wren Kennedy
53*f38cb554SJohn Wren Kennedytypeset -i cnt=$(random 2 5)
54*f38cb554SJohn Wren Kennedysetup_test_env $TESTPOOL mirror $cnt
55*f38cb554SJohn Wren Kennedy
56*f38cb554SJohn Wren Kennedytypeset -i i=1
57*f38cb554SJohn Wren Kennedy
58*f38cb554SJohn Wren Kennedy#
59*f38cb554SJohn Wren Kennedy# Inject data corruption errors for mirrored pool
60*f38cb554SJohn Wren Kennedy#
61*f38cb554SJohn Wren Kennedywhile (( i < cnt )); do
62*f38cb554SJohn Wren Kennedy	damage_devs $TESTPOOL $i "label"
63*f38cb554SJohn Wren Kennedy	log_must is_data_valid $TESTPOOL
64*f38cb554SJohn Wren Kennedy	log_must clear_errors $TESTPOOL
65*f38cb554SJohn Wren Kennedy
66*f38cb554SJohn Wren Kennedy	(( i +=1 ))
67*f38cb554SJohn Wren Kennedydone
68*f38cb554SJohn Wren Kennedy
69*f38cb554SJohn Wren Kennedy#
70*f38cb554SJohn Wren Kennedy# Inject  bad devices errors for mirrored pool
71*f38cb554SJohn Wren Kennedy#
72*f38cb554SJohn Wren Kennedyi=1
73*f38cb554SJohn Wren Kennedywhile (( i < cnt )); do
74*f38cb554SJohn Wren Kennedy        damage_devs $TESTPOOL $i
75*f38cb554SJohn Wren Kennedy        log_must is_data_valid $TESTPOOL
76*f38cb554SJohn Wren Kennedy	log_must recover_bad_missing_devs $TESTPOOL $i
77*f38cb554SJohn Wren Kennedy
78*f38cb554SJohn Wren Kennedy	(( i +=1 ))
79*f38cb554SJohn Wren Kennedydone
80*f38cb554SJohn Wren Kennedy
81*f38cb554SJohn Wren Kennedy#
82*f38cb554SJohn Wren Kennedy# Inject missing device errors for mirrored pool
83*f38cb554SJohn Wren Kennedy#
84*f38cb554SJohn Wren Kennedyi=1
85*f38cb554SJohn Wren Kennedywhile (( i < cnt )); do
86*f38cb554SJohn Wren Kennedy        remove_devs $TESTPOOL $i
87*f38cb554SJohn Wren Kennedy        log_must is_data_valid $TESTPOOL
88*f38cb554SJohn Wren Kennedy	log_must recover_bad_missing_devs $TESTPOOL $i
89*f38cb554SJohn Wren Kennedy
90*f38cb554SJohn Wren Kennedy	(( i +=1 ))
91*f38cb554SJohn Wren Kennedydone
92*f38cb554SJohn Wren Kennedy
93*f38cb554SJohn Wren Kennedylog_pass "Mirrored pool can withstand N-1 devices failing as expected."
94