fog 0.1.8 → 0.1.9

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 (128) hide show
  1. data/Gemfile +2 -2
  2. data/Gemfile.lock +5 -5
  3. data/README.rdoc +29 -29
  4. data/fog.gemspec +24 -2
  5. data/lib/fog.rb +4 -15
  6. data/lib/fog/aws.rb +2 -2
  7. data/lib/fog/aws/ec2.rb +64 -101
  8. data/lib/fog/aws/elb.rb +19 -27
  9. data/lib/fog/aws/models/ec2/addresses.rb +1 -9
  10. data/lib/fog/aws/models/ec2/flavors.rb +1 -7
  11. data/lib/fog/aws/models/ec2/images.rb +1 -7
  12. data/lib/fog/aws/models/ec2/key_pairs.rb +1 -7
  13. data/lib/fog/aws/models/ec2/security_groups.rb +1 -7
  14. data/lib/fog/aws/models/ec2/servers.rb +1 -7
  15. data/lib/fog/aws/models/ec2/snapshots.rb +1 -9
  16. data/lib/fog/aws/models/ec2/volumes.rb +1 -9
  17. data/lib/fog/aws/models/s3/directories.rb +1 -7
  18. data/lib/fog/aws/models/s3/file.rb +5 -0
  19. data/lib/fog/aws/requests/ec2/allocate_address.rb +2 -0
  20. data/lib/fog/aws/requests/ec2/attach_volume.rb +2 -0
  21. data/lib/fog/aws/requests/ec2/create_key_pair.rb +2 -0
  22. data/lib/fog/aws/requests/ec2/create_snapshot.rb +2 -0
  23. data/lib/fog/aws/requests/ec2/create_volume.rb +2 -0
  24. data/lib/fog/aws/requests/ec2/describe_addresses.rb +2 -0
  25. data/lib/fog/aws/requests/ec2/describe_availability_zones.rb +2 -0
  26. data/lib/fog/aws/requests/ec2/describe_images.rb +2 -0
  27. data/lib/fog/aws/requests/ec2/describe_instances.rb +2 -0
  28. data/lib/fog/aws/requests/ec2/describe_key_pairs.rb +2 -0
  29. data/lib/fog/aws/requests/ec2/describe_regions.rb +2 -0
  30. data/lib/fog/aws/requests/ec2/describe_reserved_instances.rb +2 -0
  31. data/lib/fog/aws/requests/ec2/describe_security_groups.rb +2 -0
  32. data/lib/fog/aws/requests/ec2/describe_snapshots.rb +2 -0
  33. data/lib/fog/aws/requests/ec2/describe_volumes.rb +2 -0
  34. data/lib/fog/aws/requests/ec2/detach_volume.rb +2 -0
  35. data/lib/fog/aws/requests/ec2/get_console_output.rb +2 -0
  36. data/lib/fog/aws/requests/ec2/run_instances.rb +2 -0
  37. data/lib/fog/aws/requests/ec2/terminate_instances.rb +2 -0
  38. data/lib/fog/aws/requests/elb/create_load_balancer.rb +2 -0
  39. data/lib/fog/aws/requests/elb/delete_load_balancer.rb +2 -0
  40. data/lib/fog/aws/requests/elb/deregister_instances_from_load_balancer.rb +2 -0
  41. data/lib/fog/aws/requests/elb/describe_instance_health.rb +2 -0
  42. data/lib/fog/aws/requests/elb/describe_load_balancers.rb +2 -0
  43. data/lib/fog/aws/requests/elb/disable_availability_zones_for_load_balancer.rb +2 -0
  44. data/lib/fog/aws/requests/elb/enable_availability_zones_for_load_balancer.rb +2 -0
  45. data/lib/fog/aws/requests/elb/register_instances_with_load_balancer.rb +2 -0
  46. data/lib/fog/aws/requests/s3/copy_object.rb +2 -0
  47. data/lib/fog/aws/requests/s3/get_bucket.rb +2 -0
  48. data/lib/fog/aws/requests/s3/get_bucket_acl.rb +2 -0
  49. data/lib/fog/aws/requests/s3/get_bucket_location.rb +2 -0
  50. data/lib/fog/aws/requests/s3/get_bucket_logging.rb +2 -0
  51. data/lib/fog/aws/requests/s3/get_bucket_object_versions.rb +2 -0
  52. data/lib/fog/aws/requests/s3/get_bucket_versioning.rb +2 -0
  53. data/lib/fog/aws/requests/s3/get_object_acl.rb +2 -0
  54. data/lib/fog/aws/requests/s3/get_request_payment.rb +2 -0
  55. data/lib/fog/aws/requests/s3/get_service.rb +2 -0
  56. data/lib/fog/aws/requests/s3/put_object.rb +2 -2
  57. data/lib/fog/aws/requests/simpledb/domain_metadata.rb +2 -0
  58. data/lib/fog/aws/requests/simpledb/get_attributes.rb +2 -0
  59. data/lib/fog/aws/requests/simpledb/list_domains.rb +2 -0
  60. data/lib/fog/aws/requests/simpledb/select.rb +2 -0
  61. data/lib/fog/aws/s3.rb +68 -85
  62. data/lib/fog/aws/simpledb.rb +15 -29
  63. data/lib/fog/bluebox.rb +23 -40
  64. data/lib/fog/bluebox/models/flavors.rb +1 -7
  65. data/lib/fog/bluebox/models/images.rb +1 -9
  66. data/lib/fog/bluebox/models/servers.rb +1 -7
  67. data/lib/fog/credentials.rb +2 -0
  68. data/lib/fog/errors.rb +20 -0
  69. data/lib/fog/hmac.rb +48 -0
  70. data/lib/fog/local.rb +9 -22
  71. data/lib/fog/local/models/directories.rb +1 -7
  72. data/lib/fog/rackspace.rb +2 -6
  73. data/lib/fog/rackspace/files.rb +46 -48
  74. data/lib/fog/rackspace/models/files/directories.rb +1 -7
  75. data/lib/fog/rackspace/models/servers/flavors.rb +1 -7
  76. data/lib/fog/rackspace/models/servers/images.rb +1 -9
  77. data/lib/fog/rackspace/models/servers/server.rb +37 -1
  78. data/lib/fog/rackspace/models/servers/servers.rb +8 -7
  79. data/lib/fog/rackspace/requests/files/put_object.rb +1 -1
  80. data/lib/fog/rackspace/servers.rb +33 -45
  81. data/lib/fog/service.rb +82 -0
  82. data/lib/fog/slicehost.rb +28 -42
  83. data/lib/fog/slicehost/models/flavors.rb +1 -7
  84. data/lib/fog/slicehost/models/images.rb +1 -9
  85. data/lib/fog/slicehost/models/servers.rb +1 -7
  86. data/lib/fog/ssh.rb +1 -1
  87. data/lib/fog/vcloud.rb +20 -3
  88. data/lib/fog/vcloud/collection.rb +25 -5
  89. data/lib/fog/vcloud/model.rb +4 -0
  90. data/lib/fog/vcloud/parsers/get_organization.rb +2 -2
  91. data/lib/fog/vcloud/parsers/get_vdc.rb +2 -2
  92. data/lib/fog/vcloud/parsers/get_versions.rb +1 -1
  93. data/lib/fog/vcloud/parsers/login.rb +2 -2
  94. data/lib/fog/vcloud/parsers/network.rb +53 -0
  95. data/lib/fog/vcloud/requests/get_network.rb +54 -0
  96. data/lib/fog/vcloud/requests/get_organization.rb +1 -2
  97. data/lib/fog/vcloud/terremark/ecloud.rb +17 -4
  98. data/lib/fog/vcloud/terremark/ecloud/models/internet_service.rb +35 -0
  99. data/lib/fog/vcloud/terremark/ecloud/models/internet_services.rb +9 -9
  100. data/lib/fog/vcloud/terremark/ecloud/models/ip.rb +18 -0
  101. data/lib/fog/vcloud/terremark/ecloud/models/ips.rb +36 -0
  102. data/lib/fog/vcloud/terremark/ecloud/models/network.rb +32 -0
  103. data/lib/fog/vcloud/terremark/ecloud/models/networks.rb +38 -0
  104. data/lib/fog/vcloud/terremark/ecloud/models/public_ip.rb +3 -1
  105. data/lib/fog/vcloud/terremark/ecloud/models/public_ips.rb +1 -1
  106. data/lib/fog/vcloud/terremark/ecloud/models/vdc.rb +9 -0
  107. data/lib/fog/vcloud/terremark/ecloud/models/vdcs.rb +2 -0
  108. data/lib/fog/vcloud/terremark/ecloud/parsers/network.rb +28 -0
  109. data/lib/fog/vcloud/terremark/ecloud/parsers/network_ips.rb +31 -0
  110. data/lib/fog/vcloud/terremark/ecloud/requests/add_internet_service.rb +10 -7
  111. data/lib/fog/vcloud/terremark/ecloud/requests/configure_internet_service.rb +99 -0
  112. data/lib/fog/vcloud/terremark/ecloud/requests/get_network.rb +54 -0
  113. data/lib/fog/vcloud/terremark/ecloud/requests/get_network_ips.rb +51 -0
  114. data/spec/aws/models/s3/file_spec.rb +15 -0
  115. data/spec/vcloud/requests/get_network_spec.rb +55 -0
  116. data/spec/vcloud/spec_helper.rb +1 -0
  117. data/spec/vcloud/terremark/ecloud/models/internet_service_spec.rb +15 -0
  118. data/spec/vcloud/terremark/ecloud/models/ip_spec.rb +35 -0
  119. data/spec/vcloud/terremark/ecloud/models/ips_spec.rb +28 -0
  120. data/spec/vcloud/terremark/ecloud/models/network_spec.rb +65 -0
  121. data/spec/vcloud/terremark/ecloud/models/networks_spec.rb +26 -0
  122. data/spec/vcloud/terremark/ecloud/models/public_ip_spec.rb +0 -2
  123. data/spec/vcloud/terremark/ecloud/requests/configure_internet_service_spec.rb +44 -0
  124. data/spec/vcloud/terremark/ecloud/requests/get_network_ips_spec.rb +54 -0
  125. data/spec/vcloud/terremark/ecloud/requests/get_network_spec.rb +63 -0
  126. data/tests/aws/requests/ec2/volume_tests.rb +2 -2
  127. data/tests/helper.rb +2 -0
  128. metadata +25 -3
