virtualbox 0.4.1 → 0.4.2

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 (44) hide show
  1. data/Readme.md +9 -9
  2. data/VERSION +1 -1
  3. data/docs/GettingStarted.md +11 -11
  4. data/docs/WhatsNew.md +1 -1
  5. data/lib/virtualbox.rb +10 -1
  6. data/lib/virtualbox/abstract_model.rb +47 -29
  7. data/lib/virtualbox/abstract_model/attributable.rb +16 -16
  8. data/lib/virtualbox/abstract_model/dirty.rb +10 -10
  9. data/lib/virtualbox/abstract_model/relatable.rb +22 -22
  10. data/lib/virtualbox/abstract_model/validatable.rb +4 -4
  11. data/lib/virtualbox/attached_device.rb +23 -23
  12. data/lib/virtualbox/command.rb +9 -9
  13. data/lib/virtualbox/dvd.rb +7 -7
  14. data/lib/virtualbox/ext/subclass_listing.rb +1 -1
  15. data/lib/virtualbox/extra_data.rb +17 -17
  16. data/lib/virtualbox/forwarded_port.rb +23 -23
  17. data/lib/virtualbox/hard_drive.rb +27 -27
  18. data/lib/virtualbox/image.rb +25 -18
  19. data/lib/virtualbox/nic.rb +22 -22
  20. data/lib/virtualbox/proxies/collection.rb +4 -4
  21. data/lib/virtualbox/shared_folder.rb +25 -25
  22. data/lib/virtualbox/storage_controller.rb +16 -16
  23. data/lib/virtualbox/vm.rb +95 -42
  24. data/test/virtualbox/abstract_model/attributable_test.rb +28 -28
  25. data/test/virtualbox/abstract_model/dirty_test.rb +13 -13
  26. data/test/virtualbox/abstract_model/relatable_test.rb +36 -36
  27. data/test/virtualbox/abstract_model/validatable_test.rb +22 -22
  28. data/test/virtualbox/abstract_model_test.rb +46 -36
  29. data/test/virtualbox/attached_device_test.rb +47 -47
  30. data/test/virtualbox/command_test.rb +12 -12
  31. data/test/virtualbox/dvd_test.rb +15 -19
  32. data/test/virtualbox/ext/subclass_listing_test.rb +2 -2
  33. data/test/virtualbox/extra_data_test.rb +37 -37
  34. data/test/virtualbox/forwarded_port_test.rb +31 -31
  35. data/test/virtualbox/hard_drive_test.rb +40 -48
  36. data/test/virtualbox/image_test.rb +36 -33
  37. data/test/virtualbox/nic_test.rb +22 -22
  38. data/test/virtualbox/proxies/collection_test.rb +6 -6
  39. data/test/virtualbox/shared_folder_test.rb +36 -36
  40. data/test/virtualbox/storage_controller_test.rb +14 -14
  41. data/test/virtualbox/vm_test.rb +121 -70
  42. data/test/virtualbox_test.rb +19 -0
  43. data/virtualbox.gemspec +5 -3
  44. metadata +4 -2
@@ -8,59 +8,59 @@ class CommandTest < Test::Unit::TestCase
8
8
  end
9
9
  end
10
10
  end
11
-
11
+
12
12
  context "executing commands" do
13
13
  should "use backticks to execute the command" do
14
14
  VirtualBox::Command.expects(:`).with("foo").once
15
15
  VirtualBox::Command.execute("foo")
16
16
  end
17
-
17
+
18
18
  should "return the result of the execution" do
19
19
  VirtualBox::Command.expects(:`).with("foo").returns("bar").once
20
20
  assert_equal "bar", VirtualBox::Command.execute("foo")
21
21
  end
22
22
  end
23
-
23
+
24
24
  context "vbox commands" do
25
25
  should "call 'vboxmanage' followed by command" do
