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