1eda14cbcSMatt Macy#
2eda14cbcSMatt Macy# CDDL HEADER START
3eda14cbcSMatt Macy#
4eda14cbcSMatt Macy# The contents of this file are subject to the terms of the
5eda14cbcSMatt Macy# Common Development and Distribution License (the "License").
6eda14cbcSMatt Macy# You may not use this file except in compliance with the License.
7eda14cbcSMatt Macy#
8eda14cbcSMatt Macy# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*271171e0SMartin Matuska# or https://opensource.org/licenses/CDDL-1.0.
10eda14cbcSMatt Macy# See the License for the specific language governing permissions
11eda14cbcSMatt Macy# and limitations under the License.
12eda14cbcSMatt Macy#
13eda14cbcSMatt Macy# When distributing Covered Code, include this CDDL HEADER in each
14eda14cbcSMatt Macy# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15eda14cbcSMatt Macy# If applicable, add the following below this CDDL HEADER, with the
16eda14cbcSMatt Macy# fields enclosed by brackets "[]" replaced with your own identifying
17eda14cbcSMatt Macy# information: Portions Copyright [yyyy] [name of copyright owner]
18eda14cbcSMatt Macy#
19eda14cbcSMatt Macy# CDDL HEADER END
20eda14cbcSMatt Macy#
21eda14cbcSMatt Macy
22eda14cbcSMatt Macy#
23eda14cbcSMatt Macy# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
24eda14cbcSMatt Macy# Use is subject to license terms.
25eda14cbcSMatt Macy#
26eda14cbcSMatt Macy
27eda14cbcSMatt Macy#
28eda14cbcSMatt Macy# Copyright (c) 2013, 2016 by Delphix. All rights reserved.
29eda14cbcSMatt Macy#
30eda14cbcSMatt Macy
31eda14cbcSMatt Macy. $STF_SUITE/include/libtest.shlib
32eda14cbcSMatt Macy. $STF_SUITE/tests/functional/scrub_mirror/default.cfg
33eda14cbcSMatt Macy
34eda14cbcSMatt Macyfunction overwrite_verify_mirror
35eda14cbcSMatt Macy{
36eda14cbcSMatt Macy	typeset AFFECTED_DEVICE=$1
37eda14cbcSMatt Macy	typeset OVERWRITING_DEVICE=$2
38eda14cbcSMatt Macy
39eda14cbcSMatt Macy	typeset atfile=0
40eda14cbcSMatt Macy	set -A files
41eda14cbcSMatt Macy	set -A cksums
42eda14cbcSMatt Macy	set -A newcksums
43eda14cbcSMatt Macy
44eda14cbcSMatt Macy	while (( atfile < FILE_COUNT )); do
45eda14cbcSMatt Macy		files[$atfile]=$TESTDIR/file.$atfile
46eda14cbcSMatt Macy		log_must file_write -o create -f $TESTDIR/file.$atfile \
47eda14cbcSMatt Macy			-b $FILE_SIZE -c 1
48eda14cbcSMatt Macy		cksums[$atfile]=$(cksum ${files[$atfile]})
49eda14cbcSMatt Macy		(( atfile = atfile + 1 ))
50eda14cbcSMatt Macy	done
51eda14cbcSMatt Macy
52eda14cbcSMatt Macy	# dd the affected side of the mirror
53eda14cbcSMatt Macy	log_must dd if=$OVERWRITING_DEVICE of=$AFFECTED_DEVICE \
54eda14cbcSMatt Macy		seek=8 bs=$DD_BLOCK count=$(( DD_COUNT - 128 )) conv=notrunc
55eda14cbcSMatt Macy
56eda14cbcSMatt Macy	log_must zpool scrub $TESTPOOL
57eda14cbcSMatt Macy	log_must wait_scrubbed $TESTPOOL
58eda14cbcSMatt Macy
59eda14cbcSMatt Macy	atfile=0
60eda14cbcSMatt Macy
61eda14cbcSMatt Macy	typeset -i failedcount=0
62eda14cbcSMatt Macy	while (( atfile < FILE_COUNT )); do
63eda14cbcSMatt Macy		files[$atfile]=$TESTDIR/file.$atfile
64eda14cbcSMatt Macy		newcksum=$(cksum ${files[$atfile]})
65eda14cbcSMatt Macy		if [[ $newcksum != ${cksums[$atfile]} ]]; then
66eda14cbcSMatt Macy			(( failedcount = failedcount + 1 ))
67eda14cbcSMatt Macy		fi
68eda14cbcSMatt Macy		rm -f ${files[$atfile]}
69eda14cbcSMatt Macy		(( atfile = atfile + 1 ))
70eda14cbcSMatt Macy	done
71eda14cbcSMatt Macy
72eda14cbcSMatt Macy	if (( $failedcount > 0 )); then
73eda14cbcSMatt Macy		log_fail "of the $FILE_COUNT files $failedcount did not " \
74eda14cbcSMatt Macy		    "have the same checksum before and after."
75eda14cbcSMatt Macy	fi
76eda14cbcSMatt Macy}
77