1d583b39bSJohn Wren Kennedy#
2d583b39bSJohn Wren Kennedy# This file and its contents are supplied under the terms of the
3d583b39bSJohn Wren Kennedy# Common Development and Distribution License ("CDDL"), version 1.0.
4d583b39bSJohn Wren Kennedy# You may only use this file in accordance with the terms of version
5d583b39bSJohn Wren Kennedy# 1.0 of the CDDL.
6d583b39bSJohn Wren Kennedy#
7d583b39bSJohn Wren Kennedy# A full copy of the text of the CDDL should have accompanied this
8d583b39bSJohn Wren Kennedy# source.  A copy of the CDDL is also available via the Internet at
9d583b39bSJohn Wren Kennedy# http://www.illumos.org/license/CDDL.
10d583b39bSJohn Wren Kennedy#
11d583b39bSJohn Wren Kennedy
12d583b39bSJohn Wren Kennedy#
13*1d32ba66SJohn Wren Kennedy# Copyright (c) 2012, 2016 by Delphix. All rights reserved.
14d583b39bSJohn Wren Kennedy#
15d583b39bSJohn Wren Kennedy
16d583b39bSJohn Wren Kennedy. $STF_SUITE/include/math.shlib
17d583b39bSJohn Wren Kennedy
18d583b39bSJohn Wren Kennedyexport TESTVOL="testvol.nopwrite"
19d583b39bSJohn Wren Kennedyexport VOLSIZE="256M"
20d583b39bSJohn Wren Kennedyexport MEGS="64"
21d583b39bSJohn Wren Kennedy
22d583b39bSJohn Wren Kennedyfunction verify_nopwrite
23d583b39bSJohn Wren Kennedy{
24d583b39bSJohn Wren Kennedy	typeset origin=$1
25d583b39bSJohn Wren Kennedy	typeset snap=$2
26d583b39bSJohn Wren Kennedy	typeset clone=$3
27d583b39bSJohn Wren Kennedy	typeset low=1
28d583b39bSJohn Wren Kennedy	typeset high=99
29d583b39bSJohn Wren Kennedy
30*1d32ba66SJohn Wren Kennedy	sync
31d583b39bSJohn Wren Kennedy	for i in origin snap clone; do
32d583b39bSJohn Wren Kennedy		for j in used refer usedbychildren written; do
33d583b39bSJohn Wren Kennedy			typeset ${i}_$j=$(get_prop $j $(eval echo \$$i))
34d583b39bSJohn Wren Kennedy		done
35d583b39bSJohn Wren Kennedy	done
36d583b39bSJohn Wren Kennedy
37d583b39bSJohn Wren Kennedy	#
38d583b39bSJohn Wren Kennedy	# If we are dealing with a volume, deduct the refreserv from the used
39d583b39bSJohn Wren Kennedy	# value to prevent real failures from being masked by the unexpected
40d583b39bSJohn Wren Kennedy	# extra space. Also, volumes use more space for metadata, so adjust the
41d583b39bSJohn Wren Kennedy	# percentages to be more forgiving.
42d583b39bSJohn Wren Kennedy	#
43d583b39bSJohn Wren Kennedy	if [[ "$(get_prop type $origin)" = "volume" ]]; then
44d583b39bSJohn Wren Kennedy		typeset rr=$(get_prop refreserv $origin)
45d583b39bSJohn Wren Kennedy		((origin_used -= rr ))
46d583b39bSJohn Wren Kennedy		low=2
47d583b39bSJohn Wren Kennedy		high=98
48d583b39bSJohn Wren Kennedy	fi
49d583b39bSJohn Wren Kennedy
50d583b39bSJohn Wren Kennedy	# These values should differ greatly with nopwrite.
51d583b39bSJohn Wren Kennedy	within_percent $origin_used $clone_used $low && return 1
52d583b39bSJohn Wren Kennedy	within_percent $origin_refer $origin_usedbychildren $low && return 1
53d583b39bSJohn Wren Kennedy	within_percent $snap_written $clone_written $low && return 1
54d583b39bSJohn Wren Kennedy
55d583b39bSJohn Wren Kennedy	# These values should be nearly the same with nopwrite.
56d583b39bSJohn Wren Kennedy	within_percent $origin_used $clone_refer $high || return 1
57d583b39bSJohn Wren Kennedy	within_percent $origin_used $snap_refer $high || return 1
58d583b39bSJohn Wren Kennedy
59d583b39bSJohn Wren Kennedy	#
60d583b39bSJohn Wren Kennedy	# The comparisons below should pass regardless of nopwrite. They're
61d583b39bSJohn Wren Kennedy	# here for sanity.
62d583b39bSJohn Wren Kennedy	#
63*1d32ba66SJohn Wren Kennedy	typeset deadlist=$(zdb -Pddd $clone | awk '/Deadlist:/ {print $2}')
64d583b39bSJohn Wren Kennedy	within_percent $deadlist $clone_written $high || return 1
65d583b39bSJohn Wren Kennedy	within_percent $snap_refer $snap_written $high || return 1
66d583b39bSJohn Wren Kennedy
67d583b39bSJohn Wren Kennedy	return 0
68d583b39bSJohn Wren Kennedy}
69