d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# !/bin/ksh
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# This file and its contents are supplied under the terms of the
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Common Development and Distribution License ("CDDL"), version 1.0.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# You may only use this file in accordance with the terms of version
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# 1.0 of the CDDL.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# A full copy of the text of the CDDL should have accompanied this
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# source. A copy of the CDDL is also available via the Internet at
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# http://www.illumos.org/license/CDDL.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy# Copyright (c) 2012, 2016 by Delphix. All rights reserved.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# DESCRIPTION
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Verify zfs destroy test for range of snapshots by giving a list
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# of valid and invalid arguments.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# STRATEGY
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# 1. Create a list of valid and invalid arguments for range snapshot
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# destroy.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# 2. Set up a filesystem and a volume with multiple snapshots
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# 3. Run zfs destroy for all the arguments and verify existence of snapshots
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# 4. Verify the destroy for snapshots with clones and hold
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy. $STF_SUITE/include/libtest.shlib
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction cleanup
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy datasetexists $TESTPOOL/$TESTFS1 && \
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs destroy -R $TESTPOOL/$TESTFS1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy datasetexists $TESTPOOL/$TESTVOL && \
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs destroy -Rf $TESTPOOL/$TESTVOL
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction setup_snapshots
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy for i in $snaps; do
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy datasetexists $TESTPOOL/$TESTFS1@snap$i && \
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs destroy $TESTPOOL/$TESTFS1@snap$i
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy datasetexists $TESTPOOL/$TESTVOL@snap$i && \
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs destroy $TESTPOOL/$TESTVOL@snap$i
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs snapshot $TESTPOOL/$TESTFS1@snap$i
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs snapshot $TESTPOOL/$TESTVOL@snap$i
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy done
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction verify_snapshots
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset snap_exists=${1:-0}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ $snap_exists == 1 ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy for i in $range; do
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy snapexists $TESTPOOL/$TESTFS1@snap$i || \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_fail "zfs destroy should not have destroyed" \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy "$TESTPOOL/$TESTFS1@snap$i"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy snapexists $TESTPOOL/$TESTVOL@snap$i || \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_fail "zfs destroy should not have destroyed" \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy "$TESTPOOL/$TESTVOL@snap$i"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy done
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy else
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy for i in $range; do
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy snapexists $TESTPOOL/$TESTFS1@snap$i && \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_fail "zfs destroy should have destroyed" \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy "$TESTPOOL/$TESTFS1@snap$i"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy snapexists $TESTPOOL/$TESTVOL@snap$i && \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_fail "zfs destroy should have destroyed" \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy "$TESTPOOL/$TESTVOL@snap$i"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy done
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyinvalid_args="@snap0%snap5 @snap1%snap6 @snap0%snap6 @snap5%snap1 \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy @snap1%$TESTPOOL/$TESTFS1@snap5 @snap1%%snap5 @snap1%@snap5 \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy @@snap1%snap5 snap1%snap5 snap1%snap3%snap5"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyvalid_args="@snap1%snap5 @%"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedylog_assert "zfs destroy deletes ranges of snapshots"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedylog_onexit cleanup
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must zfs create $TESTPOOL/$TESTFS1
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must zfs create -V $VOLSIZE $TESTPOOL/$TESTVOL
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedysnaps="1 2 3 4 5"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedylog_note "Verify the valid arguments"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyrange="1 2 3 4 5"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfor args in $valid_args; do
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy setup_snapshots
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs destroy $TESTPOOL/$TESTFS1$args
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs destroy $TESTPOOL/$TESTVOL$args
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy verify_snapshots
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedydone
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedylog_note "Verify invalid arguements"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedysetup_snapshots
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfor args in $invalid_args; do
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_mustnot zfs destroy $TESTPOOL/$TESTFS1$args
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_mustnot zfs destroy $TESTPOOL/$TESTVOL$args
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_must verify_snapshots 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedydone
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedylog_note "Destroy the begining range"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must zfs destroy $TESTPOOL/$TESTFS1@%snap3
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must zfs destroy $TESTPOOL/$TESTVOL@%snap3
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyrange="1 2 3"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyverify_snapshots
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyrange="4 5"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyverify_snapshots 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedysetup_snapshots
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedylog_note "Destroy the mid range"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must zfs destroy $TESTPOOL/$TESTFS1@snap2%snap4
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must zfs destroy $TESTPOOL/$TESTVOL@snap2%snap4
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyrange="2 3 4"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyverify_snapshots
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must zfs destroy $TESTPOOL/$TESTFS1@snap1%snap5
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must zfs destroy $TESTPOOL/$TESTVOL@snap1%snap5
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyrange="1 5"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyverify_snapshots
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedysetup_snapshots
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedylog_note "Destroy the end range"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must zfs destroy $TESTPOOL/$TESTFS1@snap3%
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must zfs destroy $TESTPOOL/$TESTVOL@snap3%
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyrange="1 2"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyverify_snapshots 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyrange="3 4 5"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyverify_snapshots
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedysetup_snapshots
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedylog_note "Destroy a simple list"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must zfs destroy $TESTPOOL/$TESTFS1@snap2,snap4
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must zfs destroy $TESTPOOL/$TESTVOL@snap2,snap4
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyrange="2 4"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyverify_snapshots
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyrange="1 3 5"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyverify_snapshots 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedysetup_snapshots
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedylog_note "Destroy a list and range together"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must zfs destroy $TESTPOOL/$TESTFS1@snap1%snap3,snap5
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must zfs destroy $TESTPOOL/$TESTVOL@snap1%snap3,snap5
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyrange="1 2 3 5"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyverify_snapshots
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyrange=4
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyverify_snapshots 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedysnaps="1 2 3 5 6 7 8 9 10"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedysetup_snapshots
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedylog_note "Destroy a list of ranges"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must zfs destroy $TESTPOOL/$TESTFS1@snap1%snap3,snap5
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must zfs destroy $TESTPOOL/$TESTVOL@snap1%snap3,snap5
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyrange="1 2 3 5"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyverify_snapshots
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyrange=4
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyverify_snapshots 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedysnaps="1 2 3 4 5"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedysetup_snapshots
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedylog_note "Snapshot destory with hold"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyrange="1 2 3 4 5"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfor i in 1 2 3 4 5; do
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs hold keep $TESTPOOL/$TESTFS1@snap$i
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs hold keep $TESTPOOL/$TESTVOL@snap$i
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedydone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_mustnot zfs destroy $TESTPOOL/$TESTFS1@snap1%snap5
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_mustnot zfs destroy $TESTPOOL/$TESTVOL@snap1%snap5
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyverify_snapshots 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfor i in 1 2 3 4 5; do
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs release keep $TESTPOOL/$TESTFS1@snap$i
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs release keep $TESTPOOL/$TESTVOL@snap$i
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedydone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must zfs destroy $TESTPOOL/$TESTFS1@snap1%snap5
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must zfs destroy $TESTPOOL/$TESTVOL@snap1%snap5
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyverify_snapshots
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedylog_note "Range destroy for snapshots having clones"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedysetup_snapshots
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfor i in 1 2 3 4 5; do
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs clone $TESTPOOL/$TESTFS1@snap$i $TESTPOOL/$TESTFS1/clone$i
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedydone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must zfs destroy -R $TESTPOOL/$TESTFS1@snap1%snap5
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedylog_must zfs destroy $TESTPOOL/$TESTVOL@snap1%snap5
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyverify_snapshots
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedylog_pass "'zfs destroy' successfully destroys ranges of snapshots"