@@ -0,0 +1,55 @@
1
+ require "spec_helper"
2
+
3
+ describe Fog::Vcloud, :type => :vcloud_request do
4
+ subject { @vcloud }
5
+
6
+ it { should respond_to :get_network }
7
+
8
+ describe :get_network, :type => :vcloud_request do
9
+ context "with a valid network uri" do
10
+ before { @network = @vcloud.get_network(URI.parse(@mock_network[:href])) }
11
+ subject { @network }
12
+
13
+ it_should_behave_like "all requests"
14
+
15
+ its(:headers) { should include "Content-Type" }
16
+ its(:body) { should be_an_instance_of Struct::VcloudNetwork }
17
+
18
+ describe :headers do
19
+ let(:header) { @network.headers["Content-Type"] }
20
+ specify { header.should == "application/vnd.vmware.vcloud.network+xml" }
21
+ end
22
+
23
+ describe :body do
24
+ subject { @network.body }
25
+
26
+ it_should_behave_like "it has a vcloud v0.8 xmlns"
27
+
28
+ its(:configuration) { should be_an_instance_of Struct::VcloudNetworkConfiguration }
29
+ its(:features) { should be_an_instance_of Array }
30
+ its(:href) { should == URI.parse("https://fakey.com/api/v0.8/network/31") }
31
+ its(:type) { should == "application/vnd.vmware.vcloud.network+xml" }
32
+ its(:name) { should == @mock_network[:name] }
33
+ its(:description) { should == @mock_network[:name] }
34
+
35
+ describe :configuration do
36
+ subject { @network.body.configuration }
37
+
38
+ its(:gateway) { should == "1.2.3.1" }
39
+ its(:netmask) { should == "255.255.255.0" }
40
+ its(:dns) { should == "8.8.8.8" }
41
+ end
42
+
43
+ describe "FenceMode Feature" do
44
+ subject { @network.body.features.detect { |feature| feature.is_a?(Struct::VcloudNetworkFenceMode) } }
45
+ its(:mode) { should == "isolated" }
46
+ end
47
+
48
+ end
49
+ end
50
+ context "with a network uri that doesn't exist" do
51
+ subject { lambda { @vcloud.get_network(URI.parse('https://www.fakey.com/api/v0.8/network/999')) } }
52
+ it_should_behave_like "a request for a resource that doesn't exist"
53
+ end
54
+ end
55
+ end
@@ -176,6 +176,7 @@ Spec::Runner.configure do |config|
176
176
  @mock_version = @mock_data[:versions][0]
