1eda14cbcSMatt Macy#!/bin/ksh -p
2eda14cbcSMatt Macy#
3eda14cbcSMatt Macy# CDDL HEADER START
4eda14cbcSMatt Macy#
5eda14cbcSMatt Macy# The contents of this file are subject to the terms of the
6eda14cbcSMatt Macy# Common Development and Distribution License (the "License").
7eda14cbcSMatt Macy# You may not use this file except in compliance with the License.
8eda14cbcSMatt Macy#
9eda14cbcSMatt Macy# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*271171e0SMartin Matuska# or https://opensource.org/licenses/CDDL-1.0.
11eda14cbcSMatt Macy# See the License for the specific language governing permissions
12eda14cbcSMatt Macy# and limitations under the License.
13eda14cbcSMatt Macy#
14eda14cbcSMatt Macy# When distributing Covered Code, include this CDDL HEADER in each
15eda14cbcSMatt Macy# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16eda14cbcSMatt Macy# If applicable, add the following below this CDDL HEADER, with the
17eda14cbcSMatt Macy# fields enclosed by brackets "[]" replaced with your own identifying
18eda14cbcSMatt Macy# information: Portions Copyright [yyyy] [name of copyright owner]
19eda14cbcSMatt Macy#
20eda14cbcSMatt Macy# CDDL HEADER END
21eda14cbcSMatt Macy#
22eda14cbcSMatt Macy
23eda14cbcSMatt Macy#
24eda14cbcSMatt Macy# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
25eda14cbcSMatt Macy# Use is subject to license terms.
26eda14cbcSMatt Macy#
27eda14cbcSMatt Macy
28eda14cbcSMatt Macy#
29eda14cbcSMatt Macy# Copyright (c) 2013, 2016 by Delphix. All rights reserved.
30eda14cbcSMatt Macy#
31eda14cbcSMatt Macy
32eda14cbcSMatt Macy. $STF_SUITE/tests/functional/rsend/rsend.kshlib
33eda14cbcSMatt Macy
34eda14cbcSMatt Macy#
35eda14cbcSMatt Macy# DESCRIPTION:
36eda14cbcSMatt Macy#	zfs send -R -i send incremental from fs@init to fs@final.
37eda14cbcSMatt Macy#
38eda14cbcSMatt Macy# STRATEGY:
39eda14cbcSMatt Macy#	1. Create a set of snapshots and fill with data.
40eda14cbcSMatt Macy#	2. Create sub filesystems.
41eda14cbcSMatt Macy#	3. Create final snapshot
42eda14cbcSMatt Macy#	4. Verify zfs send -R -i will backup all the datasets which has
43eda14cbcSMatt Macy#	   snapshot suffix @final
44eda14cbcSMatt Macy#
45eda14cbcSMatt Macy
46eda14cbcSMatt Macyverify_runnable "both"
47eda14cbcSMatt Macy
48eda14cbcSMatt Macylog_assert "zfs send -R -i send incremental from fs@init to fs@final."
49eda14cbcSMatt Macylog_onexit cleanup_pool $POOL2
50eda14cbcSMatt Macy
51eda14cbcSMatt Macy#
52eda14cbcSMatt Macy# Duplicate POOL2 for testing
53eda14cbcSMatt Macy#
54eda14cbcSMatt Macylog_must eval "zfs send -R $POOL@final > $BACKDIR/pool-final-R"
55eda14cbcSMatt Macylog_must eval "zfs receive -d -F $POOL2 < $BACKDIR/pool-final-R"
56eda14cbcSMatt Macy
57eda14cbcSMatt Macyif is_global_zone ; then
58eda14cbcSMatt Macy	#
59eda14cbcSMatt Macy	# Testing send -R -i backup from pool
60eda14cbcSMatt Macy	#
61eda14cbcSMatt Macy	srclist=$(getds_with_suffix $POOL2 @final)
62eda14cbcSMatt Macy	interlist="$srclist $(getds_with_suffix $POOL2 @snapC)"
63eda14cbcSMatt Macy	interlist="$interlist $(getds_with_suffix $POOL2 @snapB)"
64eda14cbcSMatt Macy	interlist="$interlist $(getds_with_suffix $POOL2 @snapA)"
65eda14cbcSMatt Macy
66eda14cbcSMatt Macy	log_must eval "zfs send -R -i @init $POOL2@final > " \
67eda14cbcSMatt Macy		"$BACKDIR/pool-init-final-iR"
68eda14cbcSMatt Macy	log_must destroy_tree $interlist
69eda14cbcSMatt Macy	log_must eval "zfs receive -d -F $POOL2 < $BACKDIR/pool-init-final-iR"
70eda14cbcSMatt Macy
71eda14cbcSMatt Macy	# Get current datasets with suffix @final
72eda14cbcSMatt Macy	dstlist=$(getds_with_suffix $POOL2 @final)
73eda14cbcSMatt Macy	if [[ $srclist != $dstlist ]]; then
74eda14cbcSMatt Macy		log_fail "Unexpected: srclist($srclist) != dstlist($dstlist)"
75eda14cbcSMatt Macy	fi
76eda14cbcSMatt Macy	log_must cmp_ds_cont $POOL $POOL2
77eda14cbcSMatt Macyfi
78eda14cbcSMatt Macy
79eda14cbcSMatt Macydstds=$(get_dst_ds $POOL $POOL2)
80eda14cbcSMatt Macy#
81eda14cbcSMatt Macy# Testing send -R -i backup from filesystem
82eda14cbcSMatt Macy#
83eda14cbcSMatt Macylog_must eval "zfs send -R -i @init $dstds/$FS@final > " \
84eda14cbcSMatt Macy	"$BACKDIR/fs-init-final-iR"
85eda14cbcSMatt Macy
86eda14cbcSMatt Macysrclist=$(getds_with_suffix $dstds/$FS @final)
87eda14cbcSMatt Macyinterlist="$srclist $(getds_with_suffix $dstds/$FS @snapC)"
88eda14cbcSMatt Macyinterlist="$interlist $(getds_with_suffix $dstds/$FS @snapB)"
89eda14cbcSMatt Macyinterlist="$interlist $(getds_with_suffix $dstds/$FS @snapA)"
90eda14cbcSMatt Macylog_must destroy_tree $interlist
91eda14cbcSMatt Macyif is_global_zone ; then
92eda14cbcSMatt Macy	log_must eval "zfs receive -d -F $POOL2 < $BACKDIR/fs-init-final-iR"
93eda14cbcSMatt Macyelse
94eda14cbcSMatt Macy	zfs receive -F -d $dstds/$FS < $BACKDIR/fs-init-final-iR
95eda14cbcSMatt Macyfi
96eda14cbcSMatt Macy
97eda14cbcSMatt Macydstlist=$(getds_with_suffix $dstds/$FS @final)
98eda14cbcSMatt Macyif [[ $srclist != $dstlist ]]; then
99eda14cbcSMatt Macy	log_fail "Unexpected: srclist($srclist) != dstlist($dstlist)"
100eda14cbcSMatt Macyfi
101eda14cbcSMatt Macylog_must cmp_ds_cont $POOL $POOL2
102eda14cbcSMatt Macy
103eda14cbcSMatt Macyif is_global_zone ; then
104eda14cbcSMatt Macy	#
105eda14cbcSMatt Macy	# Testing send -R -i backup from volume
106eda14cbcSMatt Macy	#
107eda14cbcSMatt Macy	srclist=$(getds_with_suffix $POOL2/$FS/vol @final)
108eda14cbcSMatt Macy	log_must eval "zfs send -R -i @init $POOL2/$FS/vol@final > " \
109eda14cbcSMatt Macy		"$BACKDIR/vol-init-final-iR"
110eda14cbcSMatt Macy	log_must destroy_tree $srclist
111eda14cbcSMatt Macy	log_must eval "zfs receive -d $POOL2 < $BACKDIR/vol-init-final-iR"
112eda14cbcSMatt Macy
113eda14cbcSMatt Macy	dstlist=$(getds_with_suffix $POOL2/$FS/vol @final)
114eda14cbcSMatt Macy	if [[ $srclist != $dstlist ]]; then
115eda14cbcSMatt Macy		log_fail "Unexpected: srclist($srclist) != dstlist($dstlist)"
116eda14cbcSMatt Macy	fi
117eda14cbcSMatt Macy	log_must cmp_ds_cont $POOL $POOL2
118eda14cbcSMatt Macyfi
119eda14cbcSMatt Macy
120eda14cbcSMatt Macylog_pass "zfs send -R -i send incremental from fs@init to fs@final."
121