1f38cb554SJohn Wren Kennedy#! /bin/ksh -p 2f38cb554SJohn Wren Kennedy# 3f38cb554SJohn Wren Kennedy# CDDL HEADER START 4f38cb554SJohn Wren Kennedy# 5f38cb554SJohn Wren Kennedy# The contents of this file are subject to the terms of the 6f38cb554SJohn Wren Kennedy# Common Development and Distribution License (the "License"). 7f38cb554SJohn Wren Kennedy# You may not use this file except in compliance with the License. 8f38cb554SJohn Wren Kennedy# 9f38cb554SJohn Wren Kennedy# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10f38cb554SJohn Wren Kennedy# or http://www.opensolaris.org/os/licensing. 11f38cb554SJohn Wren Kennedy# See the License for the specific language governing permissions 12f38cb554SJohn Wren Kennedy# and limitations under the License. 13f38cb554SJohn Wren Kennedy# 14f38cb554SJohn Wren Kennedy# When distributing Covered Code, include this CDDL HEADER in each 15f38cb554SJohn Wren Kennedy# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16f38cb554SJohn Wren Kennedy# If applicable, add the following below this CDDL HEADER, with the 17f38cb554SJohn Wren Kennedy# fields enclosed by brackets "[]" replaced with your own identifying 18f38cb554SJohn Wren Kennedy# information: Portions Copyright [yyyy] [name of copyright owner] 19f38cb554SJohn Wren Kennedy# 20f38cb554SJohn Wren Kennedy# CDDL HEADER END 21f38cb554SJohn Wren Kennedy# 22f38cb554SJohn Wren Kennedy 23f38cb554SJohn Wren Kennedy# 24f38cb554SJohn Wren Kennedy# Copyright 2008 Sun Microsystems, Inc. All rights reserved. 25f38cb554SJohn Wren Kennedy# Use is subject to license terms. 26f38cb554SJohn Wren Kennedy# 27f38cb554SJohn Wren Kennedy 28f38cb554SJohn Wren Kennedy# 29*1d32ba66SJohn Wren Kennedy# Copyright (c) 2013, 2016 by Delphix. All rights reserved. 30f38cb554SJohn Wren Kennedy# 31f38cb554SJohn Wren Kennedy 32f38cb554SJohn Wren Kennedy. $STF_SUITE/include/libtest.shlib 33f38cb554SJohn Wren Kennedy. $STF_SUITE/tests/functional/snapshot/snapshot.cfg 34f38cb554SJohn Wren Kennedy 35f38cb554SJohn Wren Kennedy# 36f38cb554SJohn Wren Kennedy# DESCRIPTION: 37f38cb554SJohn Wren Kennedy# Verify 'snapshot -r' can create snapshot for promoted clone, and vice 38f38cb554SJohn Wren Kennedy# versa, a clone filesystem from the snapshot created by 'snapshot -r' 39f38cb554SJohn Wren Kennedy# can be correctly promoted. 40f38cb554SJohn Wren Kennedy# 41f38cb554SJohn Wren Kennedy# STRATEGY: 42f38cb554SJohn Wren Kennedy# 1. Create a dataset tree 43f38cb554SJohn Wren Kennedy# 2. snapshot a filesystem and clone the snapshot 44f38cb554SJohn Wren Kennedy# 3. promote the clone 45f38cb554SJohn Wren Kennedy# 4. snapshot -r the dataset tree 46f38cb554SJohn Wren Kennedy# 5. verify that the snapshot of cloned filesystem is created correctly 47f38cb554SJohn Wren Kennedy# 6. clone a snapshot from the snapshot tree 48f38cb554SJohn Wren Kennedy# 7. promote the clone 49f38cb554SJohn Wren Kennedy# 8. verify that the clone is promoted correctly. 50f38cb554SJohn Wren Kennedy# 51f38cb554SJohn Wren Kennedy 52f38cb554SJohn Wren Kennedyverify_runnable "both" 53f38cb554SJohn Wren Kennedy 54f38cb554SJohn Wren Kennedyfunction cleanup 55f38cb554SJohn Wren Kennedy{ 56f38cb554SJohn Wren Kennedy if datasetexists $clone1; then 57*1d32ba66SJohn Wren Kennedy log_must zfs promote $ctrfs 58*1d32ba66SJohn Wren Kennedy log_must zfs destroy $clone1 59f38cb554SJohn Wren Kennedy fi 60f38cb554SJohn Wren Kennedy 61f38cb554SJohn Wren Kennedy snapexists $snapctr && \ 62*1d32ba66SJohn Wren Kennedy log_must zfs destroy -r $snapctr 63f38cb554SJohn Wren Kennedy 64f38cb554SJohn Wren Kennedy if snapexists $clone@$TESTSNAP1; then 65*1d32ba66SJohn Wren Kennedy log_must zfs promote $ctrfs 66*1d32ba66SJohn Wren Kennedy log_must zfs destroy -rR $ctrfs@$TESTSNAP1 67f38cb554SJohn Wren Kennedy fi 68f38cb554SJohn Wren Kennedy} 69f38cb554SJohn Wren Kennedy 70f38cb554SJohn Wren Kennedylog_assert "Verify that 'snapshot -r' can work with 'zfs promote'." 71f38cb554SJohn Wren Kennedylog_onexit cleanup 72f38cb554SJohn Wren Kennedy 73f38cb554SJohn Wren Kennedyctr=$TESTPOOL/$TESTCTR 74f38cb554SJohn Wren Kennedyctrfs=$ctr/$TESTFS1 75f38cb554SJohn Wren Kennedyclone=$ctr/$TESTCLONE 76f38cb554SJohn Wren Kennedyclone1=$ctr/$TESTCLONE1 77f38cb554SJohn Wren Kennedysnappool=$SNAPPOOL 78f38cb554SJohn Wren Kennedysnapfs=$SNAPFS 79f38cb554SJohn Wren Kennedysnapctr=$ctr@$TESTSNAP 80f38cb554SJohn Wren Kennedysnapctrclone=$clone@$TESTSNAP 81f38cb554SJohn Wren Kennedysnapctrclone1=$clone1@$TESTSNAP 82f38cb554SJohn Wren Kennedysnapctrfs=$SNAPCTR 83f38cb554SJohn Wren Kennedy 84f38cb554SJohn Wren Kennedy#preparation for testing 85*1d32ba66SJohn Wren Kennedylog_must zfs snapshot $ctrfs@$TESTSNAP1 86*1d32ba66SJohn Wren Kennedylog_must zfs clone $ctrfs@$TESTSNAP1 $clone 87*1d32ba66SJohn Wren Kennedylog_must zfs promote $clone 88f38cb554SJohn Wren Kennedy 89*1d32ba66SJohn Wren Kennedylog_must zfs snapshot -r $snapctr 90f38cb554SJohn Wren Kennedy 91f38cb554SJohn Wren Kennedy! snapexists $snapctrclone && \ 92f38cb554SJohn Wren Kennedy log_fail "'snapshot -r' fails to create $snapctrclone for $ctr/$TESTCLONE." 93f38cb554SJohn Wren Kennedy 94*1d32ba66SJohn Wren Kennedylog_must zfs clone $snapctrfs $clone1 95*1d32ba66SJohn Wren Kennedylog_must zfs promote $clone1 96f38cb554SJohn Wren Kennedy 97f38cb554SJohn Wren Kennedy#verify the origin value is correct. 98f38cb554SJohn Wren Kennedyorig_value=$(get_prop origin $ctrfs) 99f38cb554SJohn Wren Kennedyif ! snapexists $snapctrclone1 || [[ "$orig_value" != "$snapctrclone1" ]]; then 100f38cb554SJohn Wren Kennedy log_fail "'zfs promote' fails to promote $clone which is cloned from \ 101f38cb554SJohn Wren Kennedy $snapctrfs." 102f38cb554SJohn Wren Kennedyfi 103f38cb554SJohn Wren Kennedy 104f38cb554SJohn Wren Kennedylog_pass "'snapshot -r' can work with 'zfs promote' as expected." 105