177
177
  @mock_organization = @mock_data[:organizations][0]
178
178
  @mock_vdc = @mock_organization[:vdcs][0]
179
+ @mock_network = @mock_vdc[:networks][0]
179
180
  end
180
181
  config.after(:all) do
181
182
  Fog::Vcloud::Mock.data_reset
@@ -38,6 +38,8 @@ describe "Fog::Vcloud::Terremark::Ecloud::InternetService", :type => :tmrk_eclou
38
38
  context "as a collection member" do
39
39
  subject { @vcloud.vdcs[0].public_ips[0].internet_services[0] }
40
40
  let(:public_ip) { @vcloud.get_public_ip(@vcloud.vdcs[0].public_ips[0].internet_services[0].public_ip.href).body }
41
+ let(:composed_public_ip_data) { @vcloud.vdcs[0].public_ips[0].internet_services[0].send(:_compose_ip_data) }
42
+ let(:composed_service_data) { @vcloud.vdcs[0].public_ips[0].internet_services[0].send(:_compose_service_data) }
41
43
 
42
44
  it { should be_an_instance_of Fog::Vcloud::Terremark::Ecloud::InternetService }
43
45
 
@@ -54,5 +56,18 @@ describe "Fog::Vcloud::Terremark::Ecloud::InternetService", :type => :tmrk_eclou
54
56
  its(:timeout) { should == 2 }
