require 'test/unit'
require 'rbvmomi'
VIM ||= RbVmomi::VIM
class DeserializationTest < Test::Unit::TestCase
def setup
@soap = VIM.new(ns: 'urn:vim25', rev: '4.0')
end
def check str, expected, type
got = @soap.xml2obj Nokogiri(str).root, type
assert_equal expected, got
end
def test_moref
check <<-EOS, VIM.Folder(nil, 'ha-folder-root'), 'Folder'
ha-folder-root
EOS
check <<-EOS, VIM.Datacenter(nil, 'ha-datacenter'), 'ManagedObjectReference'
ha-datacenter
EOS
end
def test_dataobject
obj = VIM.DatastoreSummary(
capacity: 1000,
accessible: true,
datastore: VIM.Datastore(nil, "foo"),
freeSpace: 31,
multipleHostAccess: false,
name: "baz",
type: "VMFS",
url: "http://foo/",
dynamicProperty: []
)
check <<-EOS, obj, 'DatastoreSummary'
1000
1
foo
31
false
baz
VMFS
http://foo/
EOS
end
def test_enum
check <<-EOS, 'add', 'ConfigSpecOperation'
add
EOS
end
def test_array
obj = VIM.ObjectContent(
obj: VIM.Folder(nil, 'ha-folder-root'),
dynamicProperty: [],
missingSet: [],
propSet: [
VIM.DynamicProperty(
name: 'childEntity',
val: [
VIM.Datacenter(nil, 'ha-datacenter')
]
)
]
)
check <<-EOS, obj, 'ObjectContent'
ha-folder-root
childEntity
ha-datacenter
EOS
end
def test_array2
obj = VIM.DVPortStatus(
dynamicProperty: [],
linkUp: true,
blocked: false,
vlanIds: [
VIM::NumericRange(dynamicProperty: [], start: 5, end: 7),
VIM::NumericRange(dynamicProperty: [], start: 10, end: 20),
]
)
check <<-EOS, obj, 'DVPortStatus'
1
false
5
7
10
20
EOS
end
def test_empty_array
obj = VIM.DVPortStatus(
dynamicProperty: [],
linkUp: true,
blocked: false,
vlanIds: []
)
check <<-EOS, obj, 'DVPortStatus'
1
false
EOS
end
def test_fault
obj = VIM.LocalizedMethodFault(
localizedMessage: "The attempted operation cannot be performed in the current state (Powered off).",
fault: VIM.InvalidPowerState(
requestedState: 'poweredOn',
existingState: 'poweredOff',
faultMessage: []
)
)
check <<-EOS, obj, "LocalizedMethodFault"
poweredOn
poweredOff
The attempted operation cannot be performed in the current state (Powered off).
EOS
end
def test_wait_for_updates
obj = VIM.UpdateSet(
version: '7',
dynamicProperty: [],
filterSet: [
VIM.PropertyFilterUpdate(
dynamicProperty: [],
filter: VIM.PropertyFilter(nil, "session[528BA5EB-335B-4AF6-B49C-6160CF5E8D5B]71E3AC7E-7927-4D9E-8BC3-522769F22DAF"),
missingSet: [],
objectSet: [
VIM.ObjectUpdate(
dynamicProperty: [],
kind: 'enter',
obj: VIM.VirtualMachine(nil, 'vm-1106'),
missingSet: [],
changeSet: [
VIM.PropertyChange(
dynamicProperty: [],
name: 'runtime.powerState',
op: 'assign',
val: 'poweredOn'
)
]
)
]
)
]
)
check <<-EOS, obj, "UpdateSet"
7
session[528BA5EB-335B-4AF6-B49C-6160CF5E8D5B]71E3AC7E-7927-4D9E-8BC3-522769F22DAF
enter
vm-1106
runtime.powerState
assign
poweredOn
EOS
end
def test_binary
obj = "\x00foo\x01bar\x02baz"
check <<-EOS, obj, 'xsd:base64Binary'
AGZvbwFiYXICYmF6
EOS
end
def test_hba
obj = VIM::HostBlockHba(
dynamicProperty: [],
key: 'key-vim.host.BlockHba-vmhba0',
device: 'vmhba0',
bus: 0,
status: 'unknown',
model: 'Virtual Machine Chipset',
driver: 'ata_piix',
pci: '00:07.1')
check <<-EOS, obj, "HostBlockHba"
key-vim.host.BlockHba-vmhba0
vmhba0
0
unknown
Virtual Machine Chipset
ata_piix
00:07.1
EOS
end
=begin
def test_runtime_state
obj = VIM::VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeState(
dynamicProperty: [],
vmDirectPathGen2Active: false,
vmDirectPathGen2InactiveReasonOther: ["vmNptIncompatibleHost"],
vmDirectPathGen2InactiveReasonVm: []
)
check <<-EOS, obj, 'VirtualMachineDeviceRuntimeInfoDeviceRuntimeState'
false
vmNptIncompatibleHost
EOS
end
=end
def test_runtime_info
obj = VIM::VirtualMachineRuntimeInfo(
bootTime: Time.parse('2010-08-20 05:44:35 UTC'),
connectionState: "connected",
dynamicProperty: [],
faultToleranceState: "notConfigured",
host: VIM::HostSystem(nil, "host-32"),
maxCpuUsage: 5612,
maxMemoryUsage: 3072,
memoryOverhead: 128671744,
numMksConnections: 1,
powerState: "poweredOn",
recordReplayState: "inactive",
suspendInterval: 0,
toolsInstallerMounted: false
)
check <<-EOS, obj, 'VirtualMachineRuntimeInfo'
host-32
connected
poweredOn
notConfigured
false
2010-08-20T05:44:35.0Z
0
128671744
5612
3072
1
inactive
EOS
end
end