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 clones should work correctly. 22*dfc11533SChris Williamson# 23*dfc11533SChris Williamson 24*dfc11533SChris Williamsonverify_runnable "global" 25*dfc11533SChris Williamson 26*dfc11533SChris Williamsonlog_assert "Listing zfs clones 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 -R $TESTPOOL/$TESTFS@$TESTSNAP 32*dfc11533SChris Williamson} 33*dfc11533SChris Williamson 34*dfc11533SChris Williamsonlog_onexit cleanup 35*dfc11533SChris Williamson 36*dfc11533SChris Williamson# Take snapshot to test with ($TESTSNAP) 37*dfc11533SChris Williamsoncreate_snapshot 38*dfc11533SChris Williamson 39*dfc11533SChris Williamson# 0 clones handled correctly 40*dfc11533SChris Williamsonlog_must_program $TESTPOOL - <<-EOF 41*dfc11533SChris Williamson n = 0 42*dfc11533SChris Williamson for s in zfs.list.clones("$TESTPOOL/$TESTFS@$TESTSNAP") do 43*dfc11533SChris Williamson n = n + 1 44*dfc11533SChris Williamson end 45*dfc11533SChris Williamson assert(n == 0) 46*dfc11533SChris Williamson return 0 47*dfc11533SChris WilliamsonEOF 48*dfc11533SChris Williamson 49*dfc11533SChris Williamson# Create a clone ($TESTCLONE) 50*dfc11533SChris Williamsoncreate_clone 51*dfc11533SChris Williamson 52*dfc11533SChris Williamsonlog_must_program $TESTPOOL - <<-EOF 53*dfc11533SChris Williamson n = 0 54*dfc11533SChris Williamson for s in zfs.list.clones("$TESTPOOL/$TESTFS@$TESTSNAP") do 55*dfc11533SChris Williamson assert(s == "$TESTPOOL/$TESTCLONE") 56*dfc11533SChris Williamson n = n + 1 57*dfc11533SChris Williamson end 58*dfc11533SChris Williamson assert(n == 1) 59*dfc11533SChris Williamson return 0 60*dfc11533SChris WilliamsonEOF 61*dfc11533SChris Williamson 62*dfc11533SChris WilliamsonTESTCLONE1=${TESTCLONE}-1 63*dfc11533SChris WilliamsonTESTCLONE2=${TESTCLONE}-2 64*dfc11533SChris WilliamsonTESTCLONE3=${TESTCLONE}-3 65*dfc11533SChris Williamsoncreate_clone $TESTPOOL/$TESTFS@$TESTSNAP $TESTPOOL/$TESTCLONE1 66*dfc11533SChris Williamsoncreate_clone $TESTPOOL/$TESTFS@$TESTSNAP $TESTPOOL/$TESTCLONE2 67*dfc11533SChris Williamsoncreate_clone $TESTPOOL/$TESTFS@$TESTSNAP $TESTPOOL/$TESTCLONE3 68*dfc11533SChris Williamson 69*dfc11533SChris Williamson# All clones appear exactly once 70*dfc11533SChris Williamsonlog_must_program $TESTPOOL - <<-EOF 71*dfc11533SChris Williamson a = {} 72*dfc11533SChris Williamson a["$TESTPOOL/$TESTCLONE"] = false 73*dfc11533SChris Williamson a["$TESTPOOL/$TESTCLONE1"] = false 74*dfc11533SChris Williamson a["$TESTPOOL/$TESTCLONE2"] = false 75*dfc11533SChris Williamson a["$TESTPOOL/$TESTCLONE3"] = false 76*dfc11533SChris Williamson n = 0 77*dfc11533SChris Williamson for s in zfs.list.clones("$TESTPOOL/$TESTFS@$TESTSNAP") do 78*dfc11533SChris Williamson assert(not a[s]) 79*dfc11533SChris Williamson a[s] = true 80*dfc11533SChris Williamson n = n + 1 81*dfc11533SChris Williamson end 82*dfc11533SChris Williamson assert(n == 4) 83*dfc11533SChris Williamson assert(a["$TESTPOOL/$TESTCLONE"] and 84*dfc11533SChris Williamson a["$TESTPOOL/$TESTCLONE1"] and 85*dfc11533SChris Williamson a["$TESTPOOL/$TESTCLONE2"] and 86*dfc11533SChris Williamson a["$TESTPOOL/$TESTCLONE3"]) 87*dfc11533SChris Williamson return 0 88*dfc11533SChris WilliamsonEOF 89*dfc11533SChris Williamson 90*dfc11533SChris Williamson# Bad input 91*dfc11533SChris Williamsonlog_mustnot_program $TESTPOOL - <<-EOF 92*dfc11533SChris Williamson zfs.list.clones("$TESTPOOL/not-a-fs@$TESTSNAP") 93*dfc11533SChris Williamson return 0 94*dfc11533SChris WilliamsonEOF 95*dfc11533SChris Williamson 96*dfc11533SChris Williamsonlog_mustnot_program $TESTPOOL - <<-EOF 97*dfc11533SChris Williamson zfs.list.clones("$TESTPOOL/$TESTFS@not-a-snap") 98*dfc11533SChris Williamson return 0 99*dfc11533SChris WilliamsonEOF 100*dfc11533SChris Williamson 101*dfc11533SChris Williamson# Can't look in a different pool than the one specified on command line 102*dfc11533SChris Williamsonlog_mustnot_program $TESTPOOL - <<-EOF 103*dfc11533SChris Williamson zfs.list.clones("rpool") 104*dfc11533SChris Williamson return 0 105*dfc11533SChris WilliamsonEOF 106*dfc11533SChris Williamson 107*dfc11533SChris Williamsonlog_mustnot_program $TESTPOOL - <<-EOF 108*dfc11533SChris Williamson zfs.list.clones("not-a-pool/$TESTFS@$TESTSNAP") 109*dfc11533SChris Williamson return 0 110*dfc11533SChris WilliamsonEOF 111*dfc11533SChris Williamson 112*dfc11533SChris Williamsonlog_mustnot_program $TESTPOOL - <<-EOF 113*dfc11533SChris Williamson zfs.list.clones("$TESTPOOL/$TESTFS") 114*dfc11533SChris Williamson return 0 115*dfc11533SChris WilliamsonEOF 116*dfc11533SChris Williamson 117*dfc11533SChris Williamsonlog_pass "Listing zfs clones should work correctly." 118