1*dfc11533SChris Williamson#!/bin/ksh -p 2*dfc11533SChris Williamson# 3*dfc11533SChris Williamson# This file and its contents are supplied under the terms of the 4*dfc11533SChris Williamson# Common Development and Distribution License ("CDDL"), version 1.0. 5*dfc11533SChris Williamson# You may only use this file in accordance with the terms of version 6*dfc11533SChris Williamson# 1.0 of the CDDL. 7*dfc11533SChris Williamson# 8*dfc11533SChris Williamson# A full copy of the text of the CDDL should have accompanied this 9*dfc11533SChris Williamson# source. A copy of the CDDL is also available via the Internet at 10*dfc11533SChris Williamson# http://www.illumos.org/license/CDDL. 11*dfc11533SChris Williamson# 12*dfc11533SChris Williamson 13*dfc11533SChris Williamson# 14*dfc11533SChris Williamson# Copyright (c) 2016 by Delphix. All rights reserved. 15*dfc11533SChris Williamson# 16*dfc11533SChris Williamson 17*dfc11533SChris Williamson. $STF_SUITE/tests/functional/channel_program/channel_common.kshlib 18*dfc11533SChris Williamson 19*dfc11533SChris Williamson# 20*dfc11533SChris Williamson# DESCRIPTION: 21*dfc11533SChris Williamson# Listing zfs snapshots should work correctly. 22*dfc11533SChris Williamson# 23*dfc11533SChris Williamson 24*dfc11533SChris Williamsonverify_runnable "global" 25*dfc11533SChris Williamson 26*dfc11533SChris Williamsonlog_assert "Listing zfs snapshots should work correctly." 27*dfc11533SChris Williamson 28*dfc11533SChris Williamsonfunction cleanup 29*dfc11533SChris Williamson{ 30*dfc11533SChris Williamson datasetexists $TESTPOOL/$TESTFS@$TESTSNAP && \ 31*dfc11533SChris Williamson log_must zfs destroy $TESTPOOL/$TESTFS@$TESTSNAP 32*dfc11533SChris Williamson datasetexists $TESTPOOL/$TESTFS@$TESTSNAP1 && \ 33*dfc11533SChris Williamson log_must zfs destroy $TESTPOOL/$TESTFS@$TESTSNAP1 34*dfc11533SChris Williamson datasetexists $TESTPOOL/$TESTFS@$TESTSNAP2 && \ 35*dfc11533SChris Williamson log_must zfs destroy $TESTPOOL/$TESTFS@$TESTSNAP2 36*dfc11533SChris Williamson datasetexists $TESTPOOL/$TESTFS@$TESTSNAP3 && \ 37*dfc11533SChris Williamson log_must zfs destroy $TESTPOOL/$TESTFS@$TESTSNAP3 38*dfc11533SChris Williamson} 39*dfc11533SChris Williamson 40*dfc11533SChris Williamsonlog_onexit cleanup 41*dfc11533SChris Williamson 42*dfc11533SChris Williamson# 0 snapshots handled correctly 43*dfc11533SChris Williamsonlog_must_program $TESTPOOL - <<-EOF 44*dfc11533SChris Williamson n = 0 45*dfc11533SChris Williamson for s in zfs.list.snapshots("$TESTPOOL/$TESTFS") do 46*dfc11533SChris Williamson zfs.debug("ERROR: found snapshot " .. s) 47*dfc11533SChris Williamson n = n + 1 48*dfc11533SChris Williamson end 49*dfc11533SChris Williamson assert(n == 0) 50*dfc11533SChris Williamson return 0 51*dfc11533SChris WilliamsonEOF 52*dfc11533SChris Williamson 53*dfc11533SChris Williamson# Take a snapshot, make sure it appears 54*dfc11533SChris Williamsoncreate_snapshot $TESTPOOL/$TESTFS $TESTSNAP 55*dfc11533SChris Williamson 56*dfc11533SChris Williamsonlog_must_program $TESTPOOL - <<-EOF 57*dfc11533SChris Williamson n = 0 58*dfc11533SChris Williamson for s in zfs.list.snapshots("$TESTPOOL/$TESTFS") do 59*dfc11533SChris Williamson assert(s == "$TESTPOOL/$TESTFS@$TESTSNAP") 60*dfc11533SChris Williamson n = n + 1 61*dfc11533SChris Williamson end 62*dfc11533SChris Williamson assert(n == 1) 63*dfc11533SChris Williamson return 0 64*dfc11533SChris WilliamsonEOF 65*dfc11533SChris Williamson 66*dfc11533SChris WilliamsonTESTSNAP1=${TESTSNAP}-1 67*dfc11533SChris WilliamsonTESTSNAP2=${TESTSNAP}-2 68*dfc11533SChris WilliamsonTESTSNAP3=${TESTSNAP}-3 69*dfc11533SChris Williamsoncreate_snapshot $TESTPOOL/$TESTFS $TESTSNAP1 70*dfc11533SChris Williamsoncreate_snapshot $TESTPOOL/$TESTFS $TESTSNAP2 71*dfc11533SChris Williamsoncreate_snapshot $TESTPOOL/$TESTFS $TESTSNAP3 72*dfc11533SChris Williamson 73*dfc11533SChris Williamson# All snapshots appear exactly once 74*dfc11533SChris Williamsonlog_must_program $TESTPOOL - <<-EOF 75*dfc11533SChris Williamson a = {} 76*dfc11533SChris Williamson a["$TESTPOOL/$TESTFS@$TESTSNAP"] = false 77*dfc11533SChris Williamson a["$TESTPOOL/$TESTFS@$TESTSNAP1"] = false 78*dfc11533SChris Williamson a["$TESTPOOL/$TESTFS@$TESTSNAP2"] = false 79*dfc11533SChris Williamson a["$TESTPOOL/$TESTFS@$TESTSNAP3"] = false 80*dfc11533SChris Williamson n = 0 81*dfc11533SChris Williamson for s in zfs.list.snapshots("$TESTPOOL/$TESTFS") do 82*dfc11533SChris Williamson assert(not a[s]) 83*dfc11533SChris Williamson a[s] = true 84*dfc11533SChris Williamson n = n + 1 85*dfc11533SChris Williamson end 86*dfc11533SChris Williamson assert(n == 4) 87*dfc11533SChris Williamson assert(a["$TESTPOOL/$TESTFS@$TESTSNAP"] and 88*dfc11533SChris Williamson a["$TESTPOOL/$TESTFS@$TESTSNAP1"] and 89*dfc11533SChris Williamson a["$TESTPOOL/$TESTFS@$TESTSNAP2"] and 90*dfc11533SChris Williamson a["$TESTPOOL/$TESTFS@$TESTSNAP3"]) 91*dfc11533SChris Williamson return 0 92*dfc11533SChris WilliamsonEOF 93*dfc11533SChris Williamson 94*dfc11533SChris Williamson# Bad input 95*dfc11533SChris Williamsonlog_mustnot_program $TESTPOOL - <<-EOF 96*dfc11533SChris Williamson zfs.list.snapshots("$TESTPOOL/not-a-fs") 97*dfc11533SChris Williamson return 0 98*dfc11533SChris WilliamsonEOF 99*dfc11533SChris Williamson 100*dfc11533SChris Williamsonlog_mustnot_program $TESTPOOL - <<-EOF 101*dfc11533SChris Williamson zfs.list.snapshots("not-a-pool/$TESTFS") 102*dfc11533SChris Williamson return 0 103*dfc11533SChris WilliamsonEOF 104*dfc11533SChris Williamson 105*dfc11533SChris Williamson# Can't look in a different pool than the one specified on command line 106*dfc11533SChris Williamsonlog_mustnot_program $TESTPOOL - <<-EOF 107*dfc11533SChris Williamson zfs.list.snapshots("rpool") 108*dfc11533SChris Williamson return 0 109*dfc11533SChris WilliamsonEOF 110*dfc11533SChris Williamson 111*dfc11533SChris Williamsonlog_mustnot_program $TESTPOOL - <<-EOF 112*dfc11533SChris Williamson zfs.list.snapshots("$TESTPOOL/${TESTFS}@$TESTSNAP") 113*dfc11533SChris Williamson return 0 114*dfc11533SChris WilliamsonEOF 115*dfc11533SChris Williamson 116*dfc11533SChris Williamsonlog_pass "Listing zfs snapshots should work correctly." 117