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 children should work correctly.
22*dfc11533SChris Williamson#
23*dfc11533SChris Williamson
24*dfc11533SChris Williamsonverify_runnable "global"
25*dfc11533SChris Williamson
26*dfc11533SChris Williamsonlog_assert "Listing zfs children should work correctly."
27*dfc11533SChris Williamson
28*dfc11533SChris WilliamsonTESTCHILD=$TESTPOOL/$TESTFS/testchild
29*dfc11533SChris WilliamsonTESTCHILD1=$TESTCHILD-1
30*dfc11533SChris WilliamsonTESTCHILD2=$TESTCHILD-2
31*dfc11533SChris WilliamsonTESTCHILD3=$TESTCHILD-3
32*dfc11533SChris Williamson
33*dfc11533SChris Williamsonfunction cleanup
34*dfc11533SChris Williamson{
35*dfc11533SChris Williamson	datasetexists $TESTCHILD && log_must zfs destroy $TESTCHILD
36*dfc11533SChris Williamson	datasetexists $TESTCHILD1 && log_must zfs destroy $TESTCHILD1
37*dfc11533SChris Williamson	datasetexists $TESTCHILD2 && log_must zfs destroy $TESTCHILD2
38*dfc11533SChris Williamson	datasetexists $TESTCHILD3 && log_must zfs destroy $TESTCHILD3
39*dfc11533SChris Williamson}
40*dfc11533SChris Williamson
41*dfc11533SChris Williamsonlog_onexit cleanup
42*dfc11533SChris Williamson
43*dfc11533SChris Williamson# 0 children handled correctly
44*dfc11533SChris Williamsonlog_must_program $TESTPOOL - <<-EOF
45*dfc11533SChris Williamson	n = 0
46*dfc11533SChris Williamson	for s in zfs.list.children("$TESTPOOL/$TESTFS") do
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 Williamsonlog_must_program $TESTPOOL - <<-EOF
54*dfc11533SChris Williamson	n = 0
55*dfc11533SChris Williamson	for s in zfs.list.children("$TESTPOOL") do
56*dfc11533SChris Williamson		assert(s == "$TESTPOOL/$TESTFS")
57*dfc11533SChris Williamson		n = n + 1
58*dfc11533SChris Williamson	end
59*dfc11533SChris Williamson	assert(n == 1)
60*dfc11533SChris Williamson	return 0
61*dfc11533SChris WilliamsonEOF
62*dfc11533SChris Williamson
63*dfc11533SChris Williamson# Create a child fs
64*dfc11533SChris Williamsonlog_must zfs create $TESTCHILD
65*dfc11533SChris Williamson
66*dfc11533SChris Williamsonlog_must_program $TESTPOOL - <<-EOF
67*dfc11533SChris Williamson	n = 0
68*dfc11533SChris Williamson	for s in zfs.list.children("$TESTPOOL/$TESTFS") do
69*dfc11533SChris Williamson		assert(s == "$TESTCHILD")
70*dfc11533SChris Williamson		n = n + 1
71*dfc11533SChris Williamson	end
72*dfc11533SChris Williamson	assert(n == 1)
73*dfc11533SChris Williamson	return 0
74*dfc11533SChris WilliamsonEOF
75*dfc11533SChris Williamson
76*dfc11533SChris Williamsonlog_must zfs create $TESTCHILD1
77*dfc11533SChris Williamsonlog_must zfs create $TESTCHILD2
78*dfc11533SChris Williamsonlog_must zfs create $TESTCHILD3
79*dfc11533SChris Williamson
80*dfc11533SChris Williamson# All children appear exactly once
81*dfc11533SChris Williamsonlog_must_program $TESTPOOL - <<-EOF
82*dfc11533SChris Williamson	a = {}
83*dfc11533SChris Williamson	a["$TESTCHILD"] = false
84*dfc11533SChris Williamson	a["$TESTCHILD1"] = false
85*dfc11533SChris Williamson	a["$TESTCHILD2"] = false
86*dfc11533SChris Williamson	a["$TESTCHILD3"] = false
87*dfc11533SChris Williamson	n = 0
88*dfc11533SChris Williamson	for s in zfs.list.children("$TESTPOOL/$TESTFS") do
89*dfc11533SChris Williamson		assert(not a[s])
90*dfc11533SChris Williamson		a[s] = true
91*dfc11533SChris Williamson		n = n + 1
92*dfc11533SChris Williamson	end
93*dfc11533SChris Williamson	assert(n == 4)
94*dfc11533SChris Williamson	assert(a["$TESTCHILD"] and
95*dfc11533SChris Williamson	    a["$TESTCHILD1"] and
96*dfc11533SChris Williamson	    a["$TESTCHILD2"] and
97*dfc11533SChris Williamson	    a["$TESTCHILD3"])
98*dfc11533SChris Williamson	return 0
99*dfc11533SChris WilliamsonEOF
100*dfc11533SChris Williamson
101*dfc11533SChris Williamson# Bad input
102*dfc11533SChris Williamsonlog_mustnot_program $TESTPOOL - <<-EOF
103*dfc11533SChris Williamson	zfs.list.children("$TESTPOOL/not-a-fs")
104*dfc11533SChris Williamson	return 0
105*dfc11533SChris WilliamsonEOF
106*dfc11533SChris Williamson
107*dfc11533SChris Williamsonlog_mustnot_program $TESTPOOL - <<-EOF
108*dfc11533SChris Williamson	zfs.list.children("not-a-pool/$TESTFS")
109*dfc11533SChris Williamson	return 0
110*dfc11533SChris WilliamsonEOF
111*dfc11533SChris Williamson
112*dfc11533SChris Williamson# Can't look in a different pool than the one specified on command line
113*dfc11533SChris Williamsonlog_mustnot_program $TESTPOOL - <<-EOF
114*dfc11533SChris Williamson	zfs.list.children("rpool")
115*dfc11533SChris Williamson	return 0
116*dfc11533SChris WilliamsonEOF
117*dfc11533SChris Williamson
118*dfc11533SChris Williamsoncreate_snapshot
119*dfc11533SChris Williamsonlog_mustnot_program $TESTPOOL - <<-EOF
120*dfc11533SChris Williamson	zfs.list.children("$TESTPOOL/$TESTFS@$TESTSNAP")
121*dfc11533SChris Williamson	return 0
122*dfc11533SChris WilliamsonEOF
123*dfc11533SChris Williamsondestroy_snapshot
124*dfc11533SChris Williamson
125*dfc11533SChris Williamsonlog_pass "Listing zfs children should work correctly."
126