#!/bin/ksh -p # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # A full copy of the text of the CDDL should have accompanied this # source. A copy of the CDDL is also available via the Internet at # http://www.illumos.org/license/CDDL. # # # Copyright (c) 2017 by Delphix. All rights reserved. # . $STF_SUITE/tests/functional/channel_program/channel_common.kshlib # # DESCRIPTION: # Listing zfs user properties should work correctly. # # Note, that this file tests both zfs.list.user_properties # and it's alias zfs.list.properties. # verify_runnable "global" TESTPROP="org.openzfs:test_property" TESTPROP1=$TESTPROP-1 TESTPROP2=$TESTPROP-2 TESTPROP3=$TESTPROP-3 TESTPROP4=$TESTPROP-4 TESTVAL="true" TESTVAL1="busy" TESTVAL2="9223372036854775808" TESTVAL3="801f2266-3715-41f4-9080-3d5e913b0f15" TESTVAL4="TOZwOfACvQtmDyiq68elB3a3g9YYyxBjSnLtN3ZyQYNOAKykzIE2khKKOBncJiDx" # 0 properties handled correctly log_must_program $TESTPOOL - <<-EOF n = 0 for p in zfs.list.user_properties("$TESTPOOL/$TESTFS") do n = n + 1 end assert(n == 0) return 0 EOF log_must_program $TESTPOOL - <<-EOF n = 0 for p in zfs.list.properties("$TESTPOOL/$TESTFS") do n = n + 1 end assert(n == 0) return 0 EOF # Add a single user property log_must zfs set $TESTPROP="$TESTVAL" $TESTPOOL/$TESTFS log_must_program $TESTPOOL - <<-EOF n = 0 for p,v in zfs.list.user_properties("$TESTPOOL/$TESTFS") do assert(p == "$TESTPROP") assert(v == "$TESTVAL") n = n + 1 end assert(n == 1) return 0 EOF log_must_program $TESTPOOL - <<-EOF n = 0 for p,v in zfs.list.properties("$TESTPOOL/$TESTFS") do assert(p == "$TESTPROP") assert(v == "$TESTVAL") n = n + 1 end assert(n == 1) return 0 EOF log_must zfs set $TESTPROP1="$TESTVAL1" $TESTPOOL/$TESTFS log_must zfs set $TESTPROP2="$TESTVAL2" $TESTPOOL/$TESTFS log_must zfs set $TESTPROP3="$TESTVAL3" $TESTPOOL/$TESTFS log_must zfs set $TESTPROP4="$TESTVAL4" $TESTPOOL/$TESTFS # All user properties have correct value and appear exactly once log_must_program $TESTPOOL - <<-EOF a = {} a["$TESTPROP"] = false a["$TESTPROP1"] = false a["$TESTPROP2"] = false a["$TESTPROP3"] = false a["$TESTPROP4"] = false m = {} m["$TESTPROP"] = "$TESTVAL" m["$TESTPROP1"] = "$TESTVAL1" m["$TESTPROP2"] = "$TESTVAL2" m["$TESTPROP3"] = "$TESTVAL3" m["$TESTPROP4"] = "$TESTVAL4" n = 0 for p,v in zfs.list.user_properties("$TESTPOOL/$TESTFS") do assert(not a[p]) a[p] = true assert(v == m[p]) n = n + 1 end assert(n == 5) assert(a["$TESTPROP"] and a["$TESTPROP1"] and a["$TESTPROP2"] and a["$TESTPROP3"] and a["$TESTPROP4"]) return 0 EOF log_must_program $TESTPOOL - <<-EOF a = {} a["$TESTPROP"] = false a["$TESTPROP1"] = false a["$TESTPROP2"] = false a["$TESTPROP3"] = false a["$TESTPROP4"] = false m = {} m["$TESTPROP"] = "$TESTVAL" m["$TESTPROP1"] = "$TESTVAL1" m["$TESTPROP2"] = "$TESTVAL2" m["$TESTPROP3"] = "$TESTVAL3" m["$TESTPROP4"] = "$TESTVAL4" n = 0 for p,v in zfs.list.properties("$TESTPOOL/$TESTFS") do assert(not a[p]) a[p] = true assert(v == m[p]) n = n + 1 end assert(n == 5) assert(a["$TESTPROP"] and a["$TESTPROP1"] and a["$TESTPROP2"] and a["$TESTPROP3"] and a["$TESTPROP4"]) return 0 EOF log_pass "Listing zfs user properties should work correctly."