26
- VirtualBox::Command.expects(:execute).with("VBoxManage foo")
26
+ VirtualBox::Command.expects(:execute).with("VBoxManage -q foo")
27
27
  VirtualBox::Command.stubs(:success?).returns(true)
28
28
  VirtualBox::Command.vboxmanage("foo")
29
29
  end
30
-
30
+
31
31
  should "call the custom vboxmanage executable if set" do
32
32
  VirtualBox::Command.vboxmanage = "barf"
33
- VirtualBox::Command.expects(:execute).with("barf foo")
33
+ VirtualBox::Command.expects(:execute).with("barf -q foo")
34
34
  VirtualBox::Command.stubs(:success?).returns(true)
35
35
  VirtualBox::Command.vboxmanage("foo")
36
36
  VirtualBox::Command.vboxmanage = "VBoxManage"
37
37
  end
38
-
38
+
39
39
  should "raise a CommandFailedException if it failed" do
40
- VirtualBox::Command.expects(:execute).with("VBoxManage foo")
40
+ VirtualBox::Command.expects(:execute).with("VBoxManage -q foo")
41
41
  VirtualBox::Command.stubs(:success?).returns(false)
42
42
  assert_raises(VirtualBox::Exceptions::CommandFailedException) {
43
43
  VirtualBox::Command.vboxmanage("foo")
44
44
  }
45
45
  end
46
46
  end
47
-
47
+
48
48
  context "testing command results" do
49
49
  setup do
50
50
  @command = "foo"
51
51
  VirtualBox::Command.stubs(:execute)
52
52
  end
53
-
53
+
54
54
  should "return true if the exit code is 0" do
55
55
  system("echo 'hello' 1>/dev/null")
56
56
  assert_equal 0, $?.to_i
57
57
  assert VirtualBox::Command.test(@command)
58
58
  end
59
-
59
+
60
60
  should "return false if the exit code is 1" do
61
61
  system("there_is_no_way_this_can_exist_1234567890")
62
62
  assert_not_equal 0, $?.to_i
63
- assert !VirtualBox::Command.test(@command)
63
+ assert !VirtualBox::Command.test(@command)
64
64
  end
65
65
  end
66
66
  end
@@ -4,26 +4,26 @@ class DVDTest < Test::Unit::TestCase
4
4
  setup do
5
5
  VirtualBox::Command.stubs(:execute)
6
6
  end
7
-
7
+
8
8
  context "destroying a dvd" do
9
9
  setup do
10
10
  @dvd = VirtualBox::DVD.new
11
11
  end
12
-
12
+
13
13
  should "return false if attempting to destroy an empty drive" do
14
14
  assert !VirtualBox::DVD.empty_drive.destroy
15
15
  end
16
-
16
+
17
17
  should "call vboxmanage to destroy it" do
18
18
  VirtualBox::Command.expects(:vboxmanage).with("closemedium dvd #{@dvd.uuid} --delete")
19
19
  assert @dvd.destroy
20
20
  end
21
-
21
+
22
22
  should "return false if destroy failed" do
23
23
  VirtualBox::Command.stubs(:vboxmanage).raises(VirtualBox::Exceptions::CommandFailedException)
24
24
  assert !@dvd.destroy
25
25
  end
26
-
26
+
27
27
  should "raise an exception if failed and flag is set" do
28
28
  VirtualBox::Command.stubs(:vboxmanage).raises(VirtualBox::Exceptions::CommandFailedException)
29
29
  assert_raises(VirtualBox::Exceptions::CommandFailedException) {
@@ -31,19 +31,19 @@ class DVDTest < Test::Unit::TestCase
31
31
  }
32
32
  end
33
33
  end
34
-
34
+
35
35
  context "empty drive" do
36
36
  should "return an empty drive instance by calling new with :empty_drive" do
37
37
  dvd = VirtualBox::DVD.new(:empty_drive)
38
38
  assert dvd.empty_drive?
39
39
  end
