diff --git a/lib/fog/vcloud/mock_data_classes.rb b/lib/fog/vcloud/mock_data_classes.rb index 841e495cf..d65c43d4a 100644 --- a/lib/fog/vcloud/mock_data_classes.rb +++ b/lib/fog/vcloud/mock_data_classes.rb @@ -586,10 +586,48 @@ module Fog end def items + public_ip_internet_services + backup_internet_services + end + + def public_ip_internet_services _parent.public_ip_collection.items.inject([]) do |services, public_ip| services + public_ip.internet_service_collection.items end end + + def backup_internet_services + @backup_internet_services ||= [] + end + end + + class MockBackupInternetService < Base + def name + self[:name] || "Backup Internet Service #{object_id}" + end + + def protocol + self[:protocol] + end + + def port + 0 + end + + def enabled + self[:enabled].to_s.downcase != "false" + end + + def timeout + self[:timeout] || 2 + end + + def description + self[:description] || "Description for Backup Service #{name}" + end + + def redirect_url + nil + end end class MockFirewallAcls < Base diff --git a/lib/fog/vcloud/terremark/ecloud.rb b/lib/fog/vcloud/terremark/ecloud.rb index e8be645ca..29981ccc6 100644 --- a/lib/fog/vcloud/terremark/ecloud.rb +++ b/lib/fog/vcloud/terremark/ecloud.rb @@ -131,6 +131,8 @@ module Fog end mock_vdc.public_ip_collection.items << MockPublicIp.new(:name => "99.1.9.7") + + mock_vdc.internet_service_collection.backup_internet_services << MockBackupInternetService.new({ :port => 10000, :protocol => "TCP"}, self) end mock_organization.vdcs.detect {|v| v.name == "Rock-n-Roll" }.tap do |mock_vdc| @@ -155,8 +157,7 @@ module Fog def ecloud_xmlns { "xmlns" => "urn:tmrk:eCloudExtensions-2.5", - "xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance", - # "xmlns:xsd" => "http://www.w3.org/2001/XMLSchema" + "xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance" } end diff --git a/lib/fog/vcloud/terremark/ecloud/models/internet_services.rb b/lib/fog/vcloud/terremark/ecloud/models/internet_services.rb index 144263957..c9dedcc6f 100644 --- a/lib/fog/vcloud/terremark/ecloud/models/internet_services.rb +++ b/lib/fog/vcloud/terremark/ecloud/models/internet_services.rb @@ -13,7 +13,7 @@ module Fog def all check_href! :message => "the Internet Services for the Vdc you want to enumerate" - if data = connection.get_internet_services(href).body[:InternetService] + if data = connection.get_internet_services(href).body[:InternetService].find_all {|i| i[:IsBackupService] == "false" } load(data) end end diff --git a/lib/fog/vcloud/terremark/ecloud/requests/get_internet_services.rb b/lib/fog/vcloud/terremark/ecloud/requests/get_internet_services.rb index 229de669c..02aa617b0 100644 --- a/lib/fog/vcloud/terremark/ecloud/requests/get_internet_services.rb +++ b/lib/fog/vcloud/terremark/ecloud/requests/get_internet_services.rb @@ -44,11 +44,15 @@ module Fog xml.Id service.object_id xml.Href service.href xml.Name service.name - xml.PublicIpAddress { - xml.Id service._parent._parent.object_id - xml.Href service._parent._parent.href - xml.Name service._parent._parent.name - } + if MockDataClasses::MockBackupInternetService === service + xml.PublicIpAddress "i:nil" => true + else + xml.PublicIpAddress { + xml.Id service._parent._parent.object_id + xml.Href service._parent._parent.href + xml.Name service._parent._parent.name + } + end xml.Port service.port xml.Protocol service.protocol xml.Enabled service.enabled @@ -56,6 +60,9 @@ module Fog xml.Description service.description xml.RedirectURL service.redirect_url xml.Monitor + xml.IsBackupService MockDataClasses::MockBackupInternetService === service + xml.BackupService "i:nil" => true + xml.BackupOf } end } diff --git a/spec/vcloud/terremark/ecloud/requests/get_internet_services_spec.rb b/spec/vcloud/terremark/ecloud/requests/get_internet_services_spec.rb index a30fdfbdd..360f16e3d 100644 --- a/spec/vcloud/terremark/ecloud/requests/get_internet_services_spec.rb +++ b/spec/vcloud/terremark/ecloud/requests/get_internet_services_spec.rb @@ -3,7 +3,7 @@ require File.join(File.dirname(__FILE__), '..', '..', '..', 'spec_helper') if Fog.mocking? shared_examples_for "the expected internet service item" do specify { service.should be_an_instance_of Hash } - specify { service.should have(11).attributes } + specify { service.should have(14).attributes } specify { service[:Name].should == mock_service.name } specify { service[:Id].should == mock_service.object_id.to_s } specify { service[:Href].should == mock_service.href } @@ -21,6 +21,30 @@ if Fog.mocking? specify { service[:Description].should == mock_service.description } specify { service[:RedirectURL].should == (mock_service.redirect_url || "") } specify { service[:Monitor].should == "" } + specify { service[:IsBackupService].should == "false" } + specify { service[:BackupService].should be_nil } + specify { service[:BackupOf].should == "" } + end + + shared_examples_for "the expected backup internet service item" do + specify { service.should be_an_instance_of Hash } + specify { service.should have(14).attributes } + specify { service[:Name].should == mock_service.name } + specify { service[:Id].should == mock_service.object_id.to_s } + specify { service[:Href].should == mock_service.href } + + specify { service[:PublicIpAddress].should be_nil } + + specify { service[:Port].should == mock_service.port.to_s } + specify { service[:Protocol].should == mock_service.protocol } + specify { service[:Enabled].should == mock_service.enabled.to_s } + specify { service[:Timeout].should == mock_service.timeout.to_s } + specify { service[:Description].should == mock_service.description } + specify { service[:RedirectURL].should == (mock_service.redirect_url || "") } + specify { service[:Monitor].should == "" } + specify { service[:IsBackupService].should == "true" } + specify { service[:BackupService].should be_nil } + specify { service[:BackupOf].should == "" } end describe "Fog::Vcloud, initialized w/ the TMRK Ecloud module", :type => :mock_tmrk_ecloud_request do @@ -44,15 +68,22 @@ if Fog.mocking? context "[:InternetService]" do subject { @services.body[:InternetService] } - it { should have(4).items } + it { should have(5).items } [0,1,2,3].each do |idx| let(:service) { subject[idx] } - let(:mock_service) { @mock_vdc.public_ip_collection.items.map {|ip| ip.internet_service_collection.items }.flatten[idx] } + let(:mock_service) { @mock_vdc.internet_service_collection.items[idx] } let(:mock_ip) { mock_service._parent._parent } it_should_behave_like "the expected internet service item" end + + context "for a backup internet service" do + let(:service) { subject[4] } + let(:mock_service) { @mock_vdc.internet_service_collection.backup_internet_services.first } + + it_should_behave_like "the expected backup internet service item" + end end end end