virtualbox 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.0
1
+ 0.5.1
@@ -14,6 +14,16 @@ module VirtualBox
14
14
  @@vboxmanage = "VBoxManage"
15
15
 
16
16
  class <<self
17
+ # Returns a string of the version of VirtualBox installed, or nil if
18
+ # it can't detect VirtualBox.
19
+ #
20
+ # @return [String]
21
+ def version
22
+ result = execute("#{@@vboxmanage} --version")
23
+ return nil unless Command.success?
24
+ result.chomp
25
+ end
26
+
17
27
  # Reads the XML file and returns a Nokogiri document. Reads the XML data
18
28
  # from the specified file and returns a Nokogiri document.
19
29
  #
@@ -305,11 +305,7 @@ module VirtualBox
305
305
  def load_attribute(name)
306
306
  info = self.class.raw_info(@original_name)
307
307
 
308
- if name == :state
309
- # Simply force a state reload, and it'll write the attribute up
310
- write_attribute(:state, info[:vmstate])
311
- end
312
-
308
+ write_attribute(:state, info[:vmstate]) if name == :state
313
309
  write_attribute(:synthcpu, info[:synthcpu]) unless loaded_attribute?(:synthcpu)
314
310
  end
315
311
 
@@ -323,6 +319,7 @@ module VirtualBox
323
319
  def state(reload=false)
324
320
  if reload
325
321
  load_attribute(:state)
322
+ clear_dirty!(:state)
326
323
  end
327
324
 
328
325
  read_attribute(:state)
@@ -332,13 +329,21 @@ module VirtualBox
332
329
  # attributes of the virtual machine. If any related attributes were saved
333
330
  # as well (such as storage controllers), those will be saved, too.
334
331
  def save(raise_errors=false)
335
- # Make sure we save the new name first if that was changed, or
336
- # we'll get some inconsistencies later
337
- if name_changed?
338
- save_attribute(:name, name)
339
- @original_name = name
332
+ # First save all the changed attributes in a single batch
333
+ saves = changes.inject([]) do |acc, kv|
334
+ key, values = kv
335
+ acc << ["--#{key}", values[1]]
340
336
  end
341
337
 
338
+ # Flatten to pass into vboxmanage
339
+ saves.flatten!
340
+
341
+ # Save all the attributes in one command
342
+ Command.vboxmanage("modifyvm", @original_name, *saves)
343
+
344
+ # Now clear attributes and call super so relationships are saved
345
+ @original_name = name
346
+ clear_dirty!
342
347
  super()
343
348
 
344
349
  # Force reload
@@ -350,15 +355,6 @@ module VirtualBox
350
355
  return false
351
356
  end
352
357
 
353
- # Saves a single attribute of the virtual machine. This should **not**
354
- # be called except interally. Instead, you're probably looking for {#save}.
355
- #
356
- # **This method typically won't be used except internally.**
357
- def save_attribute(key, value)
358
- Command.vboxmanage("modifyvm", @original_name, "--#{key}", value)
359
- super
360
- end
361
-
362
358
  # Exports a virtual machine. The virtual machine will be exported
363
359
  # to the specified OVF file name. This directory will also have the
364
360
  # `mf` file which contains the file checksums and also the virtual
@@ -3,8 +3,6 @@ begin
3
3
  rescue LoadError
4
4
  # Fallback on doing the resolve at runtime.
5
5
  require "rubygems"
6
- require "bundler"
7
- Bundler.setup
8
6
  end
9
7
 
10
8
  # ruby-debug, not necessary, but useful if we have it
@@ -1,6 +1,35 @@
1
1
  require File.join(File.dirname(__FILE__), '..', 'test_helper')
2
2
 
3
3
  class CommandTest < Test::Unit::TestCase
4
+ context "getting the version" do
5
+ setup do
6
+ VirtualBox::Command.stubs(:execute)
7
+ VirtualBox::Command.stubs(:success?).returns(true)
8
+ end
9
+
10
+ should "run the command with the version flag" do
11
+ VirtualBox::Command.expects(:execute).with("VBoxManage --version").once.returns("7")
12
+ VirtualBox::Command.version
13
+ end
14
+
15
+ should "return the value of the command if it succeeded" do
16
+ version = "3.1.4r1940"
17
+ VirtualBox::Command.expects(:execute).returns(version)
18
+ assert_equal version, VirtualBox::Command.version
19
+ end
20
+
21
+ should "return the value of nil if the command failed" do
22
+ VirtualBox::Command.expects(:success?).returns(false)
23
+ assert_nil VirtualBox::Command.version
24
+ end
25
+
26
+ should "strip the newlines from the result" do
27
+ version = "3.1.4r1940"
28
+ VirtualBox::Command.expects(:execute).returns(version + "\n")
29
+ assert_equal version, VirtualBox::Command.version
30
+ end
31
+ end
32
+
4
33
  context "parsing XML" do