40
-
40
+
41
41
  should "call new with :empty_drive with empty_drive class method" do
42
42
  dvd = VirtualBox::DVD.empty_drive
43
43
  assert dvd.empty_drive?
44
44
  end
45
45
  end
46
-
46
+
47
47
  context "retrieving all dvds" do
48
48
  setup do
49
49
  @expectations = {
@@ -51,18 +51,14 @@ class DVDTest < Test::Unit::TestCase
51
51
  :location => "/Users/mitchellh/Downloads/jeos-8.04.3-jeos-i386.iso",
52
52
  :accessible => "yes"
53
53
  },
54
-
54
+
55
55
  "4a08f52c-bca3-4908-8da4-4f48aaa4ebba" => {
56
56
  :location => "/Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAdditions.iso",
57
57
  :accessible => "yes"
58
58
  }
59
59
  }
60
-
61
- @valid = <<-valid
62
- VirtualBox Command Line Management Interface Version 3.1.2
63
- (C) 2005-2009 Sun Microsystems, Inc.
64
- All rights reserved.
65
60
 
61
+ @valid = <<-valid
66
62
  UUID: d3252617-8176-4f8c-9d73-1c9c82b23960
67
63
  Path: /Users/mitchellh/Downloads/jeos-8.04.3-jeos-i386.iso
68
64
  Accessible: yes
@@ -75,23 +71,23 @@ valid
75
71
 
76
72
  VirtualBox::Command.expects(:vboxmanage).with("list dvds").returns(@valid)
77
73
  end
78
-
74
+
79
75
  should "return an array of DVD objects" do
80
76
  result = VirtualBox::DVD.all
81
77
  assert result.is_a?(Array)
82
-
78
+
83
79
  result.each { |v| assert v.is_a?(VirtualBox::DVD) }
84
80
  end
85
-
81
+
86
82
  should "return the proper results" do
87
83
  result = VirtualBox::DVD.all
88
84
  assert result.is_a?(Array)
89
85
  assert_equal @expectations.length, result.length
90
-
86
+
91
87
  result.each do |image|
92
88
  expected_image = @expectations[image.uuid]
93
89
  assert expected_image
94
-
90
+
95
91
  expected_image.each do |k,v|
96
92
  assert_equal v, image.read_attribute(k)
97
93
  end
@@ -12,13 +12,13 @@ class SubclassListingTest < Test::Unit::TestCase
12
12
  include VirtualBox::SubclassListing
13
13
  end
14
14
  class F < E; end
15
-
15
+
16
16
  should "list subclasses, including sub-subclasses, etc" do
17
17
  assert_equal [F], E.subclasses
18
18
  assert_equal [C], B.subclasses
19
19
  assert_equal [B, C, D], A.subclasses.sort_by { |c| c.name }
20
20
  end
21
-
21
+
22
22
  should "list direct subclasses if flag is set" do
23
23
  assert_equal [B, D], A.subclasses(true).sort_by { |c| c.name }
24
24
  end
@@ -9,7 +9,7 @@ Key: GUI/LastWindowPostion, Value: 99,457,770,550
9
9
  Key: GUI/SUNOnlineData, Value: triesLeft=0
10
10
  Key: GUI/SuppressMessages, Value: ,confirmInputCapture,remindAboutAutoCapture,confirmRemoveMedium,remindAboutInaccessibleMedia,confirmGoingFullscreen,remindAboutMouseIntegrationOn
11
11
  Key: GUI/UpdateCheckCount, Value: 13
12
- Key: GUI/UpdateDate, Value: 1 d, 2010-01-29, stable
12
+ Key: GUI/UpdateDate, Value: 1 d, 2010-01-29, stable
13
13
  raw
14
14
 
15
15
  VirtualBox::Command.stubs(:execute)
@@ -18,115 +18,115 @@ raw
18
18
  @ed["foo"] = "bar"
19
19
  @ed.clear_dirty!
