1*6ccda740Sloli#!/bin/ksh -p 2*6ccda740Sloli# 3*6ccda740Sloli# This file and its contents are supplied under the terms of the 4*6ccda740Sloli# Common Development and Distribution License ("CDDL"), version 1.0. 5*6ccda740Sloli# You may only use this file in accordance with the terms of version 6*6ccda740Sloli# 1.0 of the CDDL. 7*6ccda740Sloli# 8*6ccda740Sloli# A full copy of the text of the CDDL should have accompanied this 9*6ccda740Sloli# source. A copy of the CDDL is also available via the Internet at 10*6ccda740Sloli# http://www.illumos.org/license/CDDL. 11*6ccda740Sloli# 12*6ccda740Sloli 13*6ccda740Sloli# 14*6ccda740Sloli# Copyright 2018, loli10K <ezomori.nozomu@gmail.com>. All rights reserved. 15*6ccda740Sloli# 16*6ccda740Sloli 17*6ccda740Sloli. $STF_SUITE/include/libtest.shlib 18*6ccda740Sloli. $STF_SUITE/tests/functional/cli_root/zfs_set/zfs_set_common.kshlib 19*6ccda740Sloli 20*6ccda740Sloli# 21*6ccda740Sloli# DESCRIPTION: 22*6ccda740Sloli# 'zfs send -b' should works as expected. 23*6ccda740Sloli# 24*6ccda740Sloli# STRATEGY: 25*6ccda740Sloli# 1. Create a source dataset and set some properties 26*6ccda740Sloli# 2. Verify command line options interact with '-b' correctly 27*6ccda740Sloli# 3. Send the dataset and its properties to a new "backup" destination 28*6ccda740Sloli# 4. Set some properties on the new "backup" dataset 29*6ccda740Sloli# 5. Restore the "backup" dataset to a new destination 30*6ccda740Sloli# 6. Verify only original (received) properties are sent from "backup" 31*6ccda740Sloli# 32*6ccda740Sloli 33*6ccda740Sloliverify_runnable "both" 34*6ccda740Sloli 35*6ccda740Slolifunction cleanup 36*6ccda740Sloli{ 37*6ccda740Sloli for ds in "$SENDFS" "$BACKUP" "$RESTORE"; do 38*6ccda740Sloli datasetexists $ds && log_must zfs destroy -r $ds 39*6ccda740Sloli done 40*6ccda740Sloli} 41*6ccda740Sloli 42*6ccda740Slolilog_assert "'zfs send -b' should work as expected." 43*6ccda740Slolilog_onexit cleanup 44*6ccda740Sloli 45*6ccda740SloliSENDFS="$TESTPOOL/sendfs" 46*6ccda740SloliBACKUP="$TESTPOOL/backup" 47*6ccda740SloliRESTORE="$TESTPOOL/restore" 48*6ccda740Sloli 49*6ccda740Sloli# 1. Create a source dataset and set some properties 50*6ccda740Slolilog_must zfs create $SENDFS 51*6ccda740Slolilog_must zfs snapshot "$SENDFS@s1" 52*6ccda740Slolilog_must zfs bookmark "$SENDFS@s1" "$SENDFS#bm" 53*6ccda740Slolilog_must zfs snapshot "$SENDFS@s2" 54*6ccda740Slolilog_must zfs set "compression=gzip" $SENDFS 55*6ccda740Slolilog_must zfs set "org.zfsonlinux:prop=val" $SENDFS 56*6ccda740Slolilog_must zfs set "org.zfsonlinux:snapprop=val" "$SENDFS@s1" 57*6ccda740Sloli 58*6ccda740Sloli# 2. Verify command line options interact with '-b' correctly 59*6ccda740Slolitypeset opts=("" "p" "Rp" "cew" "nv" "D" "DLPRcenpvw") 60*6ccda740Slolifor opt in ${opts[@]}; do 61*6ccda740Sloli log_must eval "zfs send -b$opt $SENDFS@s1 > /dev/null" 62*6ccda740Sloli log_must eval "zfs send -b$opt -i $SENDFS@s1 $SENDFS@s2 > /dev/null" 63*6ccda740Sloli log_must eval "zfs send -b$opt -I $SENDFS@s1 $SENDFS@s2 > /dev/null" 64*6ccda740Slolidone 65*6ccda740Slolifor opt in ${opts[@]}; do 66*6ccda740Sloli log_mustnot eval "zfs send -b$opt $SENDFS > /dev/null" 67*6ccda740Sloli log_mustnot eval "zfs send -b$opt $SENDFS#bm > /dev/null" 68*6ccda740Sloli log_mustnot eval "zfs send -b$opt -i $SENDFS#bm $SENDFS@s2 > /dev/null" 69*6ccda740Slolidone 70*6ccda740Sloli 71*6ccda740Sloli# Do 3..6 in a loop to verify various combination of "zfs send" options 72*6ccda740Slolitypeset opts=("" "p" "R" "pR" "cew") 73*6ccda740Slolifor opt in ${opts[@]}; do 74*6ccda740Sloli # 3. Send the dataset and its properties to a new "backup" destination 75*6ccda740Sloli # NOTE: only need to send properties (-p) here 76*6ccda740Sloli log_must eval "zfs send -p $SENDFS@s1 | zfs recv $BACKUP" 77*6ccda740Sloli 78*6ccda740Sloli # 4. Set some properties on the new "backup" dataset 79*6ccda740Sloli # NOTE: override "received" values and set some new properties as well 80*6ccda740Sloli log_must zfs set "compression=lz4" $BACKUP 81*6ccda740Sloli log_must zfs set "exec=off" $BACKUP 82*6ccda740Sloli log_must zfs set "org.zfsonlinux:prop=newval" $BACKUP 83*6ccda740Sloli log_must zfs set "org.zfsonlinux:newprop=newval" $BACKUP 84*6ccda740Sloli log_must zfs set "org.zfsonlinux:snapprop=newval" "$BACKUP@s1" 85*6ccda740Sloli log_must zfs set "org.zfsonlinux:newsnapprop=newval" "$BACKUP@s1" 86*6ccda740Sloli 87*6ccda740Sloli # 5. Restore the "backup" dataset to a new destination 88*6ccda740Sloli log_must eval "zfs send -b$opt $BACKUP@s1 | zfs recv $RESTORE" 89*6ccda740Sloli 90*6ccda740Sloli # 6. Verify only original (received) properties are sent from "backup" 91*6ccda740Sloli log_must eval "check_prop_source $RESTORE compression gzip received" 92*6ccda740Sloli log_must eval "check_prop_source $RESTORE org.zfsonlinux:prop val received" 93*6ccda740Sloli log_must eval "check_prop_source $RESTORE@s1 org.zfsonlinux:snapprop val received" 94*6ccda740Sloli log_must eval "check_prop_source $RESTORE exec on default" 95*6ccda740Sloli log_must eval "check_prop_missing $RESTORE org.zfsonlinux:newprop" 96*6ccda740Sloli log_must eval "check_prop_missing $RESTORE@s1 org.zfsonlinux:newsnapprop" 97*6ccda740Sloli 98*6ccda740Sloli # cleanup 99*6ccda740Sloli log_must zfs destroy -r $BACKUP 100*6ccda740Sloli log_must zfs destroy -r $RESTORE 101*6ccda740Slolidone 102*6ccda740Sloli 103*6ccda740Slolilog_pass "'zfs send -b' works as expected." 104