fog 0.2.6 → 0.2.7

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.
@@ -7,8 +7,8 @@ Gem::Specification.new do |s|
7
7
  ## If your rubyforge_project name is different, then edit it and comment out
8
8
  ## the sub! line in the Rakefile
9
9
  s.name = 'fog'
10
- s.version = '0.2.6'
11
- s.date = '2010-06-29'
10
+ s.version = '0.2.7'
11
+ s.date = '2010-06-30'
12
12
  s.rubyforge_project = 'fog'
13
13
 
14
14
  ## Make sure your summary is short. The description may be as long
@@ -528,17 +528,24 @@ Gem::Specification.new do |s|
528
528
  spec/vcloud/terremark/ecloud/models/ips_spec.rb
529
529
  spec/vcloud/terremark/ecloud/models/network_spec.rb
530
530
  spec/vcloud/terremark/ecloud/models/networks_spec.rb
531
+ spec/vcloud/terremark/ecloud/models/node_spec.rb
532
+ spec/vcloud/terremark/ecloud/models/nodes_spec.rb
531
533
  spec/vcloud/terremark/ecloud/models/public_ip_spec.rb
532
534
  spec/vcloud/terremark/ecloud/models/public_ips_spec.rb
533
535
  spec/vcloud/terremark/ecloud/models/vdc_spec.rb
534
536
  spec/vcloud/terremark/ecloud/models/vdcs_spec.rb
535
537
  spec/vcloud/terremark/ecloud/requests/add_internet_service_spec.rb
538
+ spec/vcloud/terremark/ecloud/requests/add_node_spec.rb
536
539
  spec/vcloud/terremark/ecloud/requests/configure_internet_service_spec.rb
540
+ spec/vcloud/terremark/ecloud/requests/configure_node_spec.rb
537
541
  spec/vcloud/terremark/ecloud/requests/delete_internet_service_spec.rb
542
+ spec/vcloud/terremark/ecloud/requests/delete_node_spec.rb
538
543
  spec/vcloud/terremark/ecloud/requests/get_internet_services_spec.rb
539
544
  spec/vcloud/terremark/ecloud/requests/get_network_ip_spec.rb
540
545
  spec/vcloud/terremark/ecloud/requests/get_network_ips_spec.rb
541
546
  spec/vcloud/terremark/ecloud/requests/get_network_spec.rb
547
+ spec/vcloud/terremark/ecloud/requests/get_node_spec.rb
548
+ spec/vcloud/terremark/ecloud/requests/get_nodes_spec.rb
542
549
  spec/vcloud/terremark/ecloud/requests/get_public_ip_spec.rb
543
550
  spec/vcloud/terremark/ecloud/requests/get_public_ips_spec.rb
544
551
  spec/vcloud/terremark/ecloud/requests/get_vdc_spec.rb
data/lib/fog.rb CHANGED
@@ -39,7 +39,7 @@ require 'fog/vcloud'
39
39
  module Fog
40
40
 
41
41
  unless const_defined?(:VERSION)
42
- VERSION = '0.2.6'
42
+ VERSION = '0.2.7'
43
43
  end
44
44
 
45
45
  module Mock
@@ -353,11 +353,15 @@ module Fog
353
353
  response = Excon::Response.new
354
354
 
355
355
  #Parse the response body into a hash
356
- document = Fog::ToHashDocument.new
357
- parser = Nokogiri::XML::SAX::PushParser.new(document)
358
- parser << mock_data
359
- parser.finish
360
- response.body = document.body
356
+ if mock_data.empty?
357
+ response.body = mock_data
358
+ else
359
+ document = Fog::ToHashDocument.new
360
+ parser = Nokogiri::XML::SAX::PushParser.new(document)
361
+ parser << mock_data
362
+ parser.finish
363
+ response.body = document.body
364
+ end
361
365
 
362
366
  response.status = status
363
367
  response.headers = mock_headers
@@ -6,8 +6,9 @@ module Fog
6
6
  alias_method :loaded?, :loaded
7
7
 
8
8
  def reload
9
- super
9
+ instance = super
10
10
  @loaded = true
11
+ instance
11
12
  end
12
13
 
13
14
  def load_unless_loaded!