20
20
  end
21
-
21
+
22
22
  context "attributes" do
23
23
  should "return parent name if its a VM object" do
24
24
  vm = mock("vm")
25
25
  vm.stubs(:is_a?).with(VirtualBox::VM).returns(true)
26
26
  vm.stubs(:name).returns("FOO")
27
-
27
+
28
28
  @ed.parent = vm
29
29
  assert_equal "FOO", @ed.parent_name
30
30
  end
31
-
31
+
32
32
  should "return default otherwise" do
33
33
  assert_equal "global", @ed.parent_name
34
34
  end
35
35
  end
36
-
36
+
37
37
  context "relationships" do
38
38
  setup do
39
39
  @caller = mock("caller")
40
40
  @caller.stubs(:name).returns("foocaller")
41
-
42
- VirtualBox::Command.stubs(:vboxmanage).returns(@raw)
41
+
42
+ VirtualBox::Command.stubs(:vboxmanage).returns(@raw)
43
43
  end
44
-
44
+
45
45
  context "populating" do
46
46
  should "call VBoxManage for the caller" do
47
47
  VirtualBox::Command.expects(:vboxmanage).with("getextradata #{@caller.name} enumerate").returns(@raw)
48
48
  VirtualBox::ExtraData.populate_relationship(@caller, {})
49
49
  end
50
-
50
+
51
51
  should "call pairs_to_objects with parent set to the caller" do
52
52
  VirtualBox::ExtraData.expects(:parse_kv_pairs).with(@raw, @caller).once
53
- VirtualBox::ExtraData.populate_relationship(@caller, {})
53
+ VirtualBox::ExtraData.populate_relationship(@caller, {})
54
54
  end
55
-
55
+
56
56
  should "return an array of ExtraData objects" do
57
57
  result = VirtualBox::ExtraData.populate_relationship(@caller, {})
58
58
  assert result.is_a?(VirtualBox::ExtraData)
59
59
  end
60
60
  end
61
-
61
+
62
62
  context "saving" do
63
63
  should "call save on the ExtraData object" do
64
64
  object = mock("object")
65
65
  object.expects(:save).once
66
-
66
+
67
67
  VirtualBox::ExtraData.save_relationship(@caller, object)
68
68
  end
69
69
  end
70
70
  end
71
-
71
+
72
72
  context "destroying (deleting)" do
73
73
  setup do
74
74
  @key = "foo"
75
75
  end
76
-
76
+
77
77
  should "call the proper vbox command" do
78
78
  VirtualBox::Command.expects(:vboxmanage).with("setextradata global foo")
79
79
  assert @ed.delete(@key)
80
80
  end
81
-
81
+
82
82
  should "remove the key from the hash" do
83
83
  assert @ed.has_key?(@key)
84
84
  assert @ed.delete(@key)
85
85
  assert !@ed.has_key?(@key)
86
86
  end
87
-
87
+
88
88
  should "raise an exception if true sent to save and error occured" do
89
89
  VirtualBox::Command.stubs(:vboxmanage).raises(VirtualBox::Exceptions::CommandFailedException)
90
90
  assert_raises(VirtualBox::Exceptions::CommandFailedException) {
91
91
  @ed.delete(@key, true)
92
92
  }
93
93
  end
94
-
94
+
95
95
  should "return false if the command failed" do
96
96
  VirtualBox::Command.stubs(:vboxmanage).raises(VirtualBox::Exceptions::CommandFailedException)
97
97
  assert !@ed.delete(@key)
98
98
  end
99
99
  end
100
-
100
+
101
101
  context "saving" do
102
102
  setup do
103
103
  @ed["foo"] = "BAR"
104
104
  assert @ed.changed?
105
105
  end
106
-
106
+
107
107
  should "do nothing if there are no changes" do
108
108
  @ed.clear_dirty!
109
109
  VirtualBox::Command.expects(:vboxmanage).never
