rbvmomi 1.8.2 → 2.4.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.
Files changed (79) hide show
  1. checksums.yaml +5 -13
  2. data/LICENSE +1 -1
  3. data/README.md +114 -0
  4. data/{bin → exe}/rbvmomish +5 -5
  5. data/lib/rbvmomi.rb +11 -7
  6. data/lib/rbvmomi/basic_types.rb +9 -1
  7. data/lib/rbvmomi/connection.rb +11 -9
  8. data/lib/rbvmomi/deserialization.rb +4 -3
  9. data/lib/rbvmomi/fault.rb +3 -1
  10. data/lib/rbvmomi/{trollop.rb → optimist.rb} +10 -8
  11. data/lib/rbvmomi/pbm.rb +3 -1
  12. data/lib/rbvmomi/sms.rb +3 -1
  13. data/lib/rbvmomi/sms/SmsStorageManager.rb +3 -0
  14. data/lib/rbvmomi/sso.rb +313 -0
  15. data/lib/rbvmomi/trivial_soap.rb +19 -11
  16. data/lib/rbvmomi/type_loader.rb +4 -2
  17. data/lib/rbvmomi/utils/admission_control.rb +22 -19
  18. data/lib/rbvmomi/utils/deploy.rb +18 -14
  19. data/lib/rbvmomi/utils/leases.rb +4 -1
  20. data/lib/rbvmomi/utils/perfdump.rb +4 -1
  21. data/lib/rbvmomi/version.rb +6 -0
  22. data/lib/rbvmomi/vim.rb +41 -12
  23. data/lib/rbvmomi/vim/ComputeResource.rb +3 -0
  24. data/lib/rbvmomi/vim/Datacenter.rb +8 -0
  25. data/lib/rbvmomi/vim/Datastore.rb +5 -1
  26. data/lib/rbvmomi/vim/DynamicTypeMgrAllTypeInfo.rb +3 -0
  27. data/lib/rbvmomi/vim/DynamicTypeMgrDataTypeInfo.rb +4 -1
  28. data/lib/rbvmomi/vim/DynamicTypeMgrManagedTypeInfo.rb +15 -7
  29. data/lib/rbvmomi/vim/Folder.rb +19 -12
  30. data/lib/rbvmomi/vim/HostSystem.rb +5 -2
  31. data/lib/rbvmomi/vim/ManagedEntity.rb +3 -0
  32. data/lib/rbvmomi/vim/ManagedObject.rb +4 -1
  33. data/lib/rbvmomi/vim/ObjectContent.rb +3 -0
  34. data/lib/rbvmomi/vim/ObjectUpdate.rb +3 -0
  35. data/lib/rbvmomi/vim/OvfManager.rb +6 -2
  36. data/lib/rbvmomi/vim/PerfCounterInfo.rb +3 -1
  37. data/lib/rbvmomi/vim/PerformanceManager.rb +3 -0
  38. data/lib/rbvmomi/vim/PropertyCollector.rb +3 -0
  39. data/lib/rbvmomi/vim/ReflectManagedMethodExecuter.rb +5 -2
  40. data/lib/rbvmomi/vim/ResourcePool.rb +3 -0
  41. data/lib/rbvmomi/vim/ServiceInstance.rb +3 -0
  42. data/lib/rbvmomi/vim/Task.rb +3 -0
  43. data/lib/rbvmomi/vim/VirtualMachine.rb +13 -12
  44. data/vmodl.db +0 -0
  45. metadata +100 -63
  46. data/.yardopts +0 -6
  47. data/README.rdoc +0 -78
  48. data/Rakefile +0 -45
  49. data/VERSION +0 -1
  50. data/devel/analyze-vim-declarations.rb +0 -213
  51. data/devel/analyze-xml.rb +0 -46
  52. data/devel/benchmark.rb +0 -117
  53. data/devel/collisions.rb +0 -18
  54. data/devel/merge-internal-vmodl.rb +0 -59
  55. data/devel/merge-manual-vmodl.rb +0 -32
  56. data/examples/annotate.rb +0 -54
  57. data/examples/cached_ovf_deploy.rb +0 -120
  58. data/examples/clone_vm.rb +0 -84
  59. data/examples/create_vm-1.9.rb +0 -93
  60. data/examples/create_vm.rb +0 -93
  61. data/examples/extraConfig.rb +0 -54
  62. data/examples/lease_tool.rb +0 -102
  63. data/examples/logbundle.rb +0 -63
  64. data/examples/logtail.rb +0 -60
  65. data/examples/nfs_datastore.rb +0 -95
  66. data/examples/power.rb +0 -59
  67. data/examples/readme-1.rb +0 -35
  68. data/examples/readme-2.rb +0 -51
  69. data/examples/run.sh +0 -41
  70. data/examples/screenshot.rb +0 -48
  71. data/examples/vdf.rb +0 -81
  72. data/examples/vm_drs_behavior.rb +0 -76
  73. data/test/test_deserialization.rb +0 -383
  74. data/test/test_emit_request.rb +0 -128
  75. data/test/test_exceptions.rb +0 -14
  76. data/test/test_helper.rb +0 -14
  77. data/test/test_misc.rb +0 -24
  78. data/test/test_parse_response.rb +0 -69
  79. data/test/test_serialization.rb +0 -311
