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