rbvmomi 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -0
- data/LICENSE +19 -0
- data/README.md +12 -0
- data/Rakefile +20 -0
- data/VERSION +1 -0
- data/devel/analyze-vim-declarations.rb +206 -0
- data/devel/analyze-xml.rb +46 -0
- data/lib/rbvmomi.rb +283 -0
- data/lib/rbvmomi/extensions.rb +491 -0
- data/lib/rbvmomi/profile.rb +22 -0
- data/lib/rbvmomi/trollop.rb +29 -0
- data/lib/rbvmomi/types.rb +373 -0
- data/lib/trivial_soap.rb +83 -0
- data/test/runner.rb +3 -0
- data/test/test.rb +69 -0
- data/test/test_deserialization.rb +324 -0
- data/test/test_emit_request.rb +110 -0
- data/test/test_parse_response.rb +67 -0
- data/test/test_serialization.rb +208 -0
- data/vmodl.tc +0 -0
- metadata +151 -0
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'rbvmomi'
|
3
|
+
include RbVmomi
|
4
|
+
|
5
|
+
class ParseResponseTest < Test::Unit::TestCase
|
6
|
+
def check desc, str, expected
|
7
|
+
soap = RbVmomi::Soap.new(ns: 'urn:vim25', rev: '4.0')
|
8
|
+
got = soap.parse_response Nokogiri(str).root, desc
|
9
|
+
|
10
|
+
puts "expected:"
|
11
|
+
pp expected
|
12
|
+
puts
|
13
|
+
puts "got:"
|
14
|
+
pp got
|
15
|
+
puts
|
16
|
+
|
17
|
+
assert_equal expected, got
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_string_array
|
21
|
+
desc = { 'wsdl_type' => 'xsd:string', 'is-array' => true, 'is-task' => false }
|
22
|
+
|
23
|
+
check desc, <<-EOS, ['a', 'b', 'c']
|
24
|
+
<root xmlns="urn:vim25">
|
25
|
+
<blah>a</blah>
|
26
|
+
<blah>b</blah>
|
27
|
+
<blah>c</blah>
|
28
|
+
</root>
|
29
|
+
EOS
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_missing_parameter_fault
|
33
|
+
desc = { 'wsdl_type' => nil, 'is-array' => false, 'is-task' => false }
|
34
|
+
|
35
|
+
assert_raise RuntimeError do
|
36
|
+
check desc, <<-EOS, ['a', 'b', 'c']
|
37
|
+
<soapenv:Fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
|
38
|
+
<faultcode>ClientFaultCode</faultcode>
|
39
|
+
<faultstring>Required parameter selectionSet is missing</faultstring>
|
40
|
+
</soapenv:Fault>
|
41
|
+
EOS
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_invalid_argument_fault
|
46
|
+
desc = { 'wsdl_type' => nil, 'is-array' => false, 'is-task' => false }
|
47
|
+
|
48
|
+
assert_raise RbVmomi::Fault do
|
49
|
+
begin
|
50
|
+
check desc, <<-EOS, nil
|
51
|
+
<soapenv:Fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
|
52
|
+
<faultcode>ServerFaultCode</faultcode>
|
53
|
+
<faultstring>A specified parameter was not correct. ticketType</faultstring>
|
54
|
+
<detail>
|
55
|
+
<InvalidArgumentFault xmlns="urn:vim25" xsi:type="InvalidArgument">
|
56
|
+
<invalidProperty>ticketType</invalidProperty>
|
57
|
+
</InvalidArgumentFault>
|
58
|
+
</detail>
|
59
|
+
</soapenv:Fault>
|
60
|
+
EOS
|
61
|
+
rescue RbVmomi::Fault
|
62
|
+
raise
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
@@ -0,0 +1,208 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'rbvmomi'
|
3
|
+
include RbVmomi
|
4
|
+
|
5
|
+
class SerializationTest < Test::Unit::TestCase
|
6
|
+
def check str, obj, type, array=false
|
7
|
+
@soap = RbVmomi::Soap.new(ns: 'urn:vim25', rev: '4.0')
|
8
|
+
xml = Builder::XmlMarkup.new :indent => 2
|
9
|
+
soap.obj2xml(xml, 'root', type, array, obj)
|
10
|
+
|
11
|
+
puts "expected:"
|
12
|
+
puts str
|
13
|
+
puts
|
14
|
+
puts "got:"
|
15
|
+
puts xml.target!
|
16
|
+
puts
|
17
|
+
|
18
|
+
assert_equal str, xml.target!
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_moref
|
22
|
+
check <<-EOS, VIM.Folder(nil, "ha-folder-host"), "Folder"
|
23
|
+
<root type="Folder">ha-folder-host</root>
|
24
|
+
EOS
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_config
|
28
|
+
cfg = VIM.VirtualMachineConfigSpec(
|
29
|
+
name: 'vm',
|
30
|
+
files: { vmPathName: '[datastore1]' },
|
31
|
+
guestId: 'otherGuest64',
|
32
|
+
numCPUs: 2,
|
33
|
+
memoryMB: 3072,
|
34
|
+
deviceChange: [
|
35
|
+
{
|
36
|
+
operation: :add,
|
37
|
+
device: VIM.VirtualLsiLogicController(
|
38
|
+
key: 1000,
|
39
|
+
busNumber: 0,
|
40
|
+
sharedBus: :noSharing,
|
41
|
+
)
|
42
|
+
}, VIM.VirtualDeviceConfigSpec(
|
43
|
+
operation: VIM.VirtualDeviceConfigSpecOperation(:add),
|
44
|
+
fileOperation: VIM.VirtualDeviceConfigSpecFileOperation(:create),
|
45
|
+
device: VIM.VirtualDisk(
|
46
|
+
key: 0,
|
47
|
+
backing: VIM.VirtualDiskFlatVer2BackingInfo(
|
48
|
+
fileName: '[datastore1]',
|
49
|
+
diskMode: :persistent,
|
50
|
+
thinProvisioned: true,
|
51
|
+
),
|
52
|
+
controllerKey: 1000,
|
53
|
+
unitNumber: 0,
|
54
|
+
capacityInKB: 4000000,
|
55
|
+
)
|
56
|
+
), {
|
57
|
+
operation: :add,
|
58
|
+
device: VIM.VirtualE1000(
|
59
|
+
key: 0,
|
60
|
+
deviceInfo: {
|
61
|
+
label: 'Network Adapter 1',
|
62
|
+
summary: 'VM Network',
|
63
|
+
},
|
64
|
+
backing: VIM.VirtualEthernetCardNetworkBackingInfo(
|
65
|
+
deviceName: 'VM Network',
|
66
|
+
),
|
67
|
+
addressType: 'generated'
|
68
|
+
)
|
69
|
+
}
|
70
|
+
],
|
71
|
+
extraConfig: [
|
72
|
+
{
|
73
|
+
key: 'bios.bootOrder',
|
74
|
+
value: 'ethernet0'
|
75
|
+
}
|
76
|
+
]
|
77
|
+
)
|
78
|
+
check <<-EOS, cfg, "VirtualMachineConfigSpec"
|
79
|
+
<root xsi:type="VirtualMachineConfigSpec">
|
80
|
+
<name>vm</name>
|
81
|
+
<guestId>otherGuest64</guestId>
|
82
|
+
<files xsi:type="VirtualMachineFileInfo">
|
83
|
+
<vmPathName>[datastore1]</vmPathName>
|
84
|
+
</files>
|
85
|
+
<numCPUs>2</numCPUs>
|
86
|
+
<memoryMB>3072</memoryMB>
|
87
|
+
<deviceChange xsi:type="VirtualDeviceConfigSpec">
|
88
|
+
<operation>add</operation>
|
89
|
+
<device xsi:type="VirtualLsiLogicController">
|
90
|
+
<key>1000</key>
|
91
|
+
<busNumber>0</busNumber>
|
92
|
+
<sharedBus>noSharing</sharedBus>
|
93
|
+
</device>
|
94
|
+
</deviceChange>
|
95
|
+
<deviceChange xsi:type="VirtualDeviceConfigSpec">
|
96
|
+
<operation>add</operation>
|
97
|
+
<fileOperation>create</fileOperation>
|
98
|
+
<device xsi:type="VirtualDisk">
|
99
|
+
<key>0</key>
|
100
|
+
<backing xsi:type="VirtualDiskFlatVer2BackingInfo">
|
101
|
+
<fileName>[datastore1]</fileName>
|
102
|
+
<diskMode>persistent</diskMode>
|
103
|
+
<thinProvisioned>1</thinProvisioned>
|
104
|
+
</backing>
|
105
|
+
<controllerKey>1000</controllerKey>
|
106
|
+
<unitNumber>0</unitNumber>
|
107
|
+
<capacityInKB>4000000</capacityInKB>
|
108
|
+
</device>
|
109
|
+
</deviceChange>
|
110
|
+
<deviceChange xsi:type="VirtualDeviceConfigSpec">
|
111
|
+
<operation>add</operation>
|
112
|
+
<device xsi:type="VirtualE1000">
|
113
|
+
<key>0</key>
|
114
|
+
<deviceInfo xsi:type="Description">
|
115
|
+
<label>Network Adapter 1</label>
|
116
|
+
<summary>VM Network</summary>
|
117
|
+
</deviceInfo>
|
118
|
+
<backing xsi:type="VirtualEthernetCardNetworkBackingInfo">
|
119
|
+
<deviceName>VM Network</deviceName>
|
120
|
+
</backing>
|
121
|
+
<addressType>generated</addressType>
|
122
|
+
</device>
|
123
|
+
</deviceChange>
|
124
|
+
<extraConfig xsi:type="OptionValue">
|
125
|
+
<key>bios.bootOrder</key>
|
126
|
+
<value xsi:type="xsd:string">ethernet0</value>
|
127
|
+
</extraConfig>
|
128
|
+
</root>
|
129
|
+
EOS
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_nil_field
|
133
|
+
obj = VIM.OptionValue(key: 'foo', value: nil)
|
134
|
+
check <<-EOS, obj, "OptionValue"
|
135
|
+
<root xsi:type="OptionValue">
|
136
|
+
<key>foo</key>
|
137
|
+
</root>
|
138
|
+
EOS
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_string_array
|
142
|
+
obj = ["foo", "bar", "baz"]
|
143
|
+
check <<-EOS, obj, "xsd:string", true
|
144
|
+
<root>foo</root>
|
145
|
+
<root>bar</root>
|
146
|
+
<root>baz</root>
|
147
|
+
EOS
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_int_array
|
151
|
+
obj = [1,2,3]
|
152
|
+
check <<-EOS, obj, "xsd:int", true
|
153
|
+
<root>1</root>
|
154
|
+
<root>2</root>
|
155
|
+
<root>3</root>
|
156
|
+
EOS
|
157
|
+
end
|
158
|
+
|
159
|
+
def test_boolean_array
|
160
|
+
obj = [true,false,true]
|
161
|
+
check <<-EOS, obj, "xsd:boolean", true
|
162
|
+
<root>1</root>
|
163
|
+
<root>0</root>
|
164
|
+
<root>1</root>
|
165
|
+
EOS
|
166
|
+
end
|
167
|
+
|
168
|
+
def test_float_array
|
169
|
+
obj = [0.0,1.5,3.14]
|
170
|
+
check <<-EOS, obj, "xsd:float", true
|
171
|
+
<root>0.0</root>
|
172
|
+
<root>1.5</root>
|
173
|
+
<root>3.14</root>
|
174
|
+
EOS
|
175
|
+
end
|
176
|
+
|
177
|
+
def test_binary
|
178
|
+
obj = "\x00foo\x01bar\x02baz"
|
179
|
+
check <<-EOS, obj, 'xsd:base64Binary'
|
180
|
+
<root>AGZvbwFiYXICYmF6</root>
|
181
|
+
EOS
|
182
|
+
end
|
183
|
+
|
184
|
+
def test_property_spec
|
185
|
+
interested = %w(info.progress info.state info.entityName info.error)
|
186
|
+
tasks = [VIM::Task.new(nil, 'task-11')]
|
187
|
+
obj = {
|
188
|
+
:propSet => [{ :type => 'Task', :all => false, :pathSet => interested }],
|
189
|
+
:objectSet => tasks.map { |x| { :obj => x } },
|
190
|
+
}
|
191
|
+
check <<-EOS, obj, 'PropertyFilterSpec'
|
192
|
+
<root xsi:type="PropertyFilterSpec">
|
193
|
+
<propSet xsi:type="PropertySpec">
|
194
|
+
<type>Task</type>
|
195
|
+
<all>0</all>
|
196
|
+
<pathSet>info.progress</pathSet>
|
197
|
+
<pathSet>info.state</pathSet>
|
198
|
+
<pathSet>info.entityName</pathSet>
|
199
|
+
<pathSet>info.error</pathSet>
|
200
|
+
</propSet>
|
201
|
+
<objectSet xsi:type="ObjectSpec">
|
202
|
+
<obj type="Task">task-11</obj>
|
203
|
+
</objectSet>
|
204
|
+
</root>
|
205
|
+
EOS
|
206
|
+
|
207
|
+
end
|
208
|
+
end
|
data/vmodl.tc
ADDED
Binary file
|
metadata
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rbvmomi
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 21
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 1.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Rich Lane
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-11-09 00:00:00 -08:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: nokogiri
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 5
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 4
|
33
|
+
- 1
|
34
|
+
version: 1.4.1
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: builder
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 3
|
46
|
+
segments:
|
47
|
+
- 0
|
48
|
+
version: "0"
|
49
|
+
type: :runtime
|
50
|
+
version_requirements: *id002
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: trollop
|
53
|
+
prerelease: false
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 3
|
60
|
+
segments:
|
61
|
+
- 0
|
62
|
+
version: "0"
|
63
|
+
type: :runtime
|
64
|
+
version_requirements: *id003
|
65
|
+
- !ruby/object:Gem::Dependency
|
66
|
+
name: tokyocabinet
|
67
|
+
prerelease: false
|
68
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
hash: 3
|
74
|
+
segments:
|
75
|
+
- 0
|
76
|
+
version: "0"
|
77
|
+
type: :runtime
|
78
|
+
version_requirements: *id004
|
79
|
+
description:
|
80
|
+
email: rlane@vmware.com
|
81
|
+
executables: []
|
82
|
+
|
83
|
+
extensions: []
|
84
|
+
|
85
|
+
extra_rdoc_files:
|
86
|
+
- LICENSE
|
87
|
+
- README.md
|
88
|
+
files:
|
89
|
+
- .gitignore
|
90
|
+
- LICENSE
|
91
|
+
- README.md
|
92
|
+
- Rakefile
|
93
|
+
- VERSION
|
94
|
+
- devel/analyze-vim-declarations.rb
|
95
|
+
- devel/analyze-xml.rb
|
96
|
+
- lib/rbvmomi.rb
|
97
|
+
- lib/rbvmomi/extensions.rb
|
98
|
+
- lib/rbvmomi/profile.rb
|
99
|
+
- lib/rbvmomi/trollop.rb
|
100
|
+
- lib/rbvmomi/types.rb
|
101
|
+
- lib/trivial_soap.rb
|
102
|
+
- test/runner.rb
|
103
|
+
- test/test.rb
|
104
|
+
- test/test_deserialization.rb
|
105
|
+
- test/test_emit_request.rb
|
106
|
+
- test/test_parse_response.rb
|
107
|
+
- test/test_serialization.rb
|
108
|
+
- vmodl.tc
|
109
|
+
has_rdoc: true
|
110
|
+
homepage: https://github.com/rlane/rbvmomi
|
111
|
+
licenses: []
|
112
|
+
|
113
|
+
post_install_message:
|
114
|
+
rdoc_options:
|
115
|
+
- --charset=UTF-8
|
116
|
+
require_paths:
|
117
|
+
- lib
|
118
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
119
|
+
none: false
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
hash: 49
|
124
|
+
segments:
|
125
|
+
- 1
|
126
|
+
- 9
|
127
|
+
- 1
|
128
|
+
version: 1.9.1
|
129
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
|
+
none: false
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
hash: 3
|
135
|
+
segments:
|
136
|
+
- 0
|
137
|
+
version: "0"
|
138
|
+
requirements: []
|
139
|
+
|
140
|
+
rubyforge_project:
|
141
|
+
rubygems_version: 1.3.7
|
142
|
+
signing_key:
|
143
|
+
specification_version: 3
|
144
|
+
summary: Ruby interface to the VI API
|
145
|
+
test_files:
|
146
|
+
- test/runner.rb
|
147
|
+
- test/test_serialization.rb
|
148
|
+
- test/test.rb
|
149
|
+
- test/test_deserialization.rb
|
150
|
+
- test/test_parse_response.rb
|
151
|
+
- test/test_emit_request.rb
|