5
34
  should "open the file, parse it, and close the file" do
6
35
  arg = "foo"
@@ -34,6 +34,12 @@ class VMTest < Test::Unit::TestCase
34
34
  assert_equal "on", @vm.state
35
35
  end
36
36
 
37
+ should "never have state as dirty" do
38
+ VirtualBox::VM.expects(:raw_info).returns({ :vmstate => "on" })
39
+ @vm.expects(:clear_dirty!).with(:state).once
40
+ @vm.state(true)
41
+ end
42
+
37
43
  should "provide conveniance methods for determining VM state" do
38
44
  VirtualBox::VM.expects(:raw_info).returns({ :vmstate => "poweroff" })
39
45
  assert_equal "poweroff", @vm.state(true)
@@ -313,16 +319,23 @@ raw
313
319
  end
314
320
 
315
321
  should "save name first if changed, then following values should modify new VM" do
316
- save_seq = sequence("save_seq")
317
322
  new_name = "foo2"
318
- VirtualBox::Command.expects(:vboxmanage).with("modifyvm", @name, "--name", new_name).in_sequence(save_seq)
319
- VirtualBox::Command.expects(:vboxmanage).with("modifyvm", new_name, "--ostype", "Zubuntu").in_sequence(save_seq)
323
+ VirtualBox::Command.expects(:vboxmanage).with("modifyvm", @name, "--ostype", "Zubuntu", "--name", new_name)
320
324
 
321
325
  @vm.name = new_name
322
326
  @vm.ostype = "Zubuntu"
323
327
  assert @vm.save
324
328
  end
325
329
 
330
+ should "save the new name as the original name after saving" do
331
+ new_name = "foo2"
332
+ assert_equal @name, @vm.instance_variable_get(:@original_name)
333
+
334
+ @vm.name = new_name
335
+ assert @vm.save
336
+ assert_equal new_name, @vm.instance_variable_get(:@original_name)
337
+ end
338
+
326
339
  should "save the relationships as well" do
327
340
  VirtualBox::Nic.expects(:save_relationship).once
328
341
  VirtualBox::StorageController.expects(:save_relationship).once
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{virtualbox}
8
- s.version = "0.5.0"
8
+ s.version = "0.5.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Mitchell Hashimoto"]
12
- s.date = %q{2010-02-16}
12
+ s.date = %q{2010-03-09}
13
13
  s.description = %q{Create and modify virtual machines in VirtualBox using pure ruby.}
14
14
  s.email = %q{mitchell.hashimoto@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -79,7 +79,7 @@ Gem::Specification.new do |s|
79
79
  s.homepage = %q{http://github.com/mitchellh/virtualbox}
80
80
  s.rdoc_options = ["--charset=UTF-8"]
81
81
  s.require_paths = ["lib"]
82
- s.rubygems_version = %q{1.3.5}
82
+ s.rubygems_version = %q{1.3.6}
83
83
  s.summary = %q{Create and modify virtual machines in VirtualBox using pure ruby.}
84
84
  s.test_files = [
85
85
  "test/test_helper.rb",
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: virtualbox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 5
8
+ - 1
9
+ version: 0.5.1
5
10
  platform: ruby
6
11
  authors:
7
12
  - Mitchell Hashimoto
@@ -9,19 +14,23 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-02-16 00:00:00 -08:00
17
+ date: 2010-03-09 00:00:00 -08:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: nokogiri
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 4
30
+ - 1
23
31
  version: 1.4.1
24
- version:
32
+ type: :runtime
33
+ version_requirements: *id001
25
34
  description: Create and modify virtual machines in VirtualBox using pure ruby.
26
35
  email: mitchell.hashimoto@gmail.com
27
36
  executables: []
@@ -103,18 +112,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
103
112
  requirements:
104
113
  - - ">="
105
114
  - !ruby/object:Gem::Version
115
+ segments:
116
+ - 0
106
117
  version: "0"
107
- version:
108
118
  required_rubygems_version: !ruby/object:Gem::Requirement
109
119
  requirements:
110
120
  - - ">="
111
121
  - !ruby/object:Gem::Version
122
+ segments:
123
+ - 0
112
124
  version: "0"
113
- version:
114
125
  requirements: []
115
126
 
116
127
  rubyforge_project:
117
- rubygems_version: 1.3.5
128
+ rubygems_version: 1.3.6
118
129
  signing_key:
119
130
  specification_version: 3
120
131
  summary: Create and modify virtual machines in VirtualBox using pure ruby.