110
110
  assert @ed.save
111
111
  end
112
-
112
+
113
113
  should "call the proper vbox command" do
114
114
  VirtualBox::Command.expects(:vboxmanage).with("setextradata global foo BAR")
115
115
  assert @ed.save
116
116
  end
117
-
117
+
118
118
  should "return false if the command failed" do
119
119
  VirtualBox::Command.stubs(:vboxmanage).raises(VirtualBox::Exceptions::CommandFailedException)
120
120
  assert !@ed.save
121
121
  end
122
-
122
+
123
123
  should "raise an exception if true sent to save and error occured" do
124
124
  VirtualBox::Command.stubs(:vboxmanage).raises(VirtualBox::Exceptions::CommandFailedException)
125
125
  assert_raises(VirtualBox::Exceptions::CommandFailedException) {
126
126
  @ed.save(true)
127
127
  }
128
128
  end
129
-
129
+
130
130
  should "clear dirty state" do
131
131
  @ed["value"] = "rawr"
132
132
  assert @ed.changed?
@@ -143,14 +143,14 @@ raw
143
143
  should "not be dirty initially" do
144
144
  assert !@ed.changed?
145
145
  end
146
-
146
+
147
147
  should "be dirty when setting a value" do
148
148
  @ed["foo"] = "bar"
149
149
  assert @ed.changed?
150
150
  assert @ed.changes.has_key?("foo")
151
151
  end
152
152
  end
153
-
153
+
154
154
  context "global extra data" do
155
155
  setup do
156
156
  get_seq = sequence("get_seq")
@@ -158,59 +158,59 @@ raw
158
158
  VirtualBox::ExtraData.expects(:parse_kv_pairs).returns(@ed).once.in_sequence(get_seq)
159
159
  @global = VirtualBox::ExtraData.global(true)
160
160
  end
161
-
161
+
162
162
  should "call the command, parse it, then turn it into objects" do
163
163
  assert_equal "bar", @global["foo"]
164
164
  end
165
-
165
+
166
166
  should "return the same object if it exists for global data, rather than recreating it" do
167
167
  VirtualBox::Command.expects(:vboxmanage).never
168
168
  assert_equal @global, VirtualBox::ExtraData.global
169
169
  end
170
-
170
+
171
171
  should "return a new object if reload is true" do
172
172
  VirtualBox::Command.expects(:vboxmanage).once
173
173
  VirtualBox::ExtraData.expects(:parse_kv_pairs).returns(@ed.dup).once
174
174
  assert !@global.equal?(VirtualBox::ExtraData.global(true))
175
175
  end
176
176
  end
177
-
177
+
178
178
  context "constructor" do
179
179
  should "set the parent with the given argument" do
180
180
  ed = VirtualBox::ExtraData.new("JOEY")
181
181
  assert_equal "JOEY", ed.parent
182
182
  end
183
-
183
+
184
184
  should "be global by default" do
185
185
  ed = VirtualBox::ExtraData.new
186
186
  assert_equal "global", ed.parent
187
187
  end
188
188
  end
189
-
189
+
190
190
  context "parsing KV pairs" do
191
191
  setup do
192
192
  @data = VirtualBox::ExtraData.parse_kv_pairs(@raw)
193
193
  end
194
-
194
+
195
195
  should "return the proper number of items" do
196
196
  # Shows that it skips over non-matching lines as well
197
197
  assert_equal 6, @data.length
198
198
  end
199
-
199
+
200
200
  should "return as an ExtraData Hash" do
201
201
  assert @data.is_a?(Hash)
202
202
  assert @data.is_a?(VirtualBox::ExtraData)
203
203
  end
204
-
204
+
205
205
  should "return proper values, trimmed" do
206
206
  assert_equal "1 d, 2010-01-29, stable", @data["GUI/UpdateDate"]
207
207
  end
208
-
208
+
209
209
  should "send the 2nd param as the parent to the ED object" do
