mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
7f93dce98f
The put_network request updates OrgVdcNetwork details: - name, - dns properties, - gateway There appear to be some limitations with what the API will allow to be changes (such as IpRanges) but the input/output of the method is mapped as usual. This also adds Mock support for the method. Network tests have been adjusted so that they work in Mock and Real mode (bar network_metadata, which is to be implemented in Mock).
186 lines
6.3 KiB
Ruby
186 lines
6.3 KiB
Ruby
|
|
require 'pp'
|
|
|
|
Shindo.tests('Compute::VcloudDirector | network requests', ['vclouddirector']) do
|
|
|
|
GET_NETWORK_FORMAT = {
|
|
:type => String,
|
|
:name => String,
|
|
:href => String,
|
|
:id => String,
|
|
:description => Fog::Nullable::String,
|
|
:is_inherited => Fog::Boolean,
|
|
:gateway => Fog::Nullable::String,
|
|
:netmask => String,
|
|
:dns1 => Fog::Nullable::String,
|
|
:dns2 => Fog::Nullable::String,
|
|
:dns_suffix => Fog::Nullable::String,
|
|
:ip_ranges => [{
|
|
:start_address => String,
|
|
:end_address => String
|
|
}]
|
|
}
|
|
|
|
@service = Fog::Compute::VcloudDirector.new
|
|
@org = VcloudDirector::Compute::Helper.current_org(@service)
|
|
@created_net_id = nil
|
|
|
|
tests('Create network in non-existent vDC').raises(Fog::Compute::VcloudDirector::Forbidden) do
|
|
@service.post_create_org_vdc_network('00000000-0000-0000-0000-000000000000', 'bob')
|
|
end
|
|
|
|
tests('Delete non-existent OrgNetwork').raises(Fog::Compute::VcloudDirector::Forbidden) do
|
|
@service.delete_network('00000000-0000-0000-0000-000000000000')
|
|
end
|
|
|
|
tests('Retrieve non-existent OrgNetwork (get_network)').raises(Fog::Compute::VcloudDirector::Forbidden) do
|
|
@service.get_network('00000000-0000-0000-0000-000000000000')
|
|
end
|
|
|
|
tests('Retrieve non-existent OrgNetwork (get_network_complete)').raises(Fog::Compute::VcloudDirector::Forbidden) do
|
|
@service.get_network_complete('00000000-0000-0000-0000-000000000000')
|
|
end
|
|
|
|
tests('#get_network').data_matches_schema(GET_NETWORK_FORMAT) do
|
|
link = @org[:Link].find do |l|
|
|
l[:rel] == 'down' && l[:type] == 'application/vnd.vmware.vcloud.orgNetwork+xml'
|
|
end
|
|
pending unless link # nothing to test here cannot continue
|
|
@network_id = link[:href].split('/').last
|
|
@service.get_network(@network_id).body
|
|
end
|
|
|
|
tests('#get_network_metadata').data_matches_schema(VcloudDirector::Compute::Schema::METADATA_TYPE) do
|
|
pending if Fog.mocking?
|
|
pending unless @network_id # nothing to test here cannot continue
|
|
@service.get_network_metadata(@network_id).body
|
|
end
|
|
|
|
tests('#post_create_org_vdc_network') do
|
|
#pending unless Fog.mocking?
|
|
link = @org[:Link].find do |l|
|
|
l[:rel] == 'down' && l[:type] == 'application/vnd.vmware.vcloud.vdc+xml'
|
|
end
|
|
|
|
vdc_id = link[:href].split('/').last
|
|
name = VcloudDirector::Compute::Helper.test_name
|
|
|
|
options = {
|
|
:Description => "Testing post_create_org_vdc_network #{name}",
|
|
:Configuration => {
|
|
:IpScopes => {
|
|
:IpScope => {
|
|
:IsInherited => 'false',
|
|
:Gateway => '198.51.100.1',
|
|
:Netmask => '255.255.255.0',
|
|
:Dns1 => '198.51.100.2',
|
|
:Dns2 => '198.51.100.3',
|
|
:DnsSuffix => 'example.com',
|
|
:IpRanges => [
|
|
{ :IpRange => { :StartAddress => '198.51.100.10', :EndAddress => '198.51.100.20' } },
|
|
{ :IpRange => { :StartAddress => '198.51.100.30', :EndAddress => '198.51.100.40' } },
|
|
]
|
|
},
|
|
},
|
|
:FenceMode => 'isolated',
|
|
}
|
|
}
|
|
|
|
body = @service.post_create_org_vdc_network(vdc_id, name, options).body
|
|
@created_net_id = body[:href].split('/').last if body[:href]
|
|
@service.process_task(body[:Tasks][:Task]) if body && body.key?(:Tasks)
|
|
|
|
tests('fetched name matches created name').returns(name) do
|
|
net = @service.get_network_complete(@created_net_id).body
|
|
net[:name]
|
|
end
|
|
|
|
end
|
|
|
|
tests('#get_network_complete schema').data_matches_schema(VcloudDirector::Compute::Schema::NETWORK_TYPE) do
|
|
link = @org[:Link].find do |l|
|
|
l[:rel] == 'down' && l[:type] == 'application/vnd.vmware.vcloud.orgNetwork+xml'
|
|
end
|
|
pending unless link # nothing to test here cannot continue
|
|
@network_id = link[:href].split('/').last
|
|
@service.get_network_complete(@network_id).body
|
|
end
|
|
|
|
tests('#get_network_complete') do
|
|
new_network = @service.get_network_complete(@created_net_id).body
|
|
tests('network has a :name') do
|
|
new_network.fetch(:name)
|
|
end
|
|
tests('network has a :Description') do
|
|
new_network.fetch(:Description)
|
|
end
|
|
tests('network has a :Gateway') do
|
|
new_network[:Configuration][:IpScopes][:IpScope][:Gateway]
|
|
end
|
|
tests('network has a several :IpRanges') do
|
|
new_network[:Configuration][:IpScopes][:IpScope][:IpRanges].size >= 1
|
|
end
|
|
end
|
|
|
|
tests('#put_network') do
|
|
|
|
new_options = {
|
|
:Description => "Testing put_network",
|
|
:Configuration => {
|
|
:IpScopes => {
|
|
:IpScope => {
|
|
:IsInherited => 'false',
|
|
:Gateway => '198.51.100.1',
|
|
:Netmask => '255.255.255.0',
|
|
:Dns1 => '198.51.100.2',
|
|
:Dns2 => '198.51.100.3',
|
|
:DnsSuffix => 'example.com',
|
|
:IpRanges => [
|
|
{ :IpRange => { :StartAddress => '198.51.100.10', :EndAddress => '198.51.100.20' } },
|
|
{ :IpRange => { :StartAddress => '198.51.100.30', :EndAddress => '198.51.100.40' } },
|
|
]
|
|
},
|
|
},
|
|
:FenceMode => 'isolated',
|
|
}
|
|
}
|
|
|
|
original_network = @service.get_network_complete(@created_net_id).body
|
|
name = original_network[:name]
|
|
|
|
task = @service.put_network(@created_net_id, name, new_options).body
|
|
@service.process_task(task)
|
|
|
|
tests('fetched :Gateway matches updated :Gateway').returns(
|
|
new_options[:Configuration][:IpScopes][:IpScope][:Gateway]
|
|
) do
|
|
net = @service.get_network_complete(@created_net_id).body
|
|
net[:Configuration][:IpScopes][:IpScope][:Gateway]
|
|
end
|
|
|
|
tests('fetched :IpRanges count is matches updated data').returns(
|
|
new_options[:Configuration][:IpScopes][:IpScope][:IpRanges].size
|
|
) do
|
|
net = @service.get_network_complete(@created_net_id).body
|
|
# dammit, the API returns with IpRange as a list, not IpRanges
|
|
net[:Configuration][:IpScopes][:IpScope][:IpRanges][:IpRange].size
|
|
end
|
|
|
|
tests('fetched :Network matches updated :Description').returns(
|
|
new_options[:Description]
|
|
) do
|
|
net = @service.get_network_complete(@created_net_id).body
|
|
net[:Description]
|
|
end
|
|
|
|
end
|
|
|
|
tests('#delete_network') do
|
|
@delete_task = @service.delete_network(@created_net_id).body
|
|
@service.process_task(@delete_task)
|
|
tests('created network has been deleted').raises(Fog::Compute::VcloudDirector::Forbidden) do
|
|
@service.get_network(@created_net_id)
|
|
end
|
|
end
|
|
|
|
end
|