15602294fSDan Kimmel#!/usr/bin/ksh
25602294fSDan Kimmel
35602294fSDan Kimmel#
45602294fSDan Kimmel# This file and its contents are supplied under the terms of the
55602294fSDan Kimmel# Common Development and Distribution License ("CDDL"), version 1.0.
65602294fSDan Kimmel# You may only use this file in accordance with the terms of version
75602294fSDan Kimmel# 1.0 of the CDDL.
85602294fSDan Kimmel#
95602294fSDan Kimmel# A full copy of the text of the CDDL should have accompanied this
105602294fSDan Kimmel# source.  A copy of the CDDL is also available via the Internet at
115602294fSDan Kimmel# http://www.illumos.org/license/CDDL.
125602294fSDan Kimmel#
135602294fSDan Kimmel
145602294fSDan Kimmel#
155602294fSDan Kimmel# Copyright (c) 2015 by Delphix. All rights reserved.
16*e3bf7d5aSKody Kantor# Copyright 2020 Joyent, Inc.
175602294fSDan Kimmel#
185602294fSDan Kimmel
195602294fSDan Kimmel. $STF_SUITE/tests/functional/rsend/rsend.kshlib
205602294fSDan Kimmel
215602294fSDan Kimmel#
225602294fSDan Kimmel# Description:
235602294fSDan Kimmel# Verify that compressed send correctly handles volumes
245602294fSDan Kimmel#
255602294fSDan Kimmel# Strategy:
265602294fSDan Kimmel# 1. Write compressible data into a volume, take a snap
275602294fSDan Kimmel# 2. Verify the compressed stream is the correct size, and has the correct data
285602294fSDan Kimmel# 3. Repeat step 2 for an incremental compressed stream
295602294fSDan Kimmel#
305602294fSDan Kimmel
315602294fSDan Kimmelfunction cleanup
325602294fSDan Kimmel{
335602294fSDan Kimmel	log_must zfs destroy -r $vol
345602294fSDan Kimmel	cleanup_pool $POOL2
355602294fSDan Kimmel}
365602294fSDan Kimmel
375602294fSDan Kimmelverify_runnable "both"
385602294fSDan Kimmel
395602294fSDan Kimmellog_assert "Verify compressed send works with volumes"
405602294fSDan Kimmellog_onexit cleanup
415602294fSDan Kimmel
425602294fSDan Kimmeltypeset vol="$POOL/newvol"
435602294fSDan Kimmeltypeset vol2="$POOL2/newvol"
445602294fSDan Kimmeltypeset voldev="/dev/zvol/rdsk/$POOL/newvol"
455602294fSDan Kimmeltypeset voldev2="/dev/zvol/rdsk/$POOL2/newvol"
465602294fSDan Kimmeltypeset data1=$BACKDIR/file.0
475602294fSDan Kimmeltypeset data2=$BACKDIR/file.1
485602294fSDan Kimmeltypeset megs=8
495602294fSDan Kimmel
505602294fSDan Kimmellog_must zfs create -V 256m -o compress=lz4 $vol
515602294fSDan Kimmel
525602294fSDan Kimmelwrite_compressible $BACKDIR ${megs}m 2
53*e3bf7d5aSKody Kantormd5_1=$(digest -a md5 $data1)
54*e3bf7d5aSKody Kantormd5_2=$(digest -a md5 $data2)
555602294fSDan Kimmel
565602294fSDan Kimmellog_must dd if=$data1 of=$voldev bs=1024k
575602294fSDan Kimmellog_must zfs snapshot $vol@snap
585602294fSDan Kimmel
595602294fSDan Kimmellog_must eval "zfs send -c $vol@snap >$BACKDIR/full"
605602294fSDan Kimmellog_must eval "zfs recv -d $POOL2 <$BACKDIR/full"
615602294fSDan Kimmel
625602294fSDan Kimmelverify_stream_size $BACKDIR/full $vol
635602294fSDan Kimmelverify_stream_size $BACKDIR/full $vol2
64*e3bf7d5aSKody Kantormd5=$(dd if=$voldev2 bs=1024k count=$megs 2>/dev/null | digest -a md5)
655602294fSDan Kimmel[[ $md5 = $md5_1 ]] || log_fail "md5 mismatch: $md5 != $md5_1"
665602294fSDan Kimmel
675602294fSDan Kimmel# Repeat, for an incremental send
685602294fSDan Kimmellog_must dd oseek=$megs if=$data2 of=$voldev bs=1024k
695602294fSDan Kimmellog_must zfs snapshot $vol@snap2
705602294fSDan Kimmel
715602294fSDan Kimmellog_must eval "zfs send -c -i snap $vol@snap2 >$BACKDIR/inc"
725602294fSDan Kimmellog_must eval "zfs recv -d $POOL2 <$BACKDIR/inc"
735602294fSDan Kimmel
745602294fSDan Kimmelverify_stream_size $BACKDIR/inc $vol 90 $vol@snap
755602294fSDan Kimmelverify_stream_size $BACKDIR/inc $vol2 90 $vol2@snap
76*e3bf7d5aSKody Kantormd5=$(dd iseek=$megs if=$voldev2 bs=1024k count=$megs 2>/dev/null \
77*e3bf7d5aSKody Kantor    | digest -a md5)
78*e3bf7d5aSKody Kantor
795602294fSDan Kimmel[[ $md5 = $md5_2 ]] || log_fail "md5 mismatch: $md5 != $md5_2"
805602294fSDan Kimmel
815602294fSDan Kimmellog_pass "Verify compressed send works with volumes"
82