210
210
  @data = VirtualBox::ExtraData.parse_kv_pairs(@raw, "FOO")
211
211
  assert_equal "FOO", @data.parent
212
212
  end
213
-
213
+
214
214
  should "return an unchanged ED object" do
215
215
  assert !@data.changed?
216
216
  end
@@ -4,7 +4,7 @@ class ForwardedPortTest < Test::Unit::TestCase
4
4
  setup do
5
5
  @caller = mock("caller")
6
6
  end
7
-
7
+
8
8
  context "validations" do
9
9
  setup do
10
10
  @port = VirtualBox::ForwardedPort.new
@@ -13,16 +13,16 @@ class ForwardedPortTest < Test::Unit::TestCase
13
13
  @port.hostport = "2222"
14
14
  @port.added_to_relationship(@caller)
15
15
  end
16
-
16
+
17
17
  should "be valid with all fields" do
18
18
  assert @port.valid?
19
19
  end
20
-
20
+
21
21
  should "be invalid with no name" do
22
22
  @port.name = nil
23
23
  assert !@port.valid?
24
24
  end
25
-
25
+
26
26
  should "be invalid with no guest port" do
27
27
  @port.guestport = nil
28
28
  assert !@port.valid?
@@ -32,13 +32,13 @@ class ForwardedPortTest < Test::Unit::TestCase
32
32
  @port.hostport = nil
33
33
  assert !@port.valid?
34
34
  end
35
-
35
+
36
36
  should "be invalid if not in a relationship" do
37
37
  @port.write_attribute(:parent, nil)
38
38
  assert !@port.valid?
39
39
  end
40
40
  end
41
-
41
+
42
42
  context "with an instance" do
43
43
  setup do
44
44
  @port = VirtualBox::ForwardedPort.new({
@@ -47,67 +47,67 @@ class ForwardedPortTest < Test::Unit::TestCase
47
47
  :guestport => "22",
48
48
  :hostport => "2222"
49
49
  })
50
-
50
+
51
51
  @ed = mock("extradata")
52
52
  @ed.stubs(:[]=)
53
53
  @ed.stubs(:save)
54
54
  @ed.stubs(:delete)
55
55
  @caller.stubs(:extra_data).returns(@ed)
56
56
  end
57
-
57
+
58
58
  context "saving" do
59
59
  context "an existing record" do
60
60
  setup do
61
61
  @port.existing_record!
62
62
  end
63
-
63
+
64
64
  should "not do anything and return true if its unchanged" do
65
65
  @caller.expects(:extra_data).never
66
66
  assert @port.save
67
67
  end
68
-
68
+
69
69
  should "clear the dirty state after saving" do
70
70
  @port.name = "diff"
71
71
  @port.save
72
72
  assert !@port.changed?
73
73
  end
74
-
74
+
75
75
  should "call destroy if the name changed" do
76
76
  @port.name = "diff"
77
77
  @port.expects(:destroy).once
78
78
  @port.save
79
79
  end
80
-
80
+
81
81
  should "not call destroy if the name didn't change" do
82
82
  assert !@port.name_changed?
83
83
  @port.expects(:destroy).never
84
84
  @port.save
85
85
  end
86
86
  end
87
-
87
+
88
88
  context "a new record" do
89
89
  setup do
90
90
  assert @port.new_record!
91
91
  end
92
-
92
+
93
93
  should "no longer be a new record after saving" do
94
94
  @port.save
95
95
  assert !@port.new_record?
96
96
  end
97
-
97
+
98
98
  should "return false and do nothing if invalid" do
99
99
  @caller.expects(:extra_data).never
100
100
  @port.expects(:valid?).returns(false)
101
101
  assert !@port.save
102
102
  end
103
-
103
+
104
104
  should "raise a ValidationFailedException if invalid and raise_errors is true" do
105
105
  @port.expects(:valid?).returns(false)
