fog 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
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