55
57
  its(:url_send_string) { should == nil }
56
58
  its(:http_header) { should == nil }
59
+
60
+ specify { composed_public_ip_data[:href].should == public_ip.href.to_s }
61
+ specify { composed_public_ip_data[:name].should == public_ip.name }
62
+ specify { composed_public_ip_data[:id].should == public_ip.id }
63
+
64
+ specify { composed_service_data[:href].should == subject.href.to_s }
65
+ specify { composed_service_data[:name].should == subject.name }
66
+ specify { composed_service_data[:id].should == subject.id.to_s }
67
+ specify { composed_service_data[:protocol].should == subject.protocol }
68
+ specify { composed_service_data[:port].should == subject.port.to_s }
69
+ specify { composed_service_data[:enabled].should == subject.enabled.to_s }
70
+ specify { composed_service_data[:description].should == subject.description }
71
+ specify { composed_service_data[:timeout].should == subject.timeout.to_s }
57
72
  end
58
73
  end
@@ -0,0 +1,35 @@
1
+ require File.join(File.dirname(__FILE__),'..','..','..','spec_helper')
2
+
3
+ describe "Fog::Vcloud::Terremark::Ecloud::Ip", :type => :tmrk_ecloud_model do
4
+ subject { @vcloud }
5
+
6
+ describe :class do
7
+ subject { Fog::Vcloud::Terremark::Ecloud::Ip }
8
+
9
+ it { should have_identity :name }
10
+ it { should have_only_these_attributes [:name, :status, :server] }
11
+ end
12
+
13
+ context "with no uri" do
14
+
15
+ subject { Fog::Vcloud::Terremark::Ecloud::Ip.new() }
16
+
17
+ its(:name) { should be_nil }
18
+ its(:status) { should be_nil }
19
+ its(:server) { should be_nil }
20
+ end
21
+
22
+ context "as a collection member" do
23
+ subject { @vcloud.vdcs[0].networks[0].ips[0] }
24
+ let(:status) { @mock_network[:ips].keys.include?(@vcloud.vdcs[0].networks[0].ips[0].name) ? "Assigned" : nil }
25
+ let(:server) { @mock_network[:ips][@vcloud.vdcs[0].networks[0].ips[0].name] }
26
+
27
+ it { should be_an_instance_of Fog::Vcloud::Terremark::Ecloud::Ip }
28
+
29
+ its(:name) { should == IPAddr.new(@mock_network[:name]).to_range.to_a[3].to_s }
30
+ its(:status) { should == status }
31
+ its(:server) { should == server }
32
+
33
+ end
34
+ end
35
+
@@ -0,0 +1,28 @@
1
+ require File.join(File.dirname(__FILE__),'..','..','..','spec_helper')
2
+
3
+ describe "Fog::Vcloud::Terremark::Ecloud::Ips", :type => :tmrk_ecloud_model do
4
+ subject { @vcloud }
5
+
6
+ it { should_not respond_to :ips }
7
+
8
+ describe :class do
9
+ subject { @vcloud.vdcs[0].networks[0].ips.class }
10
+ its(:model) { should == Fog::Vcloud::Terremark::Ecloud::Ip }
11
+ its(:get_request) { should be_nil }
12
+ its(:all_request) { should be_nil }
13
+ its(:vcloud_type) { should be_nil }
14
+ it { should_not respond_to :create }
15
+ end
16
+
17
+ describe :ips do
18
+ subject { @vcloud.vdcs[0].networks[0].ips }
19
+
20
+ it { should be_an_instance_of Fog::Vcloud::Terremark::Ecloud::Ips }
21
+
22
+ its(:length) { should == 252 }
23
+
24
+ it { should have_members_of_the_right_model }
25
+ end
26
+ end
27
+
28
+
@@ -0,0 +1,65 @@
1
+ require File.join(File.dirname(__FILE__),'..','..','..','spec_helper')
2
+
3
+ describe "Fog::Vcloud::Terremark::Ecloud::Network", :type => :tmrk_ecloud_model do
4
+ subject { @vcloud }
5
+
6
+ describe :class do
7
+ subject { Fog::Vcloud::Terremark::Ecloud::Network }
8
+
9
+ it { should have_identity :href }
10
+ it { should have_only_these_attributes [:href, :name, :features, :configuration, :ips_link, :type, :xmlns] }
11
+ end
12
+
13
+ context "with no uri" do
14
+
15
+ subject { Fog::Vcloud::Terremark::Ecloud::Network.new() }
16
+
17
+ its(:href) { should be_nil }
18
+ its(:identity) { should be_nil }
19
+ its(:name) { should be_nil }
20
+ its(:type) { should be_nil }
21
+ its(:features) { should be_nil }
22
+ its(:configuration) { should be_nil }
23
+ its(:ips_link) { should be_nil }
24
+ its(:xmlns) { should be_nil }
25
+ end
26
+
27
+ context "as a collection member" do
28
+ subject { @vcloud.vdcs[0].networks[0] }
29
+
30
+ it { should be_an_instance_of Fog::Vcloud::Terremark::Ecloud::Network }
31
+
32
+ it_should_behave_like "it has a vcloud v0.8 xmlns"
33
+
34
+ its(:href) { should == URI.parse(@mock_network[:href]) }
35
+ its(:identity) { should == URI.parse(@mock_network[:href]) }
36
+ its(:name) { should == @mock_network[:name] }
37
+ its(:type) { should == "application/vnd.vmware.vcloud.network+xml" }
38
+
39
+ it { should have(1).features }
40
+
41
+ describe :features do
42
+ let(:feature) { subject.features[0] }
43
+ specify { feature.should be_an_instance_of Struct::VcloudNetworkFenceMode }
44
+ specify { feature.mode.should == "isolated" }
45
+ end
46
+
47
+ describe :configurations do
48
+ let(:configuration) { subject.configuration }
49
+ specify { configuration.should be_an_instance_of Struct::VcloudNetworkConfiguration }
50
+ specify { configuration.gateway.should == @mock_network[:gateway] }
51
+ specify { configuration.netmask.should == @mock_network[:netmask] }
52
+ specify { configuration.dns.should be_nil }
53
+ end
54
+
55
+ describe :ips_link do
56
+ let(:ips_link) { subject.ips_link }
57
+ specify { ips_link.rel.should == "down" }
58
+ specify { ips_link.href.should == URI.parse(@mock_network[:href] + "/ips") }
59
+ specify { ips_link.type.should == "application/xml" }
60
+ specify { ips_link.name.should == "IP Addresses" }
61
+ end
62
+
63
+ end
64
+ end
65
+
@@ -0,0 +1,26 @@
1
+ require File.join(File.dirname(__FILE__),'..','..','..','spec_helper')
2
+
3
+ describe "Fog::Vcloud::Terremark::Ecloud::Networks", :type => :tmrk_ecloud_model do
4
+ subject { @vcloud }
5
+
6
+ it { should respond_to :networks }
7
+
8
+ describe :class do
9
+ subject { @vcloud.networks.class }
10
+ its(:model) { should == Fog::Vcloud::Terremark::Ecloud::Network }
11
+ its(:get_request) { should == :get_network }
12
+ its(:all_request) { should be_an_instance_of Proc }
13
+ its(:vcloud_type) { should == "application/vnd.vmware.vcloud.network+xml" }
14
+ end
15
+
16
+ describe :networks do
17
+ subject { @vcloud.vdcs[0].networks }
18
+
19
+ it { should be_an_instance_of Fog::Vcloud::Terremark::Ecloud::Networks }
20
+
21
+ its(:length) { should == 2 }
22
+
23
+ it { should have_members_of_the_right_model }
24
+ end
25
+ end
26
+
@@ -8,8 +8,6 @@ describe "Fog::Vcloud::Terremark::Ecloud::PublicIp", :type => :tmrk_ecloud_model
8
8
 
