1#!/bin/ksh -p 2# 3# CDDL HEADER START 4# 5# The contents of this file are subject to the terms of the 6# Common Development and Distribution License (the "License"). 7# You may not use this file except in compliance with the License. 8# 9# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10# or https://opensource.org/licenses/CDDL-1.0. 11# See the License for the specific language governing permissions 12# and limitations under the License. 13# 14# When distributing Covered Code, include this CDDL HEADER in each 15# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16# If applicable, add the following below this CDDL HEADER, with the 17# fields enclosed by brackets "[]" replaced with your own identifying 18# information: Portions Copyright [yyyy] [name of copyright owner] 19# 20# CDDL HEADER END 21# 22 23# 24# Copyright 2007 Sun Microsystems, Inc. All rights reserved. 25# Use is subject to license terms. 26# 27 28# 29# Copyright (c) 2012, 2016 by Delphix. All rights reserved. 30# 31 32. $STF_SUITE/include/libtest.shlib 33 34# 35# DESCRIPTION: 36# When renaming a set of snapshots, if a snapshot already exists with 37# the new name, then none of the snapshots is renamed. 38# 39# STRATEGY: 40# 1. Create a snapshot for a set of datasets. 41# 2. Create a new snapshot for one of datasets. 42# 3. Attempt to "zfs rename -r" with the second snapshot's name. 43# 4. Verify none of the snapshots is renamed. 44# 45 46verify_runnable "both" 47 48function cleanup 49{ 50 for poolname in $(get_all_pools); do 51 for snap in $(zfs list -H -t snapshot -o name -r $poolname); do 52 log_must zfs destroy $snap 53 done 54 done 55} 56 57log_assert "Verify zfs rename -r failed when the snapshot name already exists." 58log_onexit cleanup 59 60set -A datasets $TESTPOOL $TESTPOOL/$TESTCTR \ 61 $TESTPOOL/$TESTCTR/$TESTFS1 $TESTPOOL/$TESTFS 62if is_global_zone; then 63 datasets[${#datasets[@]}]=$TESTPOOL/$TESTVOL 64fi 65 66log_must zfs snapshot -r ${TESTPOOL}@snap 67typeset -i i=0 68while ((i < ${#datasets[@]})); do 69 # Create one more snapshot 70 log_must zfs snapshot ${datasets[$i]}@snap2 71 log_mustnot zfs rename -r ${TESTPOOL}@snap ${TESTPOOL}@snap2 72 log_must zfs destroy ${datasets[$i]}@snap2 73 74 # Check datasets, make sure none of them have snap2. 75 typeset -i j=0 76 while ((j < ${#datasets[@]})); do 77 if datasetexists ${datasets[$j]}@snap2 ; then 78 log_fail "${datasets[$j]}@snap2 should not exist." 79 fi 80 ((j += 1)) 81 done 82 83 ((i += 1)) 84done 85 86log_pass "zfs rename -r failed when the snapshot name already exists." 87