1*dfc11533SChris Williamson-- 2*dfc11533SChris Williamson-- This file and its contents are supplied under the terms of the 3*dfc11533SChris Williamson-- Common Development and Distribution License ("CDDL"), version 1.0. 4*dfc11533SChris Williamson-- You may only use this file in accordance with the terms of version 5*dfc11533SChris Williamson-- 1.0 of the CDDL. 6*dfc11533SChris Williamson-- 7*dfc11533SChris Williamson-- A full copy of the text of the CDDL should have accompanied this 8*dfc11533SChris Williamson-- source. A copy of the CDDL is also available via the Internet at 9*dfc11533SChris Williamson-- http://www.illumos.org/license/CDDL. 10*dfc11533SChris Williamson-- 11*dfc11533SChris Williamson 12*dfc11533SChris Williamson-- 13*dfc11533SChris Williamson-- Copyright (c) 2016 by Delphix. All rights reserved. 14*dfc11533SChris Williamson-- 15*dfc11533SChris Williamson 16*dfc11533SChris Williamsonarg = ... 17*dfc11533SChris Williamsonfs = arg["argv"][1] 18*dfc11533SChris Williamsonsnap = arg["argv"][2] 19*dfc11533SChris Williamsonvol = arg["argv"][3] 20*dfc11533SChris Williamson 21*dfc11533SChris Williamsonprops = {} 22*dfc11533SChris Williamson 23*dfc11533SChris Williamson-- The values indicate whether or not a property should be returned, 24*dfc11533SChris Williamson-- not the value of the property. A better approach might be to compare 25*dfc11533SChris Williamson-- their values to the output of 'zfs get <prop>' 26*dfc11533SChris Williamson 27*dfc11533SChris Williamson-- prop filesystem snapshot volume 28*dfc11533SChris Williamsonprops['used'] = {{true, nil}, {true, nil}, {true, nil}} 29*dfc11533SChris Williamsonprops['available'] = {{true, nil}, {nil, nil}, {true, nil}} 30*dfc11533SChris Williamsonprops['referenced'] = {{true, nil}, {true, nil}, {true, nil}} 31*dfc11533SChris Williamsonprops['compressratio'] = {{true, nil}, {true, nil}, {true, nil}} 32*dfc11533SChris Williamsonprops['refcompressratio'] = {{true, nil}, {true, nil}, {true, nil}} 33*dfc11533SChris Williamsonprops['volblocksize'] = {{nil, nil}, {nil, nil}, {true, nil}} 34*dfc11533SChris Williamsonprops['usedbysnapshots'] = {{true, nil}, {nil, nil}, {true, nil}} 35*dfc11533SChris Williamsonprops['usedbydataset'] = {{true, nil}, {nil, nil}, {true, nil}} 36*dfc11533SChris Williamsonprops['usedbychildren'] = {{true, nil}, {nil, nil}, {true, nil}} 37*dfc11533SChris Williamsonprops['usedbyrefreservation'] = {{true, nil}, {nil, nil}, {true, nil}} 38*dfc11533SChris Williamsonprops['userrefs'] = {{nil, nil}, {true, nil}, {nil, nil}} 39*dfc11533SChris Williamsonprops['written'] = {{true, nil}, {true, nil}, {true, nil}} 40*dfc11533SChris Williamsonprops['logicalused'] = {{true, nil}, {nil, nil}, {true, nil}} 41*dfc11533SChris Williamsonprops['logicalreferenced'] = {{true, nil}, {true, nil}, {true, nil}} 42*dfc11533SChris Williamsonprops['quota'] = {{true, 'default'}, {nil, nil}, {nil, nil}} 43*dfc11533SChris Williamsonprops['reservation'] = {{true, 'default'}, {nil, nil}, {true, 'default'}} 44*dfc11533SChris Williamsonprops['volsize'] = {{nil, nil}, {nil, nil}, {true, vol}} 45*dfc11533SChris Williamsonprops['refquota'] = {{true, 'default'}, {nil, nil}, {nil, nil}} 46*dfc11533SChris Williamsonprops['refreservation'] = {{true, 'default'}, {nil, nil}, {true, vol}} 47*dfc11533SChris Williamsonprops['filesystem_limit'] = {{true, fs}, {nil, nil}, {nil, nil}} 48*dfc11533SChris Williamsonprops['snapshot_limit'] = {{true, fs}, {nil, nil}, {true, vol}} 49*dfc11533SChris Williamsonprops['filesystem_count'] = {{true, nil}, {nil, nil}, {nil, nil}} 50*dfc11533SChris Williamsonprops['snapshot_count'] = {{true, nil}, {nil, nil}, {true, nil}} 51*dfc11533SChris Williamsonprops['recordsize'] = {{true, 'default'}, {nil, nil}, {nil, nil}} 52*dfc11533SChris Williamsonprops['creation'] = {{true, nil}, {true, nil}, {true, nil}} 53*dfc11533SChris Williamson-- hidden props 54*dfc11533SChris Williamsonprops['createtxg'] = {{true, nil}, {true, nil}, {true, nil}} 55*dfc11533SChris Williamsonprops['numclones'] = {{nil, nil}, {true, nil}, {nil, nil}} 56*dfc11533SChris Williamsonprops['guid'] = {{true, nil}, {true, nil}, {true, nil}} 57*dfc11533SChris Williamsonprops['useraccounting'] = {{true, nil}, {true, nil}, {true, nil}} 58*dfc11533SChris Williamsonprops['unique'] = {{true, nil}, {true, nil}, {true, nil}} 59*dfc11533SChris Williamsonprops['objsetid'] = {{true, nil}, {true, nil}, {true, nil}} 60*dfc11533SChris Williamsonprops['inconsistent'] = {{true, nil}, {true, nil}, {true, nil}} 61*dfc11533SChris Williamson 62*dfc11533SChris Williamson 63*dfc11533SChris Williamsonfs_fails = {} 64*dfc11533SChris Williamsonsnap_fails = {} 65*dfc11533SChris Williamsonvol_fails = {} 66*dfc11533SChris Williamson 67*dfc11533SChris Williamsonfunction match(n, ans, src, expected) 68*dfc11533SChris Williamson if ((expected[n][1] == nil) and (ans ~= nil)) then 69*dfc11533SChris Williamson return false 70*dfc11533SChris Williamson end 71*dfc11533SChris Williamson 72*dfc11533SChris Williamson if ((expected[n][1] == true) and (ans == nil)) then 73*dfc11533SChris Williamson return false 74*dfc11533SChris Williamson end 75*dfc11533SChris Williamson 76*dfc11533SChris Williamson if (expected[n][2] ~= src) then 77*dfc11533SChris Williamson return false 78*dfc11533SChris Williamson end 79*dfc11533SChris Williamson 80*dfc11533SChris Williamson return true 81*dfc11533SChris Williamsonend 82*dfc11533SChris Williamson 83*dfc11533SChris Williamsonfor prop, expected in pairs(props) do 84*dfc11533SChris Williamson ans, src = zfs.get_prop(fs, prop) 85*dfc11533SChris Williamson if not (match(1, ans, src, expected)) then 86*dfc11533SChris Williamson fs_fails[prop] = {ans, src} 87*dfc11533SChris Williamson end 88*dfc11533SChris Williamson 89*dfc11533SChris Williamson ans, src = zfs.get_prop(snap, prop) 90*dfc11533SChris Williamson if not (match(2, ans, src, expected)) then 91*dfc11533SChris Williamson snap_fails[prop] = {ans, src} 92*dfc11533SChris Williamson end 93*dfc11533SChris Williamson 94*dfc11533SChris Williamson ans, src = zfs.get_prop(vol, prop) 95*dfc11533SChris Williamson if not (match(3, ans, src, expected)) then 96*dfc11533SChris Williamson vol_fails[prop] = {ans, src} 97*dfc11533SChris Williamson end 98*dfc11533SChris Williamsonend 99*dfc11533SChris Williamson 100*dfc11533SChris Williamsonreturn {fs_fails, snap_fails, vol_fails} 101