xref: /illumos-gate/usr/src/test/zfs-tests/tests/functional/rsend/rsend_008_pos.ksh (revision f38cb554a534c6df738be3f4d23327e69888e634)
1*f38cb554SJohn Wren Kennedy#!/bin/ksh -p
2*f38cb554SJohn Wren Kennedy#
3*f38cb554SJohn Wren Kennedy# CDDL HEADER START
4*f38cb554SJohn Wren Kennedy#
5*f38cb554SJohn Wren Kennedy# The contents of this file are subject to the terms of the
6*f38cb554SJohn Wren Kennedy# Common Development and Distribution License (the "License").
7*f38cb554SJohn Wren Kennedy# You may not use this file except in compliance with the License.
8*f38cb554SJohn Wren Kennedy#
9*f38cb554SJohn Wren Kennedy# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*f38cb554SJohn Wren Kennedy# or http://www.opensolaris.org/os/licensing.
11*f38cb554SJohn Wren Kennedy# See the License for the specific language governing permissions
12*f38cb554SJohn Wren Kennedy# and limitations under the License.
13*f38cb554SJohn Wren Kennedy#
14*f38cb554SJohn Wren Kennedy# When distributing Covered Code, include this CDDL HEADER in each
15*f38cb554SJohn Wren Kennedy# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*f38cb554SJohn Wren Kennedy# If applicable, add the following below this CDDL HEADER, with the
17*f38cb554SJohn Wren Kennedy# fields enclosed by brackets "[]" replaced with your own identifying
18*f38cb554SJohn Wren Kennedy# information: Portions Copyright [yyyy] [name of copyright owner]
19*f38cb554SJohn Wren Kennedy#
20*f38cb554SJohn Wren Kennedy# CDDL HEADER END
21*f38cb554SJohn Wren Kennedy#
22*f38cb554SJohn Wren Kennedy
23*f38cb554SJohn Wren Kennedy#
24*f38cb554SJohn Wren Kennedy# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
25*f38cb554SJohn Wren Kennedy# Use is subject to license terms.
26*f38cb554SJohn Wren Kennedy#
27*f38cb554SJohn Wren Kennedy
28*f38cb554SJohn Wren Kennedy#
29*f38cb554SJohn Wren Kennedy# Copyright (c) 2013 by Delphix. All rights reserved.
30*f38cb554SJohn Wren Kennedy#
31*f38cb554SJohn Wren Kennedy
32*f38cb554SJohn Wren Kennedy. $STF_SUITE/tests/functional/rsend/rsend.kshlib
33*f38cb554SJohn Wren Kennedy
34*f38cb554SJohn Wren Kennedy#
35*f38cb554SJohn Wren Kennedy# DESCRIPTION:
36*f38cb554SJohn Wren Kennedy#	Changes made by 'zfs promote' can be properly received.
37*f38cb554SJohn Wren Kennedy#
38*f38cb554SJohn Wren Kennedy# STRATEGY:
39*f38cb554SJohn Wren Kennedy#	1. Seperatly promote pool clone, filesystem clone and volume clone.
40*f38cb554SJohn Wren Kennedy#	2. Recursively backup all the POOL and restore in POOL2
41*f38cb554SJohn Wren Kennedy#	3. Verify all the datesets and property be properly received.
42*f38cb554SJohn Wren Kennedy#
43*f38cb554SJohn Wren Kennedy
44*f38cb554SJohn Wren Kennedyverify_runnable "both"
45*f38cb554SJohn Wren Kennedy
46*f38cb554SJohn Wren Kennedy#		Origin			Clone
47*f38cb554SJohn Wren Kennedy#
48*f38cb554SJohn Wren Kennedyset -A	dtst	"$POOL"			"$POOL/pclone"		\
49*f38cb554SJohn Wren Kennedy		"$POOL/$FS/fs1/fs2"	"$POOL/$FS/fs1/fclone"
50*f38cb554SJohn Wren Kennedyif is_global_zone ; then
51*f38cb554SJohn Wren Kennedy	typeset -i n=${#dtst[@]}
52*f38cb554SJohn Wren Kennedy	dtst[((n))]="$POOL/$FS/vol"; 	dtst[((n+1))]="$POOL/$FS/vclone"
53*f38cb554SJohn Wren Kennedyfi
54*f38cb554SJohn Wren Kennedy
55*f38cb554SJohn Wren Kennedyfunction cleanup
56*f38cb554SJohn Wren Kennedy{
57*f38cb554SJohn Wren Kennedy	typeset origin
58*f38cb554SJohn Wren Kennedy	typeset -i i=0
59*f38cb554SJohn Wren Kennedy	while ((i < ${#dtst[@]})); do
60*f38cb554SJohn Wren Kennedy		origin=$(get_prop origin ${dtst[$i]})
61*f38cb554SJohn Wren Kennedy
62*f38cb554SJohn Wren Kennedy		if [[ $origin != "-" ]]; then
63*f38cb554SJohn Wren Kennedy			log_must $ZFS promote ${dtst[$i]}
64*f38cb554SJohn Wren Kennedy		fi
65*f38cb554SJohn Wren Kennedy
66*f38cb554SJohn Wren Kennedy		((i += 2))
67*f38cb554SJohn Wren Kennedy	done
68*f38cb554SJohn Wren Kennedy
69*f38cb554SJohn Wren Kennedy	origin=$(get_prop origin $POOL2)
70*f38cb554SJohn Wren Kennedy	if [[ $origin != "-" ]]; then
71*f38cb554SJohn Wren Kennedy		log_must $ZFS promote $POOL2
72*f38cb554SJohn Wren Kennedy	fi
73*f38cb554SJohn Wren Kennedy	log_must cleanup_pool $POOL2
74*f38cb554SJohn Wren Kennedy}
75*f38cb554SJohn Wren Kennedy
76*f38cb554SJohn Wren Kennedylog_assert "Changes made by 'zfs promote' can be properly received."
77*f38cb554SJohn Wren Kennedylog_onexit cleanup
78*f38cb554SJohn Wren Kennedy
79*f38cb554SJohn Wren Kennedytypeset -i i=0
80*f38cb554SJohn Wren Kennedywhile ((i < ${#dtst[@]})); do
81*f38cb554SJohn Wren Kennedy	log_must $ZFS promote ${dtst[((i+1))]}
82*f38cb554SJohn Wren Kennedy
83*f38cb554SJohn Wren Kennedy	((i += 2))
84*f38cb554SJohn Wren Kennedydone
85*f38cb554SJohn Wren Kennedy
86*f38cb554SJohn Wren Kennedy#
87*f38cb554SJohn Wren Kennedy# Verify zfs send -R should succeed
88*f38cb554SJohn Wren Kennedy#
89*f38cb554SJohn Wren Kennedylog_must eval "$ZFS send -R $POOL@final > $BACKDIR/pool-final-R"
90*f38cb554SJohn Wren Kennedylog_must eval "$ZFS receive -d -F $POOL2 < $BACKDIR/pool-final-R"
91*f38cb554SJohn Wren Kennedy
92*f38cb554SJohn Wren Kennedydstds=$(get_dst_ds $POOL $POOL2)
93*f38cb554SJohn Wren Kennedy#
94*f38cb554SJohn Wren Kennedy# Define all the POOL/POOL2 datasets pair
95*f38cb554SJohn Wren Kennedy#
96*f38cb554SJohn Wren Kennedyset -A pair 	"$POOL" 		"$dstds" 		\
97*f38cb554SJohn Wren Kennedy		"$POOL/$FS" 		"$dstds/$FS" 		\
98*f38cb554SJohn Wren Kennedy		"$POOL/$FS/fs1"		"$dstds/$FS/fs1"	\
99*f38cb554SJohn Wren Kennedy		"$POOL/$FS/fs1/fs2"	"$dstds/$FS/fs1/fs2"	\
100*f38cb554SJohn Wren Kennedy		"$POOL/pclone"		"$dstds/pclone"		\
101*f38cb554SJohn Wren Kennedy		"$POOL/$FS/fs1/fclone"	"$dstds/$FS/fs1/fclone"
102*f38cb554SJohn Wren Kennedy
103*f38cb554SJohn Wren Kennedyif is_global_zone ; then
104*f38cb554SJohn Wren Kennedy	typeset -i n=${#pair[@]}
105*f38cb554SJohn Wren Kennedy	pair[((n))]="$POOL/vol"; 	pair[((n+1))]="$dstds/vol"
106*f38cb554SJohn Wren Kennedy	pair[((n+2))]="$POOL/$FS/vol"	pair[((n+3))]="$dstds/$FS/vol"
107*f38cb554SJohn Wren Kennedyfi
108*f38cb554SJohn Wren Kennedy
109*f38cb554SJohn Wren Kennedy#
110*f38cb554SJohn Wren Kennedy# Verify all the sub-datasets can be properly received.
111*f38cb554SJohn Wren Kennedy#
112*f38cb554SJohn Wren Kennedylog_must cmp_ds_subs $POOL $dstds
113*f38cb554SJohn Wren Kennedytypeset -i i=0
114*f38cb554SJohn Wren Kennedywhile ((i < ${#pair[@]})); do
115*f38cb554SJohn Wren Kennedy	log_must cmp_ds_cont ${pair[$i]} ${pair[((i+1))]}
116*f38cb554SJohn Wren Kennedy	log_must cmp_ds_prop ${pair[$i]} ${pair[((i+1))]}
117*f38cb554SJohn Wren Kennedy
118*f38cb554SJohn Wren Kennedy	((i += 2))
119*f38cb554SJohn Wren Kennedydone
120*f38cb554SJohn Wren Kennedy
121*f38cb554SJohn Wren Kennedy# Verify the original filesystem can be promoted
122*f38cb554SJohn Wren Kennedylog_must $ZFS promote $dstds
123*f38cb554SJohn Wren Kennedyif is_global_zone ; then
124*f38cb554SJohn Wren Kennedy	log_must $ZFS promote $dstds/$FS/vol
125*f38cb554SJohn Wren Kennedyfi
126*f38cb554SJohn Wren Kennedylog_must $ZFS promote $dstds/$FS/fs1/fs2
127*f38cb554SJohn Wren Kennedy
128*f38cb554SJohn Wren Kennedylog_pass "Changes made by 'zfs promote' can be properly received."
129