data/.yardopts DELETED
@@ -1,6 +0,0 @@
1
- --title "RbVmomi - a Ruby interface to the vSphere API"
2
- --no-private
3
- --readme README.rdoc
4
- lib/rbvmomi/vim.rb
5
- lib/rbvmomi/vim/*.rb
6
- lib/rbvmomi/trollop.rb
data/README.rdoc DELETED
@@ -1,78 +0,0 @@
1
- = RbVmomi
2
-
3
- == Introduction
4
-
5
- RbVmomi is a Ruby interface to the vSphere API. Like the Perl and Java SDKs,
6
- you can use it to manage ESX and VirtualCenter servers. The current release
7
- supports the vSphere 5.0 API. RbVmomi specific documentation is
8
- online[http://rdoc.info/github/rlane/rbvmomi/master/frames] and is meant to
9
- be used alongside the official documentation[http://www.vmware.com/support/developer/vc-sdk/visdk41pubs/ApiReference/index.html].
10
-
11
- == Installation
12
-
13
- gem install rbvmomi
14
-
15
- == Usage
16
-
17
- A simple example of turning on a VM:
18
-
19
- require 'rbvmomi'
20
- vim = RbVmomi::VIM.connect host: 'foo', user: 'bar', password: 'baz'
21
- dc = vim.serviceInstance.find_datacenter("mydatacenter") or fail "datacenter not found"
22
- vm = dc.find_vm("myvm") or fail "VM not found"
23
- vm.PowerOnVM_Task.wait_for_completion
24
-
25
- This code uses several RbVmomi extensions to the vSphere API for concision. The
26
- expanded snippet below uses only standard API calls and should be familiar to
27
- users of the Java SDK:
28
-
29
- require 'rbvmomi'
30
- vim = RbVmomi::VIM.connect host: 'foo', user: 'bar', password: 'baz'
31
- rootFolder = vim.serviceInstance.content.rootFolder
32
- dc = rootFolder.childEntity.grep(RbVmomi::VIM::Datacenter).find { |x| x.name == "mydatacenter" } or fail "datacenter not found"
33
- vm = dc.vmFolder.childEntity.grep(RbVmomi::VIM::VirtualMachine).find { |x| x.name == "myvm" } or fail "VM not found"
34
- task = vm.PowerOnVM_Task
35
- filter = vim.propertyCollector.CreateFilter(
36
- spec: {
37
- propSet: [{ type: 'Task', all: false, pathSet: ['info.state']}],
38
- objectSet: [{ obj: task }]
39
- },
40
- partialUpdates: false
41
- )
42
- ver = ''
43
- while true
44
- result = vim.propertyCollector.WaitForUpdates(version: ver)
45
- ver = result.version
46
- break if ['success', 'error'].member? task.info.state
47
- end
48
- filter.DestroyPropertyFilter
49
- raise task.info.error if task.info.state == 'error'
50
-
51
- As you can see, the extensions RbVmomi adds can dramatically decrease the code
52
- needed to perform simple tasks while still letting you use the full power of
53
- the API when necessary. RbVmomi extensions are often more efficient than a
54
- naive implementation; for example, the find_vm method on VIM::Datacenter used
55
- in the first example uses the SearchIndex for fast lookups.
56
-
57
- A few important points:
58
-
59
- * All class, method, parameter, and property names match the official documentation[http://www.vmware.com/support/developer/vc-sdk/visdk41pubs/ApiReference/index.html].
60
- * Properties are exposed as accessor methods.
61
- * Data object types can usually be inferred from context, so you may use a hash instead.
62
- * Enumeration values are simply strings.
63
- * Example code is included in the examples/ directory.
64
- * A set of helper methods for Trollop is included to speed up development of
65
- command line apps. See the included examples for usage.
66
- * If you don't have trusted SSL certificates installed on the host you're
67
- connecting to, you'll get an +OpenSSL::SSL::SSLError+ "certificate verify failed".
68
- You can work around this by using the +:insecure+ option to +RbVmomi::VIM.connect+.
69
- * This is a side project of a VMware employee and is entirely unsupported by VMware.
70
-
71
- Built-in extensions are under +lib/rbvmomi/vim/+. You are encouraged to
72
- reopen VIM classes in your applications and add extensions of your own. If you
73
- write something generally useful please send it to me and I'll add it in.
74
-
75
- == Development
76
-
77
- Fork the project on Github and send me a merge request, or send a patch to
78
- rlane@vmware.com. RbVmomi developers hang out in #rbvmomi on Freenode.
data/Rakefile DELETED
@@ -1,45 +0,0 @@
1
- require 'rake/testtask'
2
- require 'rdoc/task'
3
- require 'yard'
4
-
5
- begin
6
- require 'jeweler'
7
- Jeweler::Tasks.new do |gem|
8
- gem.name = "rbvmomi"
9
- gem.summary = "Ruby interface to the VMware vSphere API"
10
- #gem.description = ""
11
- gem.email = "rlane@vmware.com"
12
- gem.homepage = "https://github.com/vmware/rbvmomi"
13
- gem.authors = ["Rich Lane", "Christian Dickmann"]
14
- gem.add_dependency 'nokogiri', '>= 1.4.1'
15
- gem.add_dependency 'builder'
16
- gem.add_dependency 'trollop'
17
- gem.required_ruby_version = '>= 1.8.7'
18
- gem.files.include 'vmodl.db'
19
- gem.files.include '.yardopts'
20
- end
21
- rescue LoadError
22
- puts "Jeweler not available. Install it with: gem install jeweler"
23
- end
24
-
25
- Rake::TestTask.new do |t|
26
- t.libs << "test"
27
- t.test_files = FileList['test/test_*.rb']
28
- t.verbose = true
29
- end
30
-
31
- YARD::Rake::YardocTask.new
32
-
33
- begin
34
- require 'rcov/rcovtask'
35
- desc 'Measures test coverage using rcov'
36
- Rcov::RcovTask.new do |rcov|
37
- rcov.pattern = 'test/test_*.rb'
38
- rcov.output_dir = 'coverage'
39
- rcov.verbose = true
40
- rcov.libs << "test"
41
- rcov.rcov_opts << '--exclude "gems/*"'
42
- end
43
- rescue LoadError
44
- puts "Rcov not available. Install it with: gem install rcov"
45
- end
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 1.8.2
@@ -1,213 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'nokogiri'
3
- require 'pp'
4
- # :usage => analyze-vim-declarations.rb vim-declarations.xml foo-declarations.xml vmodl.db
5
-
6
- XML_FNS = ARGV[0...-1]
7
- abort "must specify path to vim-declarations.xml" if XML_FNS.empty?
8
- OUT_FN = ARGV[-1] or abort "must specify path to output database"
9
-
10
- XML_FNS.each do |x|
11
- abort "XML file #{x} does not exist" unless File.exists? x
12
- end
13
-
14
- TYPES = {}
15
- VERSIONS = []
16
-
17
- ID2NAME = Hash.new { |h,k| fail "unknown type-id #{k.inspect}" }
18
-
19
- ID2NAME.merge!({
20
- 'java.lang.String' => 'xsd:string',
21
- 'BOOLEAN' => 'xsd:boolean',
22
- 'BYTE' => 'xsd:byte',
23
- 'SHORT' => 'xsd:short',
24
- 'INT' => 'xsd:int',
25
- 'LONG' => 'xsd:long',
26
- 'FLOAT' => 'xsd:float',
27
- 'DOUBLE' => 'xsd:double',
28
- 'vmodl.DateTime' => 'xsd:dateTime',
29
- 'vmodl.Binary' => 'xsd:base64Binary',
30
- 'vmodl.Any' => 'xsd:anyType',
31
- 'vmodl.URI' => 'xsd:anyURI',
32
- 'void' => nil,
33
- })
34
-
35
- %w(DataObject ManagedObject MethodFault MethodName
36
- PropertyPath RuntimeFault TypeName).each do |x|
37
- ID2NAME['vmodl.' + x] = x
38
- end
39
-
40
- def handle_data_object node
41
- if TYPES[node['name']]
42
- puts "Type #{node['name']} already exists"
43
- return
44
- end
45
-
46
- ID2NAME[node['type-id']] = node['name']
47
- TYPES[node['name']] = {
48
- 'kind' => 'data',
49
- 'base-type-id' => node['base-type-id'],
50
- 'props' => node.children.select { |x| x.name == 'property' }.map do |property|
51
- {
52
- 'name' => property['name'],
53
- 'type-id-ref' => property['type-id-ref'],
54
- 'is-optional' => property['is-optional'] ? true : false,
55
- 'is-array' => property['is-array'] ? true : false,
56
- 'version-id-ref' => property['version-id-ref'],
57
- }
58
- end
59
- }
60
- end
61
-
62
- def handle_managed_object node
63
- if TYPES[node['name']]
64
- puts "Type #{node['name']} already exists"
65
- return
66
- end
67
- ID2NAME[node['type-id']] = node['name']
68
- TYPES[node['name']] = {
69
- 'kind' => 'managed',
70
- 'base-type-id' => node['base-type-id'],
71
- 'props' => node.children.select { |x| x.name == 'property' }.map do |property|
72
- {
73
- 'name' => property['name'],
74
- 'type-id-ref' => property['type-id-ref'],
75
- 'is-optional' => property['is-optional'] ? true : false,
76
- 'is-array' => property['is-array'] ? true : false,
77
- 'version-id-ref' => property['version-id-ref'],
78
- }
79
- end,
80
- 'methods' => Hash[
81
- node.children.select { |x| x.name == 'method' }.map do |method|
82
- [method['is-task'] ? "#{method['name']}_Task" : method['name'],
83
- {
84
- 'params' => method.children.select { |x| x.name == 'parameter' }.map do |param|
85
- {
86
- 'name' => param['name'],
87
- 'type-id-ref' => param['type-id-ref'],
88
- 'is-array' => param['is-array'] ? true : false,
89
- 'is-optional' => param['is-optional'] ? true : false,
90
- 'version-id-ref' => param['version-id-ref'],
91
- }
92
- end,
93
- 'result' => {
94
- 'type-id-ref' => method['type-id-ref'],
95
- 'is-array' => method['is-array'] ? true : false,
96
- 'is-optional' => method['is-optional'] ? true : false,
97
- 'is-task' => method['is-task'] ? true : false,
98
- 'version-id-ref' => method['version-id-ref'],
99
- }
100
- }
101
- ]
102
- end
103
- ]
104
- }
105
- end
106
-
107
- def handle_enum node
108
- if TYPES[node['name']]
109
- puts "Type #{node['name']} already exists"
110
- return
111
- end
112
-
113
- ID2NAME[node['type-id']] = node['name']
114
- TYPES[node['name']] = {
115
- 'kind' => 'enum',
116
- 'values' => node.children.map { |child| child['name'] },
117
- }
118
- end
119
-
120
- def handle_fault node
121
- handle_data_object node
122
- end
123
-
124
- def handle_version x
125
- attrs = %w(display-name name service-namespace type-id version-id vmodl-name)
126
- h = Hash[attrs.map { |k| [k, x[k]] }]
127
- h['compatible'] = x.children.select(&:element?).map { |y| y.text }
128
- VERSIONS << h
129
- end
130
-
131
- XML_FNS.each do |fn|
132
- puts "parsing #{fn} ..."
133
- xml_str = File.read(fn)
134
- xml_str = xml_str.gsub(/\<description-html\>(.*?)\<\/description-html\>/m, "")
135
- xml = Nokogiri.parse(xml_str, nil, nil, Nokogiri::XML::ParseOptions::NOBLANKS)
136
- xml.root.at('enums').children.each { |x| handle_enum x }
137
- xml.root.at('managed-objects').children.each { |x| handle_managed_object x }
138
- xml.root.at('data-objects').children.each { |x| handle_data_object x }
139
- xml.root.at('faults').children.each { |x| handle_fault x }
140
- #xml.root.at('definitions').at('version-types').children.each { |x| handle_version x }
141
- end
142
-
143
- #pp ID2NAME
144
-
145
- munge_fault = lambda { |x| true }
146
-
147
- TYPES.each do |k,t|
148
- case t['kind']
149
- when 'data'
150
- t['wsdl_base'] = t['base-type-id'] ? ID2NAME[t['base-type-id']] : 'DataObject'
151
- t.delete 'base-type-id'
152
- t['props'].each do |x|
153
- x['wsdl_type'] = ID2NAME[x['type-id-ref']]
154
- x.delete 'type-id-ref'
155
- munge_fault[x]
156
- end
157
- when 'managed'
158
- t['wsdl_base'] = t['base-type-id'] ? ID2NAME[t['base-type-id']] : 'ManagedObject'
159
- t.delete 'base-type-id'
160
- t['props'].each do |x|
161
- x['wsdl_type'] = ID2NAME[x['type-id-ref']]
162
- x.delete 'type-id-ref'
163
- munge_fault[x]
164
- end
165
- t['methods'].each do |mName,x|
166
- if y = x['result']
167
- begin
168
- y['wsdl_type'] = ID2NAME[y['type-id-ref']]
169
- rescue Exception => ex
170
- pp ex
171
- end
172
- y.delete 'type-id-ref'
173
- munge_fault[y]
174
- end
175
- x['params'].each do |r|
176
- begin
177
- r['wsdl_type'] = ID2NAME[r['type-id-ref']]
178
- rescue Exception => ex
179
- pp ex
180
- end
181
- r.delete 'type-id-ref'
182
- munge_fault[r]
183
- end
184
- end
185
- when 'enum'
186
- else fail
187
- end
188
- end
189
-
190
- db = {}
191
-
192
- TYPES.each do |k,t|
193
- db[k] = t
194
- end
195
-
196
- db['_typenames'] = TYPES.keys
197
- db['_versions'] = VERSIONS
198
-
199
- File.open(OUT_FN, 'w') { |io| Marshal.dump db, io }
200
-
201
- if filename = ENV['VERSION_GRAPH']
202
- File.open(filename, 'w') do |io|
203
- io.puts "digraph versions\n{"
204
- VERSIONS.each do |h|
205
- io.puts "\"#{h['vmodl-name']}\" [label=\"#{h['vmodl-name']} (#{h['version-id']})\"]"
206
- h['compatible'].each do |x|
207
- x =~ /^interface / or fail x
208
- io.puts "\"#{h['vmodl-name']}\" -> \"#{$'}\""
209
- end
210
- end
211
- io.puts "}\n"
212
- end
213
- end
data/devel/analyze-xml.rb DELETED
@@ -1,46 +0,0 @@
1
- require 'nokogiri'
2
-
3
- # removes line breaks and whitespace between xml nodes.
4
- def prepare_xml(xml)
5
- xml = xml.gsub(/\n+/, "")
6
- xml = xml.gsub(/(>)\s*(<)/, '\1\2')
7
- end
8
-
9
- def analyze_xml x, tree
10
- subtree = (tree[x.name] ||= { :attributes => [], :min_occur => nil, :max_occur => nil })
11
- attrs = x.attributes.keys.sort
12
- subtree[:attributes] << attrs unless subtree[:attributes].member? attrs
13
-
14
- child_occurs = Hash.new 0
15
- x.children.select(&:element?).each do |c|
16
- child_occurs[c.name] += 1
17
- analyze_xml c, subtree
18
- end
19
-
20
- subtree.select { |k,v| k.is_a? String }.each do |k,v|
21
- v[:min_occur] = [v[:min_occur], child_occurs[k]].compact.min
22
- v[:max_occur] = [v[:max_occur], child_occurs[k]].compact.max
23
- end
24
- end
25
-
26
- def print_tree tree, indent=0
27
- tree.select { |k,v| k.is_a? String }.sort.each do |k,v|
28
- attrs = v[:attributes] || []
29
- min, max = v[:min_occur], v[:max_occur]
30
- numsym = if min == 0 and max == 0 then fail
31
- elsif min == 0 and max == 1 then '?'
32
- elsif min == 0 then '*'
33
- elsif min == 1 and max == 1 then ''
34
- else '+'
35
- end
36
- puts "#{' '*indent}#{k}#{numsym}: #{attrs.sort.map { |a| "[#{a * ' '}]"} * ', '} {#{min},#{max}}"
37
- print_tree v, (indent+1)
38
- end
39
- end
40
-
41
- tree = {}
42
- ARGV.each do |fn|
43
- nk = Nokogiri(prepare_xml(File.read fn))
44
- analyze_xml nk.root, tree
45
- end
46
- print_tree tree
data/devel/benchmark.rb DELETED
@@ -1,117 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'tempfile'
3
-
4
- if ENV['RBVMOMI_COVERAGE'] == '1'
5
- require 'simplecov'
6
- SimpleCov.start
7
- end
8
-
9
- require 'rbvmomi'
10
- require 'rbvmomi/deserialization'
11
- require 'benchmark'
12
- require 'libxml'
13
-
14
- NS_XSI = 'http://www.w3.org/2001/XMLSchema-instance'
15
-
16
- VIM = RbVmomi::VIM
17
- $conn = VIM.new(:ns => 'urn:vim25', :rev => '4.0')
18
- raw = File.read(ARGV[0])
19
-
20
- def diff a, b
21
- a_io = Tempfile.new 'rbvmomi-diff-a'
22
- b_io = Tempfile.new 'rbvmomi-diff-b'
23
- PP.pp a, a_io
24
- PP.pp b, b_io
25
- a_io.close
26
- b_io.close
27
- system("diff -u #{a_io.path} #{b_io.path}")
28
- a_io.unlink
29
- b_io.unlink
30
- end
31
-
32
- begin
33
- deserializer = RbVmomi::OldDeserializer.new($conn)
34
- end_time = Time.now + 1
35
- n = 0
36
- while n == 0 or end_time > Time.now
37
- deserializer.deserialize Nokogiri::XML(raw).root
38
- n += 1
39
- end
40
- N = n*10
41
- end
42
-
43
- puts "iterations: #{N}"
44
-
45
- parsed_nokogiri = Nokogiri::XML(raw)
46
- parsed_libxml = LibXML::XML::Parser.string(raw).parse
47
-
48
- if true
49
- nokogiri_xml = parsed_nokogiri.root
50
- libxml_xml = parsed_libxml.root
51
-
52
- old_nokogiri_result = RbVmomi::OldDeserializer.new($conn).deserialize nokogiri_xml
53
- new_nokogiri_result = RbVmomi::NewDeserializer.new($conn).deserialize nokogiri_xml
54
- new_libxml_result = RbVmomi::NewDeserializer.new($conn).deserialize libxml_xml
55
-
56
- if new_nokogiri_result != old_nokogiri_result
57
- puts "new_nokogiri_result doesnt match old_nokogiri_result"
58
- puts "old_nokogiri_result:"
59
- pp old_nokogiri_result
60
- puts "new_nokogiri_result:"
61
- pp new_nokogiri_result
62
- puts "diff:"
63
- diff old_nokogiri_result, new_nokogiri_result
64
- exit 1
65
- end
66
-
67
- if new_libxml_result != old_nokogiri_result
68
- puts "new_libxml_result doesnt match old_nokogiri_result"
69
- puts "old_nokogiri_result:"
70
- pp old_nokogiri_result
71
- puts "new_libxml_result:"
72
- pp new_libxml_result
73
- puts "diff:"
74
- diff old_nokogiri_result, new_libxml_result
75
- exit 1
76
- end
77
-
78
- puts "all results match"
79
- end
80
-
81
- Benchmark.bmbm do|b|
82
- GC.start
83
- b.report("nokogiri parsing") do
84
- N.times { Nokogiri::XML(raw) }
85
- end
86
-
87
- GC.start
88
- b.report("libxml parsing") do
89
- N.times do
90
- LibXML::XML::Parser.string(raw).parse
91
- end
92
- end
93
-
94
- GC.start
95
- b.report("old deserialization (nokogiri)") do
96
- deserializer = RbVmomi::OldDeserializer.new($conn)
97
- N.times do
98
- deserializer.deserialize Nokogiri::XML(raw).root
99
- end
100
- end
101
-
102
- GC.start
103
- b.report("new deserialization (nokogiri)") do
104
- deserializer = RbVmomi::NewDeserializer.new($conn)
105
- N.times do
106
- deserializer.deserialize Nokogiri::XML(raw).root
107
- end
108
- end
109
-
110
- GC.start
111
- b.report("new deserialization (libxml)") do
112
- deserializer = RbVmomi::NewDeserializer.new($conn)
113
- N.times do
114
- deserializer.deserialize LibXML::XML::Parser.string(raw).parse.root
115
- end
116
- end
117
- end