1*5602294fSDan Kimmel#!/usr/bin/ksh
2*5602294fSDan Kimmel
3*5602294fSDan Kimmel#
4*5602294fSDan Kimmel# This file and its contents are supplied under the terms of the
5*5602294fSDan Kimmel# Common Development and Distribution License ("CDDL"), version 1.0.
6*5602294fSDan Kimmel# You may only use this file in accordance with the terms of version
7*5602294fSDan Kimmel# 1.0 of the CDDL.
8*5602294fSDan Kimmel#
9*5602294fSDan Kimmel# A full copy of the text of the CDDL should have accompanied this
10*5602294fSDan Kimmel# source.  A copy of the CDDL is also available via the Internet at
11*5602294fSDan Kimmel# http://www.illumos.org/license/CDDL.
12*5602294fSDan Kimmel#
13*5602294fSDan Kimmel
14*5602294fSDan Kimmel#
15*5602294fSDan Kimmel# Copyright (c) 2015 by Delphix. All rights reserved.
16*5602294fSDan Kimmel#
17*5602294fSDan Kimmel
18*5602294fSDan Kimmel. $STF_SUITE/tests/functional/rsend/rsend.kshlib
19*5602294fSDan Kimmel
20*5602294fSDan Kimmel#
21*5602294fSDan Kimmel# Description:
22*5602294fSDan Kimmel# Verify the stream size estimate given by -P accounts for compressed send.
23*5602294fSDan Kimmel# Verify the stream size given by -P accounts for compressed send."
24*5602294fSDan Kimmel#
25*5602294fSDan Kimmel# Strategy:
26*5602294fSDan Kimmel# 1. For datasets of varied compression types do the following:
27*5602294fSDan Kimmel# 2. Write data, verify stream size estimates with and without -c
28*5602294fSDan Kimmel#
29*5602294fSDan Kimmel
30*5602294fSDan Kimmelverify_runnable "both"
31*5602294fSDan Kimmeltypeset compress_types="off gzip lz4"
32*5602294fSDan Kimmeltypeset send_ds="$POOL2/testfs"
33*5602294fSDan Kimmeltypeset send_vol="$POOL2/vol"
34*5602294fSDan Kimmeltypeset send_voldev="/dev/zvol/rdsk/$POOL2/vol"
35*5602294fSDan Kimmeltypeset file="$BACKDIR/file.0"
36*5602294fSDan Kimmeltypeset megs="16"
37*5602294fSDan Kimmeltypeset compress
38*5602294fSDan Kimmel
39*5602294fSDan Kimmelfunction get_estimated_size
40*5602294fSDan Kimmel{
41*5602294fSDan Kimmel	typeset cmd=$1
42*5602294fSDan Kimmel	typeset ds=${cmd##* }
43*5602294fSDan Kimmel	typeset tmpfile=$(mktemp -p $BACKDIR)
44*5602294fSDan Kimmel
45*5602294fSDan Kimmel	eval "$cmd >$tmpfile"
46*5602294fSDan Kimmel	[[ $? -eq 0 ]] || log_fail "get_estimated_size: $cmd"
47*5602294fSDan Kimmel	typeset size=$(eval "awk '\$2 == \"$ds\" {print \$3}' $tmpfile")
48*5602294fSDan Kimmel	rm -f $tmpfile
49*5602294fSDan Kimmel
50*5602294fSDan Kimmel	echo $size
51*5602294fSDan Kimmel}
52*5602294fSDan Kimmel
53*5602294fSDan Kimmellog_assert "Verify the stream size given by -P accounts for compressed send."
54*5602294fSDan Kimmellog_onexit cleanup_pool $POOL2
55*5602294fSDan Kimmel
56*5602294fSDan Kimmelwrite_compressible $BACKDIR ${megs}m
57*5602294fSDan Kimmel
58*5602294fSDan Kimmelfor compress in $compress_types; do
59*5602294fSDan Kimmel	datasetexists $send_ds && log_must zfs destroy -r $send_ds
60*5602294fSDan Kimmel	datasetexists $send_vol && log_must zfs destroy -r $send_vol
61*5602294fSDan Kimmel	log_must zfs create -o compress=$compress $send_ds
62*5602294fSDan Kimmel	log_must zfs create -V 1g -o compress=$compress $send_vol
63*5602294fSDan Kimmel
64*5602294fSDan Kimmel	typeset dir=$(get_prop mountpoint $send_ds)
65*5602294fSDan Kimmel	log_must cp $file $dir
66*5602294fSDan Kimmel	log_must zfs snapshot $send_ds@snap
67*5602294fSDan Kimmel	log_must dd if=$file of=$send_voldev
68*5602294fSDan Kimmel	log_must zfs snapshot $send_vol@snap
69*5602294fSDan Kimmel
70*5602294fSDan Kimmel	typeset ds_size=$(get_estimated_size "zfs send -nP $send_ds@snap")
71*5602294fSDan Kimmel	typeset ds_lrefer=$(get_prop lrefer $send_ds)
72*5602294fSDan Kimmel	within_percent $ds_size $ds_lrefer 90 || log_fail \
73*5602294fSDan Kimmel	    "$ds_size and $ds_lrefer differed by too much"
74*5602294fSDan Kimmel
75*5602294fSDan Kimmel	typeset vol_size=$(get_estimated_size "zfs send -nP $send_vol@snap")
76*5602294fSDan Kimmel	typeset vol_lrefer=$(get_prop lrefer $send_vol)
77*5602294fSDan Kimmel	within_percent $vol_size $vol_lrefer 90 || log_fail \
78*5602294fSDan Kimmel	    "$vol_size and $vol_lrefer differed by too much"
79*5602294fSDan Kimmel
80*5602294fSDan Kimmel	typeset ds_csize=$(get_estimated_size "zfs send -nP -c $send_ds@snap")
81*5602294fSDan Kimmel	typeset ds_refer=$(get_prop refer $send_ds)
82*5602294fSDan Kimmel	within_percent $ds_csize $ds_refer 90 || log_fail \
83*5602294fSDan Kimmel	    "$ds_csize and $ds_refer differed by too much"
84*5602294fSDan Kimmel
85*5602294fSDan Kimmel	typeset vol_csize=$(get_estimated_size "zfs send -nP -c $send_vol@snap")
86*5602294fSDan Kimmel	typeset vol_refer=$(get_prop refer $send_vol)
87*5602294fSDan Kimmel	within_percent $vol_csize $vol_refer 90 || log_fail \
88*5602294fSDan Kimmel	    "$vol_csize and $vol_refer differed by too much"
89*5602294fSDan Kimmeldone
90*5602294fSDan Kimmel
91*5602294fSDan Kimmellog_pass "The the stream size given by -P accounts for compressed send."
92