@@ -86,11 +86,15 @@ module Fog
86
86
  :services => [
87
87
  { :id => "71", :href => extension_url + "/internetService/71", :port => "80", :protocol => 'HTTP', :enabled => "true",
88
88
  :timeout => "2", :name => 'Web Site', :description => 'Web Servers', :redirect_url => 'http://fakey.com',
89
- :nodes => [ {:ip => "1.2.3.5", :name => "Test Node 1", :port => "80", :enabled => "true", :description => "web 1" }
89
+ :nodes => [ {:id => "81", :href => extension_url + "/nodeService/81", :ip_address => "1.2.3.5",
90
+ :name => "Test Node 1", :port => "80", :enabled => "true", :description => "web 1" },
91
+ {:id => "82", :href => extension_url + "/nodeService/82", :ip_address => "1.2.3.6",
92
+ :name => "Test Node 2", :port => "80", :enabled => "true", :description => "web 2" },
90
93
  ] },
91
94
  { :id => "72", :href => extension_url + "/internetService/72", :port => "7000", :protocol => 'HTTP', :enabled => "true",
92
95
  :timeout => "2", :name => 'An SSH Map', :description => 'SSH 1', :redirect_url => '',
93
- :nodes => [ {:ip => "1.2.3.5", :name => "SSH", :port => "22", :enabled => "true", :description => "web ssh" }
96
+ :nodes => [ {:id => "83", :href => extension_url + "/nodeService/83", :ip_address => "1.2.3.5",
97
+ :name => "SSH", :port => "22", :enabled => "true", :description => "web ssh" }
94
98
  ] }
95
99
  ]
96
100
  },
@@ -149,6 +153,30 @@ module Fog
149
153
  { :xmlns => "urn:tmrk:eCloudExtensions-2.3", :"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance" }
150
154
  end
151
155
 
156
+ def mock_ip_from_service_url(uri)
157
+ mock_data[:organizations].map { |org| org[:vdcs] }.flatten.map { |vdc| vdc[:public_ips] }.flatten.compact.detect { |pip| pip[:services].detect { |service| service[:href] == uri } }
158
+ end
159
+
160
+ def mock_ip_and_service_from_service_url(uri)
161
+ if ip = mock_data[:organizations].map { |org| org[:vdcs] }.flatten.map { |vdc| vdc[:public_ips] }.flatten.compact.detect { |pip| pip[:services].detect { |service| service[:href] == uri } }
162
+ if service = ip[:services].detect { |service| service[:href] == uri }
163
+ [ip, service]
164
+ else
165
+ [ip, nil]
166
+ end
167
+ else
168
+ [nil, nil]
169
+ end
170
+ end
171
+
172
+ def mock_node_from_url(uri)
173
+ mock_data[:organizations].map { |org| org[:vdcs] }.flatten.map { |vdc| vdc[:public_ips] }.flatten.map { |pip| pip[:services] }.flatten.map { |service| service[:nodes] }.flatten.detect { |node| node[:href] == uri }
174
+ end
175
+
176
+ def mock_service_from_node_url(uri)
177
+ mock_data[:organizations].map { |org| org[:vdcs] }.flatten.map { |vdc| vdc[:public_ips] }.flatten.map { |pip| pip[:services] }.flatten.map { |service| service }.detect {|service| service[:nodes].map { |node| node[:href] }.include?(uri) }
178
+ end
179
+
152
180
  def mock_data
153
181
  Fog::Vcloud::Terremark::Ecloud::Mock.data
154
182
  end
@@ -66,25 +66,9 @@ module Fog
66
66
  internet_services_uri = ensure_unparsed(internet_services_uri)
67
67
 
68
68
  if ip = ip_from_uri(internet_services_uri)
69
- new_service = service_data.merge!( { :id => rand(1000), :timeout => 2 } )
69
+ new_service = service_data.merge!( { :href => Fog::Vcloud::Terremark::Ecloud::Mock.internet_service_href( { :id => rand(1000) } ), :timeout => 2 } )
70
70
  ip[:services] << new_service
71
- builder = Builder::XmlMarkup.new
72
- xml = builder.InternetService(:xmlns => "urn:tmrk:eCloudExtensions-2.0",
73
- :"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance") {
74
- builder.Id(new_service[:id])
75
- builder.Href(Fog::Vcloud::Terremark::Ecloud::Mock.internet_service_href(new_service))
76
- builder.Name(new_service[:name])
77
- builder.PublicIpAddress {
78
- builder.Id(ip[:id])
79
- builder.Href(Fog::Vcloud::Terremark::Ecloud::Mock.public_ip_href(ip))
80
- builder.Name(ip[:name])
81
- }
82
- builder.Protocol(new_service[:protocol])
83
- builder.Port(new_service[:port])
84
- builder.Enabled(new_service[:enabled])
85
- builder.Description(new_service[:description])
86
- builder.Timeout(new_service[:timeout])
87
- }
71
+ xml = generate_internet_service_response( service_data, ip )
88
72
 
89
73
  mock_it 200, xml, {'Content-Type' => 'application/vnd.tmrk.ecloud.internetService+xml'}
90
74
  else
@@ -46,7 +46,17 @@ module Fog
46
46
  module Mock
47
47
 
48
48
  def add_node(nodes_uri, node_data)
49
- Fog::Mock.not_implemented
49
+ validate_node_data(node_data)
50
+ nodes_uri = ensure_unparsed(nodes_uri)
51
+ service_uri = nodes_uri.gsub('/nodeServices','')
52
+ ip, service = mock_ip_and_service_from_service_url(service_uri)
53
+ if ip and service
54
+ id = rand(1000)
55
+ service[:nodes] << node_data.merge!( :id => id.to_s, :href => Fog::Vcloud::Terremark::Ecloud::Mock.extension_url + "/nodeService/#{id}" )
56
+ mock_it 200, mock_node_service_response(node_data, ecloud_xmlns), { 'Content-Type' => 'application/vnd.tmrk.ecloud.nodeService+xml' }
57
+ else
58
+ mock_error 200, "401 Unauthorized"
59
+ end
50
60
  end
51
61
  end
52
62
  end
@@ -4,7 +4,7 @@ module Fog
4
4
  module Ecloud
5
5
  module Real
6
6
 
7
- def generate_configure_internet_service_response(service_data,ip_address_data)
7
+ def generate_internet_service_response(service_data,ip_address_data)
8
8
  builder = Builder::XmlMarkup.new
9
9
  builder.InternetService(:"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance",
10
10
  :xmlns => "urn:tmrk:eCloudExtensions-2.3") {
@@ -38,7 +38,7 @@ module Fog
38
38
  validate_public_ip_address_data(ip_address_data)
39
39
 
40
40
  request(
41
- :body => generate_configure_internet_service_response(service_data, ip_address_data),
41
+ :body => generate_internet_service_response(service_data, ip_address_data),
42
42
  :expects => 200,
43
43
  :headers => {'Content-Type' => 'application/vnd.tmrk.ecloud.internetService+xml'},
44
44
  :method => 'PUT',
@@ -67,7 +67,7 @@ module Fog
67
67
  if ip = ip_from_uri(ip_address_data[:href])
68
68
  if service = ip[:services].detect { |service| service[:id] == internet_service_uri.split('/')[-1] }
69
69
  ip[:services][ip[:services].index(service)] = service_data
70
- xml = generate_configure_internet_service_response(service_data, ip)
70
+ xml = generate_internet_service_response(service_data, ip)
71
71
  end
72
72
  end
73
73
 
@@ -34,7 +34,18 @@ module Fog
34
34
  module Mock
35
35
 
36
36
  def configure_node(node_uri, node_data)
37
- Fog::Mock.not_implemented
37
+ node_uri = ensure_unparsed(node_uri)
38
+
39
+ validate_node_data(node_data, true)
40
+
41
+ if node = mock_node_from_url(node_uri)
42
+ node[:name] = node_data[:name]
43
+ node[:enabled] = node_data[:enabled]
44
+ node[:description] = node_data[:description]
45
+ mock_it 200, mock_node_service_response(node, ecloud_xmlns), { 'Content-Type' => 'application/vnd.tmrk.ecloud.nodeService+xml' }
46
+ else
47
+ mock_error 200, "401 Unauthorized"
48
+ end
38
49
  end
39
50
  end
40
51
  end
@@ -10,7 +10,20 @@ module Fog
10
10
  module Mock
11
11
 
12
12
  def delete_internet_service(service_uri)
13
- Fog::Mock.not_implemented
13
+
14
+ deleted = false
15
+ if ip = mock_ip_from_service_url(service_uri)
16
+ if service = ip[:services].detect { |service| service[:href] == service_uri }
17
+ ip[:services].delete(service)
18
+ deleted = true
19
+ end
20
+ end
21
+
22
+ if deleted
23
+ mock_it 200, '', { }
24
+ else
25
+ mock_error 200, "401 Unauthorized"
26
+ end
14
27
  end
15
28
  end
16
29
  end
@@ -10,7 +10,16 @@ module Fog
10
10
  module Mock
11
11
 
12
12
  def delete_node(node_uri)
13
- Fog::Mock.not_implemented
13
+ node_uri = ensure_unparsed(node_uri)
14
+
15
+ node = mock_node_from_url(node_uri)
16
+ service = mock_service_from_node_url(node_uri)
17
+ if node and service
18
+ service[:nodes].delete(node)
19
+ mock_it 200, '', {}
20
+ else
21
+ mock_error 200, "401 Unauthorized"
22
+ end
14
23
  end
15
24
  end
16
25
  end
@@ -8,8 +8,35 @@ module Fog
8
8
  end
9
9
 
10
10
  module Mock
11
+
12
+ #
13
+ # Based on http://support.theenterprisecloud.com/kb/default.asp?id=641&Lang=1&SID=
14
+ #
15
+ #
16
+ #
17
+ def mock_node_service_response(node, xmlns)
18
+ xml = Builder::XmlMarkup.new
19
+ xml.NodeService(xmlns) {
20
+ xml.Id(node[:id])
21
+ xml.Href(node[:href])
22
+ xml.Name(node[:name])
23
+ xml.IpAddress(node[:ip_address])
24
+ xml.Port(node[:port])
25
+ xml.Enabled(node[:enabled])
26
+ xml.Description(node[:description])
27
+ }
28
+ end
29
+
11
30
  def get_node(node_uri)
12
- Fog::Mock.not_implemented
31
+
32
+ node_uri = ensure_unparsed(node_uri)
33
+
34
+ if node = mock_node_from_url(node_uri)
35
+ xml = Builder::XmlMarkup.new
36
+ mock_it 200, mock_node_service_response(node, ecloud_xmlns), { 'Content-Type' => 'application/vnd.tmrk.ecloud.nodeService+xml' }
37
+ else
38
+ mock_error 200, "401 Unauthorized"
39
+ end
13
40
  end
14
41
  end
15
42
  end
@@ -8,8 +8,34 @@ module Fog
8
8
  end
9
9
 
10
10
  module Mock
11
+
12
+ #
13
+ # Based off of:
14
+ # http://support.theenterprisecloud.com/kb/default.asp?id=637&Lang=1&SID=
15
+ #
11
16
  def get_nodes(nodes_uri)
12
- Fog::Mock.not_implemented
17
+ nodes_uri = ensure_unparsed(nodes_uri)
18
+ service_uri = nodes_uri.gsub('/nodeServices','')
19
+ ip, service = mock_ip_and_service_from_service_url(service_uri)
20
+ if ip and service
21
+ xml = Builder::XmlMarkup.new
22
+ mock_it 200,
23
+ xml.NodeServices(ecloud_xmlns) {
24
+ service[:nodes].each do |node|
25
+ xml.NodeService {
26
+ xml.Id(node[:id])
27
+ xml.Href(node[:href])
28
+ xml.Name(node[:name])
29
+ xml.IpAddress(node[:ip_address])
30
+ xml.Port(node[:port])
31
+ xml.Enabled(node[:enabled])
32
+ xml.Description(node[:description])
33
+ }
34
+ end
35
+ }, { 'Content-Type' => 'application/vnd.tmrk.ecloud.nodeService+xml' }
36
+ else
37
+ mock_error 200, "401 Unauthorized"
38
+ end
13
39
  end
14
40
  end
15
41
  end
@@ -28,6 +28,7 @@ Fog.mock! if ENV['FOG_MOCK']
28
28
  require "#{current_directory}/../../lib/fog/vcloud/bin"
29
29
 
30
30
  shared_examples_for "all responses" do
31
+ it { should be_an_instance_of Excon::Response }
31
32
  it { should respond_to :body }
32
33
  it { should respond_to :headers }
33
34
  it { should have_at_least(1).body }
@@ -36,6 +37,13 @@ shared_examples_for "all responses" do
36
37
  its(:headers) { should be_an_instance_of Hash }
37
38
  end
38
39
 
40
+ shared_examples_for "all delete responses" do
41
+ it { should be_an_instance_of Excon::Response }
42
+ it { should respond_to :body }
43
+ it { should respond_to :headers }
44
+ its(:headers) { should be_an_instance_of Hash }
45
+ end
46
+
39
47
  shared_examples_for "it has a Content-Type header" do
40
48
  its(:headers) { should include "Content-Type" }
41
49
  end
@@ -194,6 +202,18 @@ Spec::Example::ExampleGroupFactory.register(:vcloud_request, Class.new(Spec::Exa
194
202
  Spec::Example::ExampleGroupFactory.register(:tmrk_ecloud_request, Class.new(Spec::Example::ExampleGroup))
195
203
  Spec::Example::ExampleGroupFactory.register(:tmrk_vcloud_request, Class.new(Spec::Example::ExampleGroup))
196
204
 
205
+ def setup_ecloud_mock_data
206
+ @base_url = Fog::Vcloud::Terremark::Ecloud::Mock.base_url
207
+ @mock_data = Fog::Vcloud::Terremark::Ecloud::Mock.data
208
+ @mock_version = @mock_data[:versions].first
209
+ @mock_organization = @mock_data[:organizations].first
210
+ @mock_vdc = @mock_organization[:vdcs].first
211
+ @mock_public_ip = @mock_vdc[:public_ips].first
212
+ @mock_service = @mock_public_ip[:services].first
213
+ @mock_node = @mock_service[:nodes].first
214
+ @mock_network = @mock_vdc[:networks].first
215
+ end
216
+
197
217
  Spec::Runner.configure do |config|
198
218
  config.after(:all) do
199
219
  Fog::Vcloud::Mock.data_reset
@@ -221,32 +241,15 @@ Spec::Runner.configure do |config|
221
241
  @vcloud = Fog::Vcloud.new(:username => "", :password => "bar", :versions_uri => "http://fakey.com/api/versions")
222
242
  end
223
243
  config.before(:each, :type => :mock_tmrk_ecloud_request) do
224
- @vcloud = Fog::Vcloud.new(:username => "foo", :password => "bar", :versions_uri => "http://fakey.com/api/versions", :module => "Fog::Vcloud::Terremark::Ecloud")
225
- end
226
- config.before(:all, :type => :mock_tmrk_ecloud_request) do
227
- @base_url = Fog::Vcloud::Terremark::Ecloud::Mock.base_url
228
- @mock_data = Fog::Vcloud::Terremark::Ecloud::Mock.data
229
- @mock_version = @mock_data[:versions].first
230
- @mock_organization = @mock_data[:organizations].first
231
- @mock_vdc = @mock_organization[:vdcs].first
232
- @mock_public_ip = @mock_vdc[:public_ips].first
233
- @mock_service = @mock_public_ip[:services].first
234
- @mock_network = @mock_vdc[:networks].first
235
- end
236
- config.after(:all, :type => :mock_tmrk_ecloud_request) do
244
+ Fog::Vcloud::Mock.data_reset
237
245
  Fog::Vcloud::Terremark::Ecloud::Mock.data_reset
238
- end
239
- config.before(:all, :type => :mock_tmrk_ecloud_model) do
240
- @base_url = Fog::Vcloud::Terremark::Ecloud::Mock.base_url
241
- @mock_data = Fog::Vcloud::Terremark::Ecloud::Mock.data
242
- @mock_version = @mock_data[:versions].first
243
- @mock_organization = @mock_data[:organizations].first
244
- @mock_vdc = @mock_organization[:vdcs].first
245
- @mock_public_ip = @mock_vdc[:public_ips].first
246
- @mock_service = @mock_public_ip[:services].first
247
- @mock_network = @mock_vdc[:networks].first
246
+ setup_ecloud_mock_data
247
+ @vcloud = Fog::Vcloud.new(:username => "foo", :password => "bar", :versions_uri => "http://fakey.com/api/versions", :module => "Fog::Vcloud::Terremark::Ecloud")
248
248
  end
249
249
  config.before(:each, :type => :mock_tmrk_ecloud_model) do
250
+ Fog::Vcloud::Mock.data_reset
251
+ Fog::Vcloud::Terremark::Ecloud::Mock.data_reset
252
+ setup_ecloud_mock_data
250
253
  @vcloud = Fog::Vcloud.new(:username => "foo", :password => "bar", :versions_uri => "http://fakey.com/api/versions", :module => "Fog::Vcloud::Terremark::Ecloud")
251
254
  end
252
255
  end
@@ -0,0 +1,38 @@
1
+ require File.join(File.dirname(__FILE__),'..','..','..','spec_helper')
2
+
3
+ if Fog.mocking?
4
+ describe "Fog::Vcloud::Terremark::Ecloud::Node", :type => :mock_tmrk_ecloud_model do
5
+
6
+ subject { @vcloud.vdcs.first.public_ips.first.internet_services.first.nodes.first }
7
+
8
+ describe :class do
9
+ subject { Fog::Vcloud::Terremark::Ecloud::Node }
10
+
11
+ it { should have_identity :href }
12
+ it { should have_only_these_attributes [:href, :ip_address, :description, :name, :port, :enabled, :id] }
13
+ end
14
+
15
+ context "with no uri" do
16
+
17
+ subject { Fog::Vcloud::Terremark::Ecloud::Node.new() }
18
+ it { should have_all_attributes_be_nil }
19
+
20
+ end
21
+
22
+ context "as a collection member" do
23
+ subject { @vcloud.vdcs.first.public_ips.first.internet_services.first.nodes.first.reload }
24
+
25
+ it { should be_an_instance_of Fog::Vcloud::Terremark::Ecloud::Node }
26
+
27
+ its(:href) { should == @mock_node[:href] }
28
+ its(:identity) { should == @mock_node[:href] }
29
+ its(:name) { should == @mock_node[:name] }
30
+ its(:id) { should == @mock_node[:id] }
31
+ its(:port) { should == @mock_node[:port] }
32
+ its(:enabled) { should == @mock_node[:enabled] }
33
+ its(:description) { should == @mock_node[:description] }
34
+
35
+ end
36
+ end
37
+ else
38
+ end
@@ -0,0 +1,29 @@
1
+ require File.join(File.dirname(__FILE__),'..','..','..','spec_helper')
2
+
3
+ if Fog.mocking?
4
+ describe "Fog::Vcloud::Terremark::Ecloud::InternetServices", :type => :mock_tmrk_ecloud_model do
5
+ context "as an attribute of an internet_service" do
6
+ subject { @vcloud.vdcs.first.public_ips.first.internet_services.first }
7
+
8
+ it { should respond_to :nodes }
9
+
10
+ describe :class do
11
+ subject { @vcloud.vdcs.first.public_ips.first.internet_services.first.nodes.class }
12
+ its(:model) { should == Fog::Vcloud::Terremark::Ecloud::Node }
13
+ end
14
+
15
+ describe :nodes do
16
+ subject { @vcloud.vdcs.first.public_ips.first.internet_services.first.nodes }
17
+
18
+ it { should respond_to :create }
19
+
20
+ it { should be_an_instance_of Fog::Vcloud::Terremark::Ecloud::Nodes }
21
+
22
+ its(:length) { should == 2 }
23
+
24
+ it { should have_members_of_the_right_model }
25
+ end
26
+ end
27
+ end
28
+ else
29
+ end
@@ -35,11 +35,13 @@ if Fog.mocking?
35
35
  let(:body) { subject.body }
36
36
 
37
37
  its(:body) { should be_an_instance_of Hash }
38
- specify { body[:Href].should == Fog::Vcloud::Terremark::Ecloud::Mock.internet_service_href( { :id => 372 } ) }
39
- specify { body[:Name].should == "Test Service" }
40
- specify { body[:Protocol].should == "HTTP" }
41
- specify { body[:Enabled].should == "true" }
42
- specify { body[:Description].should == "this is a test" }
38
+ specify { body[:Href].should_not be_empty }
39
+ specify { body[:Name].should == @new_service_data[:name] }
40
+ specify { body[:Protocol].should == @new_service_data[:protocol] }
41
+ specify { body[:Enabled].should == @new_service_data[:enabled] }
42
+ specify { body[:Description].should == @new_service_data[:description] }
43
+ specify { body[:RedirectURL].should == @new_service_data[:redirect_url] }
44
+ specify { body[:Monitor].should == nil }
43
45
 
44
46
  let(:public_ip) { subject.body[:PublicIpAddress] }
45
47
  specify { public_ip.should be_an_instance_of Hash }
@@ -0,0 +1,52 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', '..', 'spec_helper')
2
+
3
+ if Fog.mocking?
4
+ #FIXME: with rspec2
5
+ describe "Fog::Vcloud, initialized w/ the TMRK Ecloud module", :type => :mock_tmrk_ecloud_request do
6
+ subject { @vcloud }
7
+
8
+ it { should respond_to :add_node }
9
+
10
+ describe "#add_node" do
11
+
12
+ let(:new_node_data) { { :ip_address => '1.2.3.4',
13
+ :name => 'Foo',
14
+ :port => '9090',
15
+ :enabled => 'true',
16
+ :description => 'Foo Service'
17
+ } }
18
+
19
+ context "with a valid node services uri" do
20
+
21
+ subject { @vcloud.add_node(@mock_service[:href] + "/nodeServices", new_node_data) }
22
+
23
+ it_should_behave_like "all responses"
24
+
25
+ let(:service) { @vcloud.vdcs.first.public_ips.first.internet_services.first }
26
+
27
+ it "should change the count by 1" do
28
+ service.nodes.length.should == 2
29
+ subject
30
+ service.nodes.reload.length.should == 3
31
+ end
32
+
33
+ describe "#body" do
34
+ subject { @vcloud.add_node(@mock_service[:href] + "/nodeServices", new_node_data).body }
35
+ its(:Enabled) { should == new_node_data[:enabled] }
36
+ its(:Port) { should == new_node_data[:port] }
37
+ its(:IpAddress) { should == new_node_data[:ip_address] }
38
+ its(:Name) { should == new_node_data[:name] }
39
+ its(:Description) { should == new_node_data[:description] }
40
+ end
41
+ end
42
+
43
+ context "with a nodes uri that doesn't exist" do
44
+ subject { lambda { @vcloud.add_node(URI.parse('https://www.fakey.c/piv8vc99'), new_node_data ) } }
45
+
46
+ it_should_behave_like "a request for a resource that doesn't exist"
47
+ end
48
+ end
49
+ end
50
+ else
51
+ end
52
+
@@ -0,0 +1,58 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', '..', 'spec_helper')
2
+
3
+ if Fog.mocking?
4
+ describe "Fog::Vcloud, initialized w/ the TMRK Ecloud module", :type => :mock_tmrk_ecloud_request do
5
+ subject { @vcloud }
6
+
7
+ it { should respond_to :configure_node }
8
+
9
+ describe "#configure_node" do
10
+ let(:original_node) { @vcloud.vdcs.first.public_ips.first.internet_services.first.nodes.first }
11
+ let(:node_data) { { :name => "TEST BOOM", :enabled => "false", :description => "TEST BOOM DESC" } }
12
+
13
+ context "with a valid node service uri" do
14
+
15
+ subject { @vcloud.configure_node(@mock_node[:href],node_data) }
16
+
17
+ it_should_behave_like "all responses"
18
+
19
+ describe "#body" do
20
+ subject { @vcloud.configure_node(@mock_node[:href],node_data).body }
21
+
22
+ its(:Description) { should == node_data[:description] }
23
+ its(:Href) { should == @mock_node[:href] }
24
+ its(:Name) { should == node_data[:name] }
25
+ its(:Id) { should == @mock_node[:id] }
26
+ its(:Port) { should == @mock_node[:port] }
27
+ its(:Enabled) { should == node_data[:enabled] }
28
+ its(:IpAddress) { should == @mock_node[:ip_address] }
29
+ end
30
+
31
+ it "should change the name" do
32
+ original_node.name.should == @mock_node[:name]
33
+ subject
34
+ original_node.reload.name.should == node_data[:name]
35
+ end
36
+
37
+ it "should change enabled" do
38
+ original_node.enabled.should == @mock_node[:enabled]
39
+ subject
40
+ original_node.reload.enabled.should == node_data[:enabled]
41
+ end
42
+
43
+ it "should change the description" do
44
+ original_node.description.should == @mock_node[:description]
45
+ subject
46
+ original_node.reload.description.should == node_data[:description]
47
+ end
48
+ end
49
+
50
+ context "with a nodes uri that doesn't exist" do
51
+ subject { lambda { @vcloud.configure_node(URI.parse('https://www.fakey.c/piv8vc99'), node_data) } }
52
+
53
+ it_should_behave_like "a request for a resource that doesn't exist"
54
+ end
55
+ end
56
+ end
57
+ else
58
+ end
@@ -1,36 +1,35 @@
1
1
  require File.join(File.dirname(__FILE__), '..', '..', '..', 'spec_helper')
2
2
 
3
+ #FIXME: Make this more sane with rspec2
3
4
  if Fog.mocking?
4
5
  describe "Fog::Vcloud, initialized w/ the TMRK Ecloud module", :type => :mock_tmrk_ecloud_request do
5
6
  subject { @vcloud }
6
7
 
7
- #it { should respond_to :delete_internet_service }
8
+ it { should respond_to :delete_internet_service }
8
9
 
9
- #describe "#delete_internet_service" do
10
- # before do
11
- # @public_ip = @vcloud.vdcs[0].public_ips[0]
12
- # @before_services = @vcloud.get_internet_services(@public_ip.href)
13
- # end
10
+ describe "#delete_internet_service" do
11
+ context "with a valid internet service uri" do
12
+ subject { @vcloud.delete_internet_service(@mock_service[:href]) }
14
13
 
15
- # context "with a valid internet service uri" do
16
- # subject { @vcloud.delete_internet_service(@before_services.body.tap{|o| pp o}.links[0].href) }
17
- #
18
- # specify { @before_services.body.links.should have(2).links }
14
+ it_should_behave_like "all delete responses"
19
15
 
20
- # it "has the right number of Internet Services after" do
21
- # subject
22
- # after_services = @vcloud.get_internet_services(@public_ip.href)
23
- # after_services.body.links.should have(1).link
24
- # end
16
+ let(:public_ip) { @vcloud.vdcs.first.public_ips.first }
25
17
 
26
- # end
18
+ it "should change the count by -1" do
19
+ public_ip.internet_services.length.should == 2
20
+ subject
21
+ public_ip.internet_services.reload.length.should == 1
22
+ end
27
23
 
28
- # context "with a public_ips_uri that doesn't exist" do
29
- # subject { lambda { @vcloud.delete_internet_service(URI.parse('https://www.fakey.c/piv8vc99')) } }
24
+ describe "#body" do
25
+ its(:body) { should == '' }
26
+ end
30
27
 
31
- # it_should_behave_like "a request for a resource that doesn't exist"
32
- # end
33
- #end
28
+
29
+
30
+ end
31
+
32
+ end
34
33
  end
35
34
  else
36
35
  end
@@ -0,0 +1,34 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', '..', 'spec_helper')
2
+
3
+ if Fog.mocking?
4
+ #FIXME: with rspec2
5
+ describe "Fog::Vcloud, initialized w/ the TMRK Ecloud module", :type => :mock_tmrk_ecloud_request do
6
+ subject { @vcloud }
7
+
8
+ it { should respond_to :delete_node }
9
+
10
+ describe "#delete_node" do
11
+ context "with a valid node service uri" do
12
+ subject { @vcloud.delete_node(@mock_node[:href]) }
13
+
14
+ #it_should_behave_like "all delete responses"
15
+
16
+ let(:internet_service) { @vcloud.vdcs.first.public_ips.first.internet_services.first }
17
+
18
+ it "should change the count by -1" do
19
+ internet_service.nodes.length.should == 2
20
+ subject
21
+ internet_service.nodes.reload.length.should == 1
22
+ end
23
+ end
24
+
25
+ context "with a nodes uri that doesn't exist" do
26
+ subject { lambda { @vcloud.delete_node(URI.parse('https://www.fakey.c/piv8vc99')) } }
27
+
28
+ it_should_behave_like "a request for a resource that doesn't exist"
29
+ end
30
+ end
31
+ end
32
+ else
33
+ end
34
+
@@ -0,0 +1,41 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', '..', 'spec_helper')
2
+
3
+ if Fog.mocking?
4
+ describe "Fog::Vcloud, initialized w/ the TMRK Ecloud module", :type => :mock_tmrk_ecloud_request do
5
+ subject { @vcloud }
6
+
7
+ it { should respond_to :get_node }
8
+
9
+ describe "#get_node" do
10
+ context "with a valid nodes_uri" do
11
+ before { @node = @vcloud.get_node(@mock_node[:href]) }
12
+ subject { @node }
13
+
14
+ it_should_behave_like "all responses"
15
+ it { should have_headers_denoting_a_content_type_of "application/vnd.tmrk.ecloud.nodeService+xml" }
16
+
17
+ describe "#body" do
18
+ subject { @node.body }
19
+
20
+ it { should have(9).keys }
21
+
22
+ its(:Href) { should == @mock_node[:href] }
23
+ its(:Id) { should == @mock_node[:id] }
24
+ its(:Name) { should == @mock_node[:name] }
25
+ its(:Enabled) { should == @mock_node[:enabled] }
26
+ its(:Port) { should == @mock_node[:port] }
27
+ its(:Description) { should == @mock_node[:description]}
28
+ its(:IpAddress) { should == @mock_node[:ip_address]}
29
+
30
+ end
31
+ end
32
+
33
+ context "with a public_ips_uri that doesn't exist" do
34
+ subject { lambda { @vcloud.get_node(URI.parse('https://www.fakey.c/piv8vc99')) } }
35
+
36
+ it_should_behave_like "a request for a resource that doesn't exist"
37
+ end
38
+ end
39
+ end
40
+ else
41
+ end
@@ -0,0 +1,58 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', '..', 'spec_helper')
2
+
3
+ if Fog.mocking?
4
+ describe "Fog::Vcloud, initialized w/ the TMRK Ecloud module", :type => :mock_tmrk_ecloud_request do
5
+ subject { @vcloud }
6
+
7
+ it { should respond_to :get_nodes }
8
+
9
+ describe "#get_nodes" do
10
+ context "with a valid nodes_uri" do
11
+ before { @nodes = @vcloud.get_nodes(@mock_service[:href] + "/nodeServices") }
12
+ subject { @nodes }
13
+
14
+ it_should_behave_like "all responses"
15
+ it { should have_headers_denoting_a_content_type_of "application/vnd.tmrk.ecloud.nodeService+xml" }
16
+
17
+ describe "#body" do
18
+ subject { @nodes.body }
19
+
20
+ it { should have(3).items }
21
+
22
+ describe "[:NodeService]" do
23
+ subject { @nodes.body[:NodeService] }
24
+
25
+ it { should have(@mock_service[:nodes].length).nodes }
26
+
27
+ [0,1].each do |idx|
28
+
29
+ context "[#{idx}]" do
30
+ subject { @nodes.body[:NodeService][idx] }
31
+ let(:mock_node) { @mock_service[:nodes][idx] }
32
+ let(:keys) { subject.keys.sort {|a,b| a.to_s <=> b.to_s } }
33
+ specify { keys.should == [:Description, :Enabled, :Href, :Id, :IpAddress, :Name, :Port] }
34
+ its(:Href) { should == mock_node[:href] }
35
+ its(:Id) { should == mock_node[:id] }
36
+ its(:Name) { should == mock_node[:name] }
37
+ its(:Enabled) { should == mock_node[:enabled] }
38
+ its(:Port) { should == mock_node[:port] }
39
+ its(:IpAddress) { should == mock_node[:ip_address] }
40
+ its(:Description) { should == mock_node[:description] }
41
+ end
42
+
43
+ end
44
+
45
+ end
46
+
47
+ end
48
+ end
49
+
50
+ context "with a public_ips_uri that doesn't exist" do
51
+ subject { lambda { @vcloud.get_nodes(URI.parse('https://www.fakey.c/piv8vc99')) } }
52
+
53
+ it_should_behave_like "a request for a resource that doesn't exist"
54
+ end
55
+ end
56
+ end
57
+ else
58
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 6
9
- version: 0.2.6
8
+ - 7
9
+ version: 0.2.7
10
10
  platform: ruby
11
11
  authors:
12
12
  - geemus (Wesley Beary)
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-06-29 00:00:00 -05:00
17
+ date: 2010-06-30 00:00:00 -05:00
18
18
  default_executable: fog
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -617,17 +617,24 @@ files:
617
617
  - spec/vcloud/terremark/ecloud/models/ips_spec.rb
618
618
  - spec/vcloud/terremark/ecloud/models/network_spec.rb
619
619
  - spec/vcloud/terremark/ecloud/models/networks_spec.rb
620
+ - spec/vcloud/terremark/ecloud/models/node_spec.rb
621
+ - spec/vcloud/terremark/ecloud/models/nodes_spec.rb
620
622
  - spec/vcloud/terremark/ecloud/models/public_ip_spec.rb
621
623
  - spec/vcloud/terremark/ecloud/models/public_ips_spec.rb
622
624
  - spec/vcloud/terremark/ecloud/models/vdc_spec.rb
623
625
  - spec/vcloud/terremark/ecloud/models/vdcs_spec.rb
624
626
  - spec/vcloud/terremark/ecloud/requests/add_internet_service_spec.rb
627
+ - spec/vcloud/terremark/ecloud/requests/add_node_spec.rb
625
628
  - spec/vcloud/terremark/ecloud/requests/configure_internet_service_spec.rb
629
+ - spec/vcloud/terremark/ecloud/requests/configure_node_spec.rb
626
630
  - spec/vcloud/terremark/ecloud/requests/delete_internet_service_spec.rb
631
+ - spec/vcloud/terremark/ecloud/requests/delete_node_spec.rb
627
632
  - spec/vcloud/terremark/ecloud/requests/get_internet_services_spec.rb
628
633
  - spec/vcloud/terremark/ecloud/requests/get_network_ip_spec.rb
629
634
  - spec/vcloud/terremark/ecloud/requests/get_network_ips_spec.rb
630
635
  - spec/vcloud/terremark/ecloud/requests/get_network_spec.rb
636
+ - spec/vcloud/terremark/ecloud/requests/get_node_spec.rb
637
+ - spec/vcloud/terremark/ecloud/requests/get_nodes_spec.rb
631
638
  - spec/vcloud/terremark/ecloud/requests/get_public_ip_spec.rb
632
639
  - spec/vcloud/terremark/ecloud/requests/get_public_ips_spec.rb
633
640
  - spec/vcloud/terremark/ecloud/requests/get_vdc_spec.rb