fog--fog/tests/compute/requests/ninefold/nat_tests.rb

93 lines
3.6 KiB
Ruby

## Note:
# If needed, these tests will create a new VM and public IP address. Because this is expensive, you
# can optionally specify VM_ID and IP_ID as environment variables, and we will use those. Note:
# The IP must not already have static nat enabled or any port mappings.
Shindo.tests('Ninefold::Compute | server requests', ['ninefold']) do
if ENV['VM_ID'] && ENV['IP_ID']
@ipid, @vmid = ENV['IP_ID'], ENV['VM_ID']
else
begin
# Create a VM to work with
networks = Ninefold[:compute].list_networks
vm_job = Ninefold[:compute].deploy_virtual_machine(:serviceofferingid => Ninefold::Compute::TestSupport::SERVICE_OFFERING,
:templateid => Ninefold::Compute::TestSupport::TEMPLATE_ID,
:zoneid => Ninefold::Compute::TestSupport::ZONE_ID,
:networkids => networks[0]['id'])
@vm = Ninefold::Compute::TestSupport.wait_for_job(vm_job)['jobresult']['virtualmachine']
@vmid = @vm['id']
# Allocate a public IP to work with
ip_job = Ninefold[:compute].associate_ip_address(:zoneid => Ninefold::Compute::TestSupport::ZONE_ID)
@ip = Ninefold::Compute::TestSupport.wait_for_job(ip_job)['jobresult']['ipaddress']
@ipid = @ip['id']
rescue => e
puts "*** CREATING VM OR IP FAILED - PLEASE TEST AND CORRECT THIS FIRST"
raise e
end
end
tests('success') do
tests("#enable_static_nat()").formats(Ninefold::Compute::Formats::Nat::ENABLE_NAT_RESPONSE) do
pending if Fog.mocking?
Ninefold[:compute].enable_static_nat(:ipaddressid => @ipid, :virtualmachineid => @vmid)
end
tests("#create_ip_forwarding_rule()").formats(Ninefold::Compute::Formats::Nat::FORWARDING_RULE) do
pending if Fog.mocking?
job = Ninefold[:compute].create_ip_forwarding_rule(:ipaddressid => @ipid,
:protocol => 'TCP',
:startport => 22)
result = Ninefold::Compute::TestSupport.wait_for_job(job)['jobresult']['ipforwardingrule']
@fwd_rule_id = result['id']
result
end
tests("#list_ip_forwarding_rules()").formats(Ninefold::Compute::Formats::Nat::FORWARDING_RULES) do
pending if Fog.mocking?
Ninefold[:compute].list_ip_forwarding_rules
end
tests("#delete_ip_forwarding_rule()").formats(Ninefold::Compute::Formats::Nat::DELETE_RULE_RESPONSE) do
pending if Fog.mocking?
job = Ninefold[:compute].delete_ip_forwarding_rule(:id => @fwd_rule_id)
Ninefold::Compute::TestSupport.wait_for_job(job)['jobresult']
end
tests("#disable_static_nat()").formats(Ninefold::Compute::Formats::Nat::DISABLE_NAT_RESPONSE) do
pending if Fog.mocking?
job = Ninefold[:compute].disable_static_nat(:ipaddressid => @ipid)
Ninefold::Compute::TestSupport.wait_for_job(job)['jobresult']
end
end
tests('failure') do
tests("#associate_ip_address()").raises(Excon::Errors::HTTPStatusError) do
pending if Fog.mocking?
Ninefold[:compute].associate_ip_address
end
end
unless ENV['VM_ID'] && ENV['IP_ID']
begin
# Kill test VM
vm_job = Ninefold[:compute].destroy_virtual_machine(:id => @vmid)
Ninefold::Compute::TestSupport.wait_for_job(vm_job)
# Disassociate public IP
ip_job = Ninefold[:compute].disassociate_ip_address(:id => @ipid)
Ninefold::Compute::TestSupport.wait_for_job(ip_job)
rescue => e
puts "*** DESTROYING VM OR IP FAILED - PLEASE TEST AND CORRECT THIS FIRST"
raise e
end
end
end