9
9
  subject { @vcloud }
10
10
 
11
- it { should respond_to :get_public_ip }
12
-
13
11
  describe :class do
14
12
  subject { Fog::Vcloud::Terremark::Ecloud::PublicIp }
15
13
 
@@ -0,0 +1,44 @@
1
+ require "spec_helper"
2
+
3
+ describe "Fog::Vcloud, initialized w/ the TMRK Ecloud module", :type => :tmrk_ecloud_request do
4
+ subject { @vcloud }
5
+
6
+ it { should respond_to :configure_internet_service }
7
+
8
+ describe "#configure_internet_service" do
9
+ before do
10
+ @public_ip = @vcloud.vdcs[0].public_ips[0]
11
+ @original_service = @vcloud.get_internet_services(@public_ip.href).body.links.first
12
+ @service_data = {}
13
+ @original_service.each_pair { |sym, data| @service_data[sym] = data }
14
+ @ip_data = { :id => @public_ip.id, :name => @public_ip.name, :href => @public_ip.href.to_s }
15
+ end
16
+
17
+ context "with a valid Internet Service uri and valid data" do
18
+
19
+ subject { @vcloud.configure_internet_service(@original_service.href, @service_data, @ip_data) }
20
+
21
+ it_should_behave_like "all requests"
22
+
23
+ context "with some changed data" do
24
+ before do
25
+ @service_data[:description] = "TEST BOOM"
26
+ end
27
+ it "should change data" do
28
+ @original_service.description.should == "Web Servers"
29
+ result = subject
30
+ result.body.description.should == "TEST BOOM"
31
+ @vcloud.get_internet_services(@public_ip.href).body.links.first.description.should == "TEST BOOM"
32
+ end
33
+ end
34
+
35
+ end
36
+
37
+ context "with an internet_services_uri that doesn't exist" do
38
+ subject { lambda { @vcloud.configure_internet_service(URI.parse('https://www.fakey.c/piv8vc99'), @service_data, @ip_data ) } }
39
+
40
+ it_should_behave_like "a request for a resource that doesn't exist"
41
+ end
42
+ end
43
+ end
44
+
@@ -0,0 +1,54 @@
1
+ require "spec_helper"
2
+
3
+ describe "Fog::Vcloud, initialized w/ the TMRK Ecloud module", :type => :tmrk_ecloud_request do
4
+ subject { @vcloud }
5
+
6
+ it { should respond_to :get_network_ips }
7
+
8
+ describe "#get_network_ips" do
9
+ context "with a valid VDC network ips_uri" do
10
+ before { @ips = @vcloud.get_network_ips(URI.parse(@mock_network[:href] + "/ips")) }
11
+ subject { @ips }
12
+
13
+ it_should_behave_like "all requests"
14
+
15
+ its(:headers) { should include "Content-Type" }
16
+ specify { subject.headers['Content-Type'].should == "application/vnd.tmrk.ecloud.ipAddressesList+xml" }
17
+
18
+ its(:body) { should be_an_instance_of Struct::TmrkEcloudNetworkIps }
19
+
20
+ describe "#body" do
21
+ describe "#addresses" do
22
+ subject { @ips.body.addresses }
23
+
24
+ it { should have(252).addresses }
25
+
26
+ describe "one we know is assigned" do
27
+ let(:address) { subject[0] }
28
+
29
+ specify { address.status.should == "Assigned" }
30
+ specify { address.server.should == "Broom 1" }
31
+ specify { address.name.should == "1.2.3.3" }
32
+
33
+ end
34
+
35
+ describe "one we know is not assigned" do
36
+ let(:address) { subject[100] }
37
+
38
+ specify { address.status.should == "Available" }
39
+ specify { address.server.should == nil }
40
+ specify { address.name.should == "1.2.3.103" }
41
+
42
+ end
43
+
44
+ end
45
+ end
46
+ end
47
+
48
+ context "with a network ips uri that doesn't exist" do
49
+ subject { lambda { @vcloud.get_network_ips(URI.parse('https://www.fakey.c/piv8vc99')) } }
50
+
51
+ it_should_behave_like "a request for a resource that doesn't exist"
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,63 @@
1
+ require "spec_helper"
2
+
3
+ describe Fog::Vcloud, :type => :tmrk_ecloud_request do
4
+ subject { @vcloud }
5
+
6
+ it { should respond_to :get_network }
7
+
8
+ describe :get_network, :type => :vcloud_request do
9
+ context "with a valid network uri" do
10
+ before { @network = @vcloud.get_network(URI.parse(@mock_network[:href])) }
11
+ subject { @network }
12
+
13
+ it_should_behave_like "all requests"
14
+
15
+ its(:headers) { should include "Content-Type" }
16
+ its(:body) { should be_an_instance_of Struct::TmrkEcloudNetwork }
17
+
18
+ describe :headers do
19
+ let(:header) { @network.headers["Content-Type"] }
20
+ specify { header.should == "application/vnd.vmware.vcloud.network+xml" }
21
+ end
22
+
23
+ describe :body do
24
+ subject { @network.body }
25
+
26
+ it_should_behave_like "it has a vcloud v0.8 xmlns"
27
+
28
+ its(:configuration) { should be_an_instance_of Struct::VcloudNetworkConfiguration }
29
+ its(:features) { should be_an_instance_of Array }
30
+ its(:ips_link) { should be_an_instance_of Struct::VcloudLink }
31
+ its(:href) { should == URI.parse("https://fakey.com/api/v0.8/network/31") }
32
+ its(:type) { should == "application/vnd.vmware.vcloud.network+xml" }
33
+ its(:name) { should == @mock_network[:name] }
34
+
35
+ describe :configuration do
36
+ subject { @network.body.configuration }
37
+
38
+ its(:gateway) { should == "1.2.3.1" }
39
+ its(:netmask) { should == "255.255.255.0" }
40
+ end
41
+
42
+ describe :ips_link do
43
+ subject { @network.body.ips_link }
44
+ its(:href) { should == URI.parse(@mock_network[:href] + "/ips") }
45
+ its(:rel) { should == "down" }
46
+ its(:type) { should == "application/xml" }
47
+ its(:name) { should == "IP Addresses" }
48
+ end
49
+
50
+ describe "FenceMode Feature" do
51
+ subject { @network.body.features.detect { |feature| feature.is_a?(Struct::VcloudNetworkFenceMode) } }
52
+ its(:mode) { should == "isolated" }
53
+ end
54
+
55
+ end
56
+ end
57
+ context "with a network uri that doesn't exist" do
58
+ subject { lambda { @vcloud.get_network(URI.parse('https://www.fakey.com/api/v0.8/network/999')) } }
59
+ it_should_behave_like "a request for a resource that doesn't exist"
60
+ end
61
+ end
62
+ end
63
+
@@ -45,6 +45,8 @@ Shindo.tests('AWS::EC2 | volume requests', ['aws']) do
45
45
  data
46
46
  end
47
47
 
48
+ AWS[:ec2].volumes.get(@volume_id).wait_for { ready? }
49
+
48
50
  tests('#describe_volumes').formats(@volumes_format) do
49
51
  AWS[:ec2].describe_volumes.body
50
52
  end
@@ -53,8 +55,6 @@ Shindo.tests('AWS::EC2 | volume requests', ['aws']) do
53
55
  AWS[:ec2].describe_volumes.body
54
56
  end
55
57
 
56
- AWS[:ec2].volumes.get(@volume_id).wait_for { ready? }
57
-
58
58
  tests("#attach_volume(#{@server.identity}, #{@volume_id}, '/dev/sdh')").formats(@volume_attachment_format) do
59
59
  AWS[:ec2].attach_volume(@server.identity, @volume_id, '/dev/sdh').body
60
60
  end
@@ -51,6 +51,8 @@ module Shindo
51
51
  type = value.first
52
52
  if type.is_a?(Hash)
53
53
  valid &&= formats_kernel({:element => element}, {:element => type}, false)
54
+ elsif type.nil?
55
+ p "#{key} => #{value}"
54
56
  else
55
57
  valid &&= element.is_a?(type)
56
58
  end