1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00
fog--fog/tests/ecloud/compute/models/server_tests.rb
Paul Thornthwaite 02ff54a3e5 [ecloud] Fixes tests by duplicating test setup
In order to have two different groups of server tests the ecloud tests
are in two sets within the one file - which explains the setup outside
of the Shindo block.

Shindo's tags do not work when nested so this fixes the problem by
duplicating the test setup in the second group of tests.

Fog::Compute can't safely sit outside the top Shindo block so the
duplication is preferable to breaking all/ecloud tests.

Also corrected the missing provider tag in this second set so the
"attributes" tests do not run when should be filtered by tags.
2013-01-17 11:07:38 +00:00

151 lines
6.8 KiB
Ruby

provider, config = :ecloud, compute_providers[:ecloud]
Shindo.tests("Fog::Compute[:#{provider}] | servers", [provider.to_s, "operations"]) do
connection = Fog::Compute[provider]
organization = connection.organizations.first
environment = organization.environments.find{|e| e.name == config[:server_attributes][:environment_name]} || organization.environments.first
public_ip = environment.public_ips.first
compute_pool = environment.compute_pools.first
image_href = Fog.credentials[:ecloud_image_href] || compute_pool.templates.first.href
ssh_key = organization.admin.ssh_keys.detect { |key| key.name == "root" }
@network = environment.networks.first
options = config[:server_attributes].merge(:network_uri => @network.href, :ssh_key_uri => ssh_key.href)
#if Fog.credentials[:ecloud_ssh_key_id]
# options = options.merge(:ssh_key_uri => "/cloudapi/ecloud/admin/sshkeys/#{Fog.credentials[:ecloud_ssh_key_id]}")
#end
@server = compute_pool.servers.create(image_href, options)
tests('#create_server').succeeds do
@server.wait_for { ready? } # server
end
tests('#environment_has_a_row_and_group_with_the_right_names').succeeds do
row = environment.rows.detect { |r| r.name == options[:row] }
returns(false, "row is not nil") { row.nil? }
group = row.groups.detect { |g| g.name == options[:group] }
returns(false, "group is not nil") { group.nil? }
server = group.servers.detect { |s| s.name == @server.name }
returns(false, "group has server") { server.nil? }
end
tests('#get_server_flavor').succeeds do
@server.flavor_id == {:ram => 512, :cpus => 1}
end
@hwc = @server.hardware_configuration
tests('#add_disk_to_server').succeeds do
disk_count = @hwc.storage.is_a?(Hash) ? [@hwc.storage].count : @hwc.storage.count
@server.add_disk(25).wait_for { ready? }
@server.reload.wait_for { ready? }
returns(true, "disk count increased by 1") { @server.reload.hardware_configuration.storage.count == disk_count + 1 }
end
tests('#detach_disk_from_server').succeeds do
disk_count = @hwc.reload.storage.is_a?(Hash) ? [@hwc.storage].count : @hwc.storage.count
@server.detach_disk(1).wait_for { ready? }
@server.reload.wait_for { ready? }
returns(true, "disk count decreased by 1") { @server.reload.hardware_configuration.storage.count == disk_count - 1 }
end
@detached_disk = compute_pool.reload.detached_disks.detect { |d| d.name == @server.name }
tests('#attach_disk_to_server').succeeds do
disk_count = @hwc.reload.storage.is_a?(Hash) ? [@hwc.storage].count : @hwc.storage.count
@server.attach_disk(@detached_disk).wait_for { ready? }
@server.reload.wait_for { ready? }
returns(true, "disk count increased by 1") { @server.reload.hardware_configuration.storage.count == disk_count + 1 }
end
tests('#delete_disk').succeeds do
disk_count = @hwc.reload.storage.is_a?(Hash) ? [@hwc.storage].count : @hwc.storage.count
@server.delete_disk(1).wait_for { ready? }
@server.reload.wait_for { ready? }
returns(true, "disk count decreased by 1") { @server.reload.hardware_configuration.storage.count == disk_count - 1 }
end
@ip = @network.ips.reload.detect { |i| i.host.nil? && i.detected_on.nil? }
tests('#add_ip_to_server').succeeds do
@server.add_ip(:href => @network.href, :network_name => @network.name, :ip => @ip.name)
end
service_name = Fog.credentials[:ecloud_internet_service_name] || Fog::Mock.random_letters(6)
service_port = Fog.credentials[:ecloud_internet_service_port] || Fog::Mock.random_numbers(3).to_i
service_protocol = Fog.credentials[:ecloud_internet_service_protocol]
@service = public_ip.internet_services.create(:name => service_name, :port => service_port, :protocol => service_protocol, :description => "", :enabled => true)
tests('#create_internet_service').succeeds do
@service.wait_for { ready? }
returns(true, "is an internet service") { @service.is_a?(Fog::Compute::Ecloud::InternetService) }
end
unless @server.ips.empty?
@ip_address = @server.ips.first
@ip = @server.ips.first.network.ips.detect { |i| i.name == @ip_address.address.name }
@node = @service.nodes.create(:name => @server.name, :port => service_port, :ip_address => @ip.href, :description => "", :enabled => true)
tests('#create_node_service').succeeds do
@node.wait_for { ready? }
returns(true, "is a node server") { @node.is_a?(Fog::Compute::Ecloud::Node) }
end
tests('#destroy_node_service').succeeds do
@node.destroy.wait_for { ready? }
end
end
#tests('#delete_ip_from_server').succeeds do
# @server.delete_ip(:href => @network.href, :network_name => @network.name, :ip => @ip.name)
#end
tests('#destroy_internet_service').succeeds do
@service.destroy.wait_for { ready? }
end
@server_count = environment.servers.count
tests('#destroy_server').succeeds do
@server.destroy.wait_for { ready? } # task
end
@new_server_count = environment.servers.reload.count
tests('#server_count_reduced').succeeds do
returns(true, "server count is reduced") { @new_server_count < @server_count }
end
@row = environment.rows.detect { |r| r.name == options[:row] }
@group = @row.groups.detect { |g| g.name == options[:group] }
if @group.servers.empty?
tests('#delete_group').succeeds do
@group.destroy
returns(true, "group no longer exists") { @group.reload.nil? }
end
end
if @row.groups.reload.empty?
tests("#delete_row").succeeds do
@row.destroy
returns(true, "row no longer exists") { @row.reload.nil? }
end
end
end
Shindo.tests("Fog::Compute[:#{provider}] | server", [provider.to_s, "attributes"]) do
connection = Fog::Compute[provider]
organization = connection.organizations.first
environment = organization.environments.find{|e| e.name == config[:server_attributes][:environment_name]} || organization.environments.first
public_ip = environment.public_ips.first
compute_pool = environment.compute_pools.first
image_href = Fog.credentials[:ecloud_image_href] || compute_pool.templates.first.href
ssh_key = organization.admin.ssh_keys.detect { |key| key.name == "root" }
@network = environment.networks.first
options = config[:server_attributes].merge(:network_uri => @network.href, :ssh_key_uri => ssh_key.href)
#if Fog.credentials[:ecloud_ssh_key_id]
# options = options.merge(:ssh_key_uri => "/cloudapi/ecloud/admin/sshkeys/#{Fog.credentials[:ecloud_ssh_key_id]}")
#end
@server = compute_pool.servers.first || compute_pool.servers.create(image_href, options).tap{|s| s.wait_for { ready? }}
tests('#ip_addresses').succeeds do
returns(true, "is an array") { @server.ips.is_a?(Array) }
returns(true, "contains an VirtualMachineAssignedIp") { @server.ips.all?{|ip| ip.is_a?(Fog::Compute::Ecloud::VirtualMachineAssignedIp) } }
end
end