fog 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -2
- data/Gemfile.lock +6 -6
- data/README.rdoc +4 -1
- data/bin/fog +2 -1
- data/examples/bluebox_create.rb +33 -0
- data/fog.gemspec +58 -30
- data/lib/fog.rb +2 -1
- data/lib/fog/aws/elb.rb +0 -9
- data/lib/fog/aws/requests/elb/create_load_balancer.rb +3 -3
- data/lib/fog/aws/requests/elb/deregister_instances_from_load_balancer.rb +1 -1
- data/lib/fog/aws/requests/elb/describe_instance_health.rb +1 -1
- data/lib/fog/aws/requests/elb/describe_load_balancers.rb +1 -1
- data/lib/fog/aws/requests/elb/disable_availability_zones_for_load_balancer.rb +1 -1
- data/lib/fog/aws/requests/elb/enable_availability_zones_for_load_balancer.rb +1 -1
- data/lib/fog/aws/requests/elb/register_instances_with_load_balancer.rb +1 -1
- data/lib/fog/aws/requests/s3/get_bucket.rb +1 -6
- data/lib/fog/aws/requests/s3/get_bucket_acl.rb +1 -1
- data/lib/fog/aws/requests/s3/get_bucket_location.rb +1 -1
- data/lib/fog/aws/requests/s3/get_bucket_logging.rb +1 -1
- data/lib/fog/aws/requests/s3/get_bucket_object_versions.rb +1 -6
- data/lib/fog/aws/requests/s3/get_bucket_versioning.rb +1 -1
- data/lib/fog/aws/requests/s3/get_object.rb +1 -1
- data/lib/fog/aws/requests/s3/get_object_acl.rb +2 -2
- data/lib/fog/aws/requests/s3/get_object_torrent.rb +1 -1
- data/lib/fog/aws/requests/s3/get_request_payment.rb +1 -1
- data/lib/fog/aws/requests/s3/head_object.rb +1 -1
- data/lib/fog/aws/requests/s3/put_bucket_acl.rb +1 -1
- data/lib/fog/aws/requests/s3/put_bucket_logging.rb +1 -1
- data/lib/fog/aws/requests/s3/put_bucket_versioning.rb +1 -1
- data/lib/fog/aws/requests/s3/put_object_url.rb +54 -0
- data/lib/fog/aws/requests/s3/put_request_payment.rb +1 -1
- data/lib/fog/aws/s3.rb +7 -2
- data/lib/fog/bin.rb +1 -1
- data/lib/fog/bluebox.rb +100 -0
- data/lib/fog/bluebox/bin.rb +43 -0
- data/lib/fog/bluebox/models/flavor.rb +43 -0
- data/lib/fog/bluebox/models/flavors.rb +38 -0
- data/lib/fog/bluebox/models/image.rb +17 -0
- data/lib/fog/bluebox/models/images.rb +42 -0
- data/lib/fog/bluebox/models/server.rb +79 -0
- data/lib/fog/bluebox/models/servers.rb +39 -0
- data/lib/fog/bluebox/requests/create_block.rb +39 -0
- data/lib/fog/bluebox/requests/destroy_block.rb +32 -0
- data/lib/fog/bluebox/requests/get_block.rb +32 -0
- data/lib/fog/bluebox/requests/get_blocks.rb +34 -0
- data/lib/fog/bluebox/requests/get_product.rb +32 -0
- data/lib/fog/bluebox/requests/get_products.rb +31 -0
- data/lib/fog/bluebox/requests/get_template.rb +32 -0
- data/lib/fog/bluebox/requests/get_templates.rb +32 -0
- data/lib/fog/bluebox/requests/reboot_block.rb +33 -0
- data/lib/fog/credentials.rb +2 -1
- data/lib/fog/rackspace/files.rb +4 -12
- data/lib/fog/rackspace/models/servers/flavors.rb +1 -1
- data/lib/fog/rackspace/models/servers/images.rb +1 -1
- data/lib/fog/rackspace/models/servers/servers.rb +1 -1
- data/lib/fog/rackspace/requests/files/get_container.rb +1 -6
- data/lib/fog/rackspace/requests/files/get_containers.rb +1 -7
- data/lib/fog/rackspace/requests/files/head_container.rb +1 -1
- data/lib/fog/rackspace/requests/files/head_containers.rb +1 -1
- data/lib/fog/rackspace/requests/servers/create_server.rb +4 -5
- data/lib/fog/rackspace/requests/servers/delete_image.rb +2 -1
- data/lib/fog/rackspace/requests/servers/delete_server.rb +2 -3
- data/lib/fog/rackspace/requests/servers/get_server_details.rb +2 -3
- data/lib/fog/rackspace/requests/servers/list_addresses.rb +2 -3
- data/lib/fog/rackspace/requests/servers/list_private_addresses.rb +2 -3
- data/lib/fog/rackspace/requests/servers/list_public_addresses.rb +2 -3
- data/lib/fog/rackspace/requests/servers/reboot_server.rb +1 -1
- data/lib/fog/rackspace/requests/servers/update_server.rb +2 -3
- data/lib/fog/rackspace/servers.rb +21 -11
- data/lib/fog/slicehost.rb +18 -13
- data/lib/fog/vcloud.rb +148 -107
- data/lib/fog/vcloud/model.rb +2 -1
- data/lib/fog/vcloud/parser.rb +5 -0
- data/lib/fog/vcloud/requests/get_vdc.rb +3 -3
- data/lib/fog/vcloud/requests/get_versions.rb +1 -1
- data/lib/fog/vcloud/requests/login.rb +1 -1
- data/lib/fog/vcloud/terremark/ecloud.rb +34 -0
- data/lib/fog/vcloud/terremark/ecloud/models/internet_service.rb +29 -0
- data/lib/fog/vcloud/terremark/ecloud/models/internet_services.rb +51 -0
- data/lib/fog/vcloud/terremark/ecloud/models/public_ip.rb +26 -0
- data/lib/fog/vcloud/terremark/ecloud/models/public_ips.rb +32 -0
- data/lib/fog/vcloud/terremark/ecloud/models/vdc.rb +11 -0
- data/lib/fog/vcloud/terremark/ecloud/parsers/get_internet_services.rb +59 -0
- data/lib/fog/vcloud/terremark/ecloud/parsers/get_public_ip.rb +30 -0
- data/lib/fog/vcloud/terremark/ecloud/parsers/get_public_ips.rb +40 -0
- data/lib/fog/vcloud/terremark/ecloud/parsers/internet_service.rb +58 -0
- data/lib/fog/vcloud/terremark/ecloud/requests/add_internet_service.rb +82 -0
- data/lib/fog/vcloud/terremark/ecloud/requests/delete_internet_service.rb +39 -0
- data/lib/fog/vcloud/terremark/ecloud/requests/get_internet_services.rb +73 -0
- data/lib/fog/vcloud/terremark/ecloud/requests/get_public_ip.rb +49 -0
- data/lib/fog/vcloud/terremark/ecloud/requests/get_public_ips.rb +47 -0
- data/spec/bluebox/models/flavors_spec.rb +14 -0
- data/spec/bluebox/models/server_spec.rb +25 -0
- data/spec/bluebox/models/servers_spec.rb +27 -0
- data/spec/spec_helper.rb +16 -0
- data/spec/vcloud/spec_helper.rb +16 -1
- data/spec/vcloud/terremark/ecloud/models/internet_service_spec.rb +58 -0
- data/spec/vcloud/terremark/ecloud/models/internet_services_spec.rb +29 -0
- data/spec/vcloud/terremark/ecloud/models/public_ip_spec.rb +43 -0
- data/spec/vcloud/terremark/ecloud/models/public_ips_spec.rb +26 -0
- data/spec/vcloud/terremark/ecloud/models/vdc_spec.rb +4 -0
- data/spec/vcloud/terremark/ecloud/requests/add_internet_service_spec.rb +57 -0
- data/spec/vcloud/terremark/ecloud/requests/delete_internet_service_spec.rb +34 -0
- data/spec/vcloud/terremark/ecloud/requests/get_internet_services_spec.rb +57 -0
- data/spec/vcloud/terremark/ecloud/requests/get_public_ip_spec.rb +40 -0
- data/spec/vcloud/terremark/ecloud/requests/get_public_ips_spec.rb +44 -0
- data/tests/bluebox/helper.rb +26 -0
- data/tests/bluebox/requests/block_tests.rb +68 -0
- data/tests/bluebox/requests/product_tests.rb +25 -0
- data/tests/bluebox/requests/template_tests.rb +32 -0
- data/tests/helper.rb +6 -6
- data/tests/helper_tests.rb +4 -0
- data/tests/rackspace/helper.rb +0 -32
- data/tests/rackspace/requests/servers/address_tests.rb +40 -0
- data/tests/rackspace/requests/servers/flavor_tests.rb +34 -0
- data/tests/rackspace/requests/servers/image_tests.rb +59 -0
- data/tests/rackspace/requests/servers/server_tests.rb +83 -0
- data/tests/slicehost/helper.rb +0 -35
- data/tests/slicehost/requests/backup_tests.rb +17 -0
- data/tests/slicehost/requests/flavor_tests.rb +30 -0
- data/tests/slicehost/requests/image_tests.rb +28 -0
- data/tests/slicehost/requests/slice_tests.rb +63 -0
- metadata +59 -31
- data/tests/rackspace/requests/servers/create_image_tests.rb +0 -20
- data/tests/rackspace/requests/servers/create_server_tests.rb +0 -18
- data/tests/rackspace/requests/servers/delete_image_tests.rb +0 -23
- data/tests/rackspace/requests/servers/delete_server_tests.rb +0 -19
- data/tests/rackspace/requests/servers/get_flavor_details_tests.rb +0 -16
- data/tests/rackspace/requests/servers/get_image_details_tests.rb +0 -16
- data/tests/rackspace/requests/servers/get_server_details_tests.rb +0 -21
- data/tests/rackspace/requests/servers/list_addresses_tests.rb +0 -22
- data/tests/rackspace/requests/servers/list_flavors_detail_tests.rb +0 -9
- data/tests/rackspace/requests/servers/list_flavors_tests.rb +0 -9
- data/tests/rackspace/requests/servers/list_images_detail_tests.rb +0 -9
- data/tests/rackspace/requests/servers/list_images_tests.rb +0 -9
- data/tests/rackspace/requests/servers/list_private_addresses_tests.rb +0 -22
- data/tests/rackspace/requests/servers/list_public_addresses_tests.rb +0 -22
- data/tests/rackspace/requests/servers/list_servers_detail_tests.rb +0 -14
- data/tests/rackspace/requests/servers/list_servers_tests.rb +0 -14
- data/tests/rackspace/requests/servers/reboot_server_tests.rb +0 -30
- data/tests/rackspace/requests/servers/update_server_tests.rb +0 -22
- data/tests/slicehost/requests/create_slice_tests.rb +0 -14
- data/tests/slicehost/requests/delete_slice_tests.rb +0 -20
- data/tests/slicehost/requests/get_backups_tests.rb +0 -9
- data/tests/slicehost/requests/get_flavor_tests.rb +0 -17
- data/tests/slicehost/requests/get_flavors_tests.rb +0 -9
- data/tests/slicehost/requests/get_image_tests.rb +0 -17
- data/tests/slicehost/requests/get_images_tests.rb +0 -9
- data/tests/slicehost/requests/get_slice_tests.rb +0 -22
- data/tests/slicehost/requests/get_slices_tests.rb +0 -9
- data/tests/slicehost/requests/reboot_slice_tests.rb +0 -23
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__),'..','..','..','spec_helper')
|
2
|
+
|
3
|
+
describe "Fog::Vcloud::Terremark::Ecloud::InternetServices", :type => :tmrk_ecloud_model do
|
4
|
+
context "as an attribute of a VDC" do
|
5
|
+
subject { @vcloud.vdcs[0] }
|
6
|
+
|
7
|
+
it { should respond_to :internet_services }
|
8
|
+
|
9
|
+
describe :class do
|
10
|
+
subject { @vcloud.vdcs[0].internet_services.class }
|
11
|
+
its(:model) { should == Fog::Vcloud::Terremark::Ecloud::InternetService }
|
12
|
+
its(:get_request) { should == nil }
|
13
|
+
its(:all_request) { should be_an_instance_of Proc }
|
14
|
+
its(:vcloud_type) { should == "application/vnd.tmrk.ecloud.internetService+xml" }
|
15
|
+
end
|
16
|
+
|
17
|
+
describe :internet_services do
|
18
|
+
subject { @vcloud.vdcs[0].internet_services }
|
19
|
+
|
20
|
+
it { should be_an_instance_of Fog::Vcloud::Terremark::Ecloud::InternetServices }
|
21
|
+
|
22
|
+
its(:length) { should == 4 }
|
23
|
+
|
24
|
+
it { should have_members_of_the_right_model }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__),'..','..','..','spec_helper')
|
2
|
+
|
3
|
+
describe "Fog::Vcloud::Terremark::Ecloud::PublicIp", :type => :tmrk_ecloud_model do
|
4
|
+
before do
|
5
|
+
@mock_ip = @mock_vdc[:public_ips].first
|
6
|
+
@mock_ip_uri = URI.parse("#{@base_url}/extensions/publicIp/#{@mock_ip[:id]}")
|
7
|
+
end
|
8
|
+
|
9
|
+
subject { @vcloud }
|
10
|
+
|
11
|
+
it { should respond_to :get_public_ip }
|
12
|
+
|
13
|
+
describe :class do
|
14
|
+
subject { Fog::Vcloud::Terremark::Ecloud::PublicIp }
|
15
|
+
|
16
|
+
it { should have_identity :href }
|
17
|
+
it { should have_only_these_attributes [:name, :type, :id, :href] }
|
18
|
+
end
|
19
|
+
|
20
|
+
context "with no uri" do
|
21
|
+
|
22
|
+
subject { Fog::Vcloud::Terremark::Ecloud::PublicIp.new() }
|
23
|
+
|
24
|
+
its(:href) { should be_nil }
|
25
|
+
its(:identity) { should be_nil }
|
26
|
+
its(:name) { should be_nil }
|
27
|
+
its(:type) { should be_nil }
|
28
|
+
end
|
29
|
+
|
30
|
+
context "as a collection member" do
|
31
|
+
subject { @vcloud.vdcs[0].public_ips[0] }
|
32
|
+
|
33
|
+
it { should be_an_instance_of Fog::Vcloud::Terremark::Ecloud::PublicIp }
|
34
|
+
|
35
|
+
its(:href) { should == @mock_ip_uri }
|
36
|
+
its(:identity) { should == @mock_ip_uri }
|
37
|
+
its(:name) { should == @mock_ip[:name] }
|
38
|
+
its(:id) { should == @mock_ip[:id] }
|
39
|
+
|
40
|
+
its(:internet_services) { should have(2).services }
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__),'..','..','..','spec_helper')
|
2
|
+
|
3
|
+
describe "Fog::Vcloud::Terremark::Ecloud::PublicIps", :type => :tmrk_ecloud_model do
|
4
|
+
subject { @vcloud }
|
5
|
+
|
6
|
+
it { should respond_to :public_ips }
|
7
|
+
|
8
|
+
describe :class do
|
9
|
+
subject { @vcloud.public_ips.class }
|
10
|
+
its(:model) { should == Fog::Vcloud::Terremark::Ecloud::PublicIp }
|
11
|
+
its(:get_request) { should == :get_public_ip }
|
12
|
+
its(:all_request) { should be_an_instance_of Proc }
|
13
|
+
its(:vcloud_type) { should == "application/vnd.tmrk.ecloud.publicIp+xml" }
|
14
|
+
end
|
15
|
+
|
16
|
+
describe :public_ips do
|
17
|
+
subject { @vcloud.vdcs[0].public_ips }
|
18
|
+
|
19
|
+
it { should be_an_instance_of Fog::Vcloud::Terremark::Ecloud::PublicIps }
|
20
|
+
|
21
|
+
its(:length) { should == 3 }
|
22
|
+
|
23
|
+
it { should have_members_of_the_right_model }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
@@ -28,6 +28,7 @@ describe "Fog::Vcloud::Terremark::Ecloud::Vdc", :type => :tmrk_ecloud_model do
|
|
28
28
|
its(:href) { should == URI.parse(@mock_vdc[:href]) }
|
29
29
|
its(:identity) { should == URI.parse(@mock_vdc[:href]) }
|
30
30
|
its(:name) { should == @mock_vdc[:name] }
|
31
|
+
its(:public_ips) { should be_an_instance_of Fog::Vcloud::Terremark::Ecloud::PublicIps }
|
31
32
|
its(:other_links) { should have(4).items }
|
32
33
|
its(:resource_entity_links) { should have(3).items }
|
33
34
|
its(:network_links) { should have(2).items }
|
@@ -38,6 +39,9 @@ describe "Fog::Vcloud::Terremark::Ecloud::Vdc", :type => :tmrk_ecloud_model do
|
|
38
39
|
|
39
40
|
its(:deployed_vm_quota) { should == Struct::VcloudXCapacity.new(nil,nil,-1,-1) }
|
40
41
|
its(:instantiated_vm_quota) { should == Struct::VcloudXCapacity.new(nil,nil,-1,-1) }
|
42
|
+
|
43
|
+
its(:public_ips) { should have(3).public_ips }
|
44
|
+
its(:internet_services) { should have(4).services }
|
41
45
|
|
42
46
|
end
|
43
47
|
end
|
@@ -0,0 +1,57 @@
|
|
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 :add_internet_service }
|
7
|
+
|
8
|
+
describe "#add_internet_service" do
|
9
|
+
before do
|
10
|
+
@public_ip = @vcloud.vdcs[0].public_ips[0]
|
11
|
+
@new_service_data = { :name => "Test Service",
|
12
|
+
:protocol => "HTTP",
|
13
|
+
:port => "80",
|
14
|
+
:enabled => "true",
|
15
|
+
:description => "this is a test" }
|
16
|
+
end
|
17
|
+
|
18
|
+
context "with a valid Public IP uri" do
|
19
|
+
it "has the right number of Internet Services before" do
|
20
|
+
before_services = @vcloud.get_internet_services(@public_ip.href)
|
21
|
+
before_services.body.links.should have(2).links
|
22
|
+
end
|
23
|
+
|
24
|
+
subject { @vcloud.add_internet_service(@public_ip.href.to_s + "/internetServices", @new_service_data ) }
|
25
|
+
|
26
|
+
it "has the right number of Internet Services after" do
|
27
|
+
subject
|
28
|
+
@vcloud.get_internet_services(@public_ip.href).body.links.should have(3).links
|
29
|
+
end
|
30
|
+
|
31
|
+
it_should_behave_like "all requests"
|
32
|
+
|
33
|
+
let(:body) { subject.body }
|
34
|
+
|
35
|
+
its(:body) { should be_an_instance_of Struct::TmrkEcloudInternetService }
|
36
|
+
specify { body.href.to_s.should == Fog::Vcloud::Terremark::Ecloud::Mock.internet_service_href( { :id => 372 } ) }
|
37
|
+
specify { body.name.should == "Test Service" }
|
38
|
+
specify { body.protocol.should == "HTTP" }
|
39
|
+
specify { body.enabled.should == true }
|
40
|
+
specify { body.description.should == "this is a test" }
|
41
|
+
|
42
|
+
let(:public_ip) { subject.body.public_ip }
|
43
|
+
specify { public_ip.should be_an_instance_of Struct::TmrkEcloudPublicIp }
|
44
|
+
specify { public_ip.name.should == @public_ip.name }
|
45
|
+
specify { public_ip.id.should == @public_ip.id }
|
46
|
+
specify { public_ip.type.should == "application/vnd.tmrk.ecloud.publicIp+xml" }
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
context "with a public_ips_uri that doesn't exist" do
|
51
|
+
subject { lambda { @vcloud.add_internet_service(URI.parse('https://www.fakey.c/piv8vc99'), @new_service_data ) } }
|
52
|
+
|
53
|
+
it_should_behave_like "a request for a resource that doesn't exist"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
@@ -0,0 +1,34 @@
|
|
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 :delete_internet_service }
|
7
|
+
|
8
|
+
describe "#delete_internet_service" do
|
9
|
+
before do
|
10
|
+
@public_ip = @vcloud.vdcs[0].public_ips[0]
|
11
|
+
@before_services = @vcloud.get_internet_services(@public_ip.href)
|
12
|
+
end
|
13
|
+
|
14
|
+
context "with a valid internet service uri" do
|
15
|
+
subject { @vcloud.delete_internet_service(@before_services.body.links[0].href) }
|
16
|
+
|
17
|
+
specify { @before_services.body.links.should have(2).links }
|
18
|
+
|
19
|
+
it "has the right number of Internet Services after" do
|
20
|
+
subject
|
21
|
+
after_services = @vcloud.get_internet_services(@public_ip.href)
|
22
|
+
after_services.body.links.should have(1).link
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
context "with a public_ips_uri that doesn't exist" do
|
28
|
+
subject { lambda { @vcloud.delete_internet_service(URI.parse('https://www.fakey.c/piv8vc99')) } }
|
29
|
+
|
30
|
+
it_should_behave_like "a request for a resource that doesn't exist"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
@@ -0,0 +1,57 @@
|
|
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_internet_services }
|
7
|
+
|
8
|
+
describe "#get_internet_services" do
|
9
|
+
context "with a valid VDC internet_services_uri" do
|
10
|
+
before { @services = @vcloud.get_internet_services(URI.parse(@mock_vdc[:href] + "/internetServices")) }
|
11
|
+
subject { @services }
|
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.internetServicesList+xml" }
|
17
|
+
|
18
|
+
its(:body) { should be_an_instance_of Struct::TmrkEcloudList }
|
19
|
+
|
20
|
+
describe "#body" do
|
21
|
+
describe "#links" do
|
22
|
+
subject { @services.body.links }
|
23
|
+
|
24
|
+
it { should have(4).services }
|
25
|
+
|
26
|
+
[0,1,2,3].each do |idx|
|
27
|
+
let(:service) { subject[idx] }
|
28
|
+
let(:mock_service) { @mock_vdc[:public_ips].map { |ip| ip[:services] }.flatten[idx] }
|
29
|
+
let(:mock_ip) { @mock_vdc[:public_ips].detect { |ip| ip[:services].detect { |ipservice| ipservice[:id] == service.id } } }
|
30
|
+
specify { service.should be_an_instance_of Struct::TmrkEcloudInternetService }
|
31
|
+
specify { service.name.should == mock_service[:name] }
|
32
|
+
specify { service.id.should == mock_service[:id] }
|
33
|
+
specify { service.href.should == URI.parse(Fog::Vcloud::Terremark::Ecloud::Mock.internet_service_href(mock_service)) }
|
34
|
+
specify { service.type.should == "application/vnd.tmrk.ecloud.internetService+xml" }
|
35
|
+
specify { service.public_ip.should be_an_instance_of Struct::TmrkEcloudPublicIp }
|
36
|
+
specify { service.public_ip.name.should == mock_ip[:name] }
|
37
|
+
specify { service.public_ip.id.should == mock_ip[:id] }
|
38
|
+
specify { service.public_ip.type.should == "application/vnd.tmrk.ecloud.publicIp+xml" }
|
39
|
+
specify { service.port.should == mock_service[:port] }
|
40
|
+
specify { service.protocol.should == mock_service[:protocol] }
|
41
|
+
specify { service.enabled.should == mock_service[:enabled] }
|
42
|
+
specify { service.timeout.should == mock_service[:timeout] }
|
43
|
+
specify { service.description.should == mock_service[:description] }
|
44
|
+
specify { service.url_send_string.should == nil }
|
45
|
+
specify { service.http_header.should == nil }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context "with a public_ips_uri that doesn't exist" do
|
52
|
+
subject { lambda { @vcloud.get_internet_services(URI.parse('https://www.fakey.c/piv8vc99')) } }
|
53
|
+
|
54
|
+
it_should_behave_like "a request for a resource that doesn't exist"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,40 @@
|
|
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_public_ip }
|
7
|
+
|
8
|
+
describe "#get_public_ip" do
|
9
|
+
context "with a valid public_ip_uri" do
|
10
|
+
before do
|
11
|
+
@mock_ip = @mock_vdc[:public_ips].first
|
12
|
+
@public_ip = @vcloud.get_public_ip(URI.parse("#{@base_url}/extensions/publicIp/#{@mock_ip[:id]}"))
|
13
|
+
end
|
14
|
+
|
15
|
+
subject { @public_ip }
|
16
|
+
|
17
|
+
it_should_behave_like "all requests"
|
18
|
+
|
19
|
+
its(:headers) { should include "Content-Type" }
|
20
|
+
specify { subject.headers['Content-Type'].should == "application/vnd.tmrk.ecloud.publicIp+xml" }
|
21
|
+
|
22
|
+
its(:body) { should be_an_instance_of Struct::TmrkEcloudPublicIp }
|
23
|
+
|
24
|
+
describe "#body" do
|
25
|
+
subject { @public_ip.body }
|
26
|
+
|
27
|
+
its(:name) { should == @mock_ip[:name] }
|
28
|
+
its(:href) { should == URI.parse("#{@base_url}/extensions/publicIp/#{@mock_ip[:id]}") }
|
29
|
+
its(:id) { should == @mock_ip[:id] }
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "with a public_ips_uri that doesn't exist" do
|
35
|
+
subject { lambda { @vcloud.get_public_ip(URI.parse('https://www.fakey.c/piv89')) } }
|
36
|
+
|
37
|
+
it_should_behave_like "a request for a resource that doesn't exist"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -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 :get_public_ips }
|
7
|
+
|
8
|
+
describe "#get_public_ips" do
|
9
|
+
context "with a valid public_ips_uri" do
|
10
|
+
before { @public_ips = @vcloud.get_public_ips(URI.parse(@mock_vdc[:href] + "/publicIps")) }
|
11
|
+
subject { @public_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.publicIpsList+xml" }
|
17
|
+
|
18
|
+
its(:body) { should be_an_instance_of Struct::TmrkEcloudList }
|
19
|
+
|
20
|
+
describe "#body" do
|
21
|
+
describe "#links" do
|
22
|
+
subject { @public_ips.body.links }
|
23
|
+
|
24
|
+
it { should have(3).ips }
|
25
|
+
|
26
|
+
[0,1,2].each do |idx|
|
27
|
+
let(:ip) { subject[idx] }
|
28
|
+
let(:mock_ip) { @mock_vdc[:public_ips][idx] }
|
29
|
+
specify { ip.should be_an_instance_of Struct::TmrkEcloudPublicIp }
|
30
|
+
specify { ip.name.should == mock_ip[:name] }
|
31
|
+
specify { ip.id.should == mock_ip[:id] }
|
32
|
+
specify { ip.href.should == URI.parse("#{@base_url}/extensions/publicIp/#{mock_ip[:id]}") }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context "with a public_ips_uri that doesn't exist" do
|
39
|
+
subject { lambda { @vcloud.get_public_ips(URI.parse('https://www.fakey.c/piv8vc99')) } }
|
40
|
+
|
41
|
+
it_should_behave_like "a request for a resource that doesn't exist"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Bluebox
|
2
|
+
|
3
|
+
def self.[](service)
|
4
|
+
@@connections ||= Hash.new do |hash, key|
|
5
|
+
credentials = Fog.credentials.reject do |k,v|
|
6
|
+
![:bluebox_api_key, :bluebox_customer_id].include?(k)
|
7
|
+
end
|
8
|
+
hash[key] = case key
|
9
|
+
when :blocks
|
10
|
+
Fog::Bluebox.new(credentials)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
@@connections[service]
|
14
|
+
end
|
15
|
+
|
16
|
+
module Formats
|
17
|
+
|
18
|
+
PRODUCT = {
|
19
|
+
'cost' => Float,
|
20
|
+
'description' => String,
|
21
|
+
'id' => String
|
22
|
+
}
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
Shindo.tests('Bluebox | block requests', ['bluebox']) do
|
2
|
+
|
3
|
+
@block_format = {
|
4
|
+
'cpu' => Float,
|
5
|
+
'hostname' => String,
|
6
|
+
'id' => String,
|
7
|
+
'ips' => [{'address' => String}],
|
8
|
+
'memory' => Integer,
|
9
|
+
'product' => Bluebox::Formats::PRODUCT,
|
10
|
+
'status' => String,
|
11
|
+
'storage' => Integer,
|
12
|
+
'template' => String,
|
13
|
+
|
14
|
+
}
|
15
|
+
|
16
|
+
tests('success') do
|
17
|
+
|
18
|
+
@product_id = '94fd37a7-2606-47f7-84d5-9000deda52ae' # 1 GB
|
19
|
+
@template_id = 'a00baa8f-b5d0-4815-8238-b471c4c4bf72' # Ubuntu 9.10 64bit
|
20
|
+
@password = 'chunkybacon'
|
21
|
+
|
22
|
+
@block_id = nil
|
23
|
+
|
24
|
+
tests("create_block('#{@product_id}', '#{@template_id}', 'password' => '#{@password}')").formats(@block_format) do
|
25
|
+
data = Bluebox[:blocks].create_block(@product_id, @template_id, 'password' => @password).body
|
26
|
+
@block_id = data['id']
|
27
|
+
data
|
28
|
+
end
|
29
|
+
|
30
|
+
Bluebox[:blocks].servers.get(@block_id).wait_for { ready? }
|
31
|
+
|
32
|
+
tests("get_block('#{@block_id}')").formats(@block_format) do
|
33
|
+
Bluebox[:blocks].get_block(@block_id).body
|
34
|
+
end
|
35
|
+
|
36
|
+
tests("get_blocks").formats([@block_format.reject {|key,value| ['product', 'template'].include?(key)}]) do
|
37
|
+
Bluebox[:blocks].get_blocks.body
|
38
|
+
end
|
39
|
+
|
40
|
+
tests("reboot_block('#{@block_id}')").formats({'status' => String, 'text' => String}) do
|
41
|
+
Bluebox[:blocks].reboot_block(@block_id).body
|
42
|
+
end
|
43
|
+
|
44
|
+
Bluebox[:blocks].servers.get(@block_id).wait_for { ready? }
|
45
|
+
|
46
|
+
tests("destroy_block('#{@block_id})'").formats({'text' => String}) do
|
47
|
+
Bluebox[:blocks].destroy_block(@block_id).body
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
tests('failure') do
|
53
|
+
|
54
|
+
tests("get_block('00000000-0000-0000-0000-000000000000')").raises(Fog::Bluebox::NotFound) do
|
55
|
+
Bluebox[:blocks].get_block('00000000-0000-0000-0000-000000000000')
|
56
|
+
end
|
57
|
+
|
58
|
+
tests("reboot_block('00000000-0000-0000-0000-000000000000')").raises(Fog::Bluebox::NotFound) do
|
59
|
+
Bluebox[:blocks].reboot_block('00000000-0000-0000-0000-000000000000')
|
60
|
+
end
|
61
|
+
|
62
|
+
tests("destroy_block('00000000-0000-0000-0000-000000000000')").raises(Fog::Bluebox::NotFound) do
|
63
|
+
Bluebox[:blocks].destroy_block('00000000-0000-0000-0000-000000000000')
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|