2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson#!/bin/ksh -p
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson#
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson# CDDL HEADER START
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson#
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson# This file and its contents are supplied under the terms of the
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson# Common Development and Distribution License ("CDDL"), version 1.0.
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson# You may only use this file in accordance with the terms of version
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson# 1.0 of the CDDL.
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson#
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson# A full copy of the text of the CDDL should have accompanied this
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson# source. A copy of the CDDL is also available via the Internet at
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson# http://www.illumos.org/license/CDDL.
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson#
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson# CDDL HEADER END
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson#
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson#
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy# Copyright (c) 2015, 2016 by Delphix. All rights reserved.
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson#
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson. $STF_SUITE/tests/functional/cli_root/cli_common.kshlib
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson#
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson# DESCRIPTION:
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson# Verifying 'zfs receive' works correctly on deduplicated streams
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson#
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson# STRATEGY:
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson# 1. Create some snapshots with duplicated data
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson# 2. Send a deduplicated stream of the last snapshot
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson# 3. Attempt to receive the deduplicated stream
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson#
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamsonsrc_fs=$TESTPOOL/drecvsrc
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamsontemppool=recvtank
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamsondst_fs=$temppool/drecvdest
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamsonstreamfile=/var/tmp/drecvstream.$$
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamsontpoolfile=/temptank.$$
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamsonfunction cleanup
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson{
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson for fs in $src_fs $dst_fs; do
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy datasetexists $fs && log_must zfs destroy -rf $fs
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson done
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson zpool destroy $temppool
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy [[ -f $streamfile ]] && log_must rm -f $streamfile
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy [[ -f $tpoolfile ]] && log_must rm -f $tpoolfile
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson}
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamsonlog_assert "Verifying 'zfs receive' works correctly on deduplicated streams"
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamsonlog_onexit cleanup
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamsontruncate -s 100M $tpoolfile
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamsonlog_must zpool create $temppool $tpoolfile
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must zfs create $src_fs
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamsonsrc_mnt=$(get_prop mountpoint $src_fs) || log_fail "get_prop mountpoint $src_fs"
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamsonecho blah > $src_mnt/blah
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedyzfs snapshot $src_fs@base
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamsonecho grumble > $src_mnt/grumble
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamsonecho blah > $src_mnt/blah2
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedyzfs snapshot $src_fs@snap2
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamsonecho grumble > $src_mnt/mumble
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamsonecho blah > $src_mnt/blah3
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedyzfs snapshot $src_fs@snap3
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must eval "zfs send -D -R $src_fs@snap3 > $streamfile"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must eval "zfs receive -v $dst_fs < $streamfile"
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamsoncleanup
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamson
2ad25b4055c18f39b3fb20bd5c8c61057e34f377Chris Williamsonlog_pass "Verifying 'zfs receive' works correctly on deduplicated streams"