106
106
  assert_raises(VirtualBox::Exceptions::ValidationFailedException) {
107
107
  @port.save(true)
108
108
  }
109
109
  end
110
-
110
+
111
111
  should "call save on the extra_data" do
112
112
  @ed = mock("ed")
113
113
  @ed.expects(:[]=).times(3)
@@ -117,49 +117,49 @@ class ForwardedPortTest < Test::Unit::TestCase
117
117
  end
118
118
  end
119
119
  end
120
-
120
+
121
121
  context "key prefix" do
122
122
  should "return a proper key prefix constructed with the attributes" do
123
123
  assert_equal "VBoxInternal\/Devices\/#{@port.device}\/#{@port.instance}\/LUN#0\/Config\/#{@port.name}\/", @port.key_prefix
124
124
  end
125
-
125
+
126
126
  should "return with previous name if parameter is true" do
127
127
  @port.name = "diff"
128
128
  assert @port.name_changed?
129
129
  assert_equal "VBoxInternal\/Devices\/#{@port.device}\/#{@port.instance}\/LUN#0\/Config\/#{@port.name_was}\/", @port.key_prefix(true)
130
130
  end
131
-
131
+
132
132
  should "not use previous name if parameter is true and name didn't change" do
133
133
  assert !@port.name_changed?
134
134
  assert_equal "VBoxInternal\/Devices\/#{@port.device}\/#{@port.instance}\/LUN#0\/Config\/#{@port.name}\/", @port.key_prefix(true)
135
135
  end
136
136
  end
137
-
137
+
138
138
  context "destroying" do
139
139
  setup do
140
140
  @port.existing_record!
141
141
  end
142
-
142
+
143
143
  should "call delete on the extra data for each key" do
144
144
  @ed = mock("ed")
145
145
  @ed.expects(:delete).times(3)
146
146
  @caller.expects(:extra_data).times(3).returns(@ed)
147
147
  @port.destroy
148
148
  end
149
-
149
+
150
150
  should "do nothing if the record is new" do
151
151
  @port.new_record!
152
152
  @caller.expects(:extra_data).never
153
153
  @port.destroy
154
154
  end
155
-
155
+
156
156
  should "be a new record after destroying" do
157
157
  @port.destroy
158
158
  assert @port.new_record?
159
159
  end
160
160
  end
161
161
  end
162
-
162
+
163
163
  context "relationships" do
164
164
  context "saving" do
165
165
  should "call #save on every object" do
@@ -169,11 +169,11 @@ class ForwardedPortTest < Test::Unit::TestCase
169
169
  object.expects(:save).once
170
170
  objects.push(object)
171
171
  end
172
-
172
+
173
173
  VirtualBox::ForwardedPort.save_relationship(@caller, objects)
174
174
  end
175
175
  end
176
-
176
+
177
177
  context "populating" do
178
178
  setup do
179
179
  @caller.stubs(:extra_data).returns({
@@ -182,22 +182,22 @@ class ForwardedPortTest < Test::Unit::TestCase
182
182
  "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort" => "2222",
183
183
  "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol" => "TCP"
184
184
  })
185
-
185
+
186
186
  @objects = VirtualBox::ForwardedPort.populate_relationship(@caller, {})
187
187
  end
188
-
188
+
189
189
  should "return an array of ForwardedPorts" do
190
190
  assert @objects.is_a?(VirtualBox::Proxies::Collection)
191
191
  assert @objects.all? { |o| o.is_a?(VirtualBox::ForwardedPort) }
192
192
  end
193
-
193
+
194
194
  should "have the proper data" do
195
195
  object = @objects.first
196
196
  assert_equal "22", object.guestport
197
197
  assert_equal "2222", object.hostport
198
198
  assert_equal "TCP", object.protocol
199
199
  end
200
-
200
+
201
201
  should "be existing records" do
202
202
  assert !@objects.first.new_record?
203
203
  end