mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
184 lines
5.7 KiB
Ruby
184 lines
5.7 KiB
Ruby
|
|
Shindo.tests('Fog::Compute[:xenserver] | server model', ['xenserver']) do
|
|
|
|
connection = Fog::Compute[:xenserver]
|
|
servers = connection.servers
|
|
# pre-flight cleanup
|
|
(servers.all :name_matches => test_ephemeral_vm_name).each do |s|
|
|
s.destroy
|
|
end
|
|
(servers.templates.find_all { |t| t.name == test_ephemeral_vm_name}).each do |s|
|
|
s.destroy
|
|
end
|
|
|
|
server = Fog::Compute[:xenserver].servers.create(:name => test_ephemeral_vm_name,
|
|
:template_name => test_template_name)
|
|
server.reload
|
|
|
|
tests('The server model should') do
|
|
tests('have the action') do
|
|
test('reload') { server.respond_to? 'reload' }
|
|
%w{ affinity set_attribute refresh stop clean_shutdown hard_shutdown start destroy reboot hard_reboot clean_reboot }.each do |action|
|
|
test(action) { server.respond_to? action }
|
|
#test("#{action} returns successfully") { server.send(action.to_sym) ? true : false }
|
|
end
|
|
end
|
|
tests('have attributes') do
|
|
model_attribute_hash = server.attributes
|
|
attributes = [
|
|
:reference,
|
|
:uuid,
|
|
:is_a_template,
|
|
:__affinity,
|
|
:allowed_operations,
|
|
:__consoles,
|
|
:domarch,
|
|
:domid,
|
|
:__guest_metrics,
|
|
:is_a_snapshot,
|
|
:is_a_template,
|
|
:is_control_domain,
|
|
:memory_dynamic_max,
|
|
:memory_dynamic_min,
|
|
:memory_static_max,
|
|
:memory_static_min,
|
|
:memory_target,
|
|
:metrics,
|
|
:name_description,
|
|
:other_config,
|
|
:power_state,
|
|
:pv_args,
|
|
:__resident_on,
|
|
:__vbds,
|
|
:__vifs,
|
|
:vcpus_params,
|
|
:vcpus_at_startup,
|
|
:vcpus_max,
|
|
:hvm_boot_policy,
|
|
:hvm_boot_params,
|
|
:pci_bus,
|
|
:pv_kernel,
|
|
:pv_ramdisk,
|
|
:pv_legacy_args,
|
|
:pv_bootloader_args,
|
|
:snapshots
|
|
]
|
|
tests("The server model should respond to") do
|
|
attributes.each do |attribute|
|
|
test("#{attribute}") { server.respond_to? attribute }
|
|
end
|
|
end
|
|
tests("The attributes hash should have key") do
|
|
attributes.each do |attribute|
|
|
test("#{attribute}") { model_attribute_hash.has_key? attribute }
|
|
end
|
|
end
|
|
end
|
|
|
|
test('be a kind of Fog::Compute::XenServer::Server') { server.kind_of? Fog::Compute::XenServer::Server }
|
|
#test('return a Fog::Compute::XenServer::Host affinity') { server.affinity.kind_of? Fog::Compute::XenServer::Host }
|
|
|
|
end
|
|
|
|
tests("Creating a server") do
|
|
tests("it should create a server") do
|
|
s = nil
|
|
test("named #{test_ephemeral_vm_name}") do
|
|
s = servers.create(:name => test_ephemeral_vm_name,
|
|
:template_name => test_template_name)
|
|
servers.get(s.reference).name == test_ephemeral_vm_name
|
|
end
|
|
test("and destroy it afterwards") { s.destroy }
|
|
end
|
|
tests("it should create a server") do
|
|
s = nil
|
|
# The template has 2 VIFs already, we add 2 more
|
|
test("with 4 NICs") do
|
|
s = servers.create(:name => test_ephemeral_vm_name,
|
|
:template_name => test_template_name,
|
|
:networks => [connection.default_network, connection.default_network])
|
|
s.reload
|
|
s.networks.size == 4
|
|
end
|
|
test("and destroy it afterwards") { s.destroy }
|
|
end
|
|
end
|
|
|
|
tests("A real server should") do
|
|
tests("return valid vbds") do
|
|
test("as an array") { server.vbds.kind_of? Array }
|
|
server.vbds.each { |i|
|
|
test("and each VBD should be a Fog::Compute::XenServer::VBD") { i.kind_of? Fog::Compute::XenServer::VBD }
|
|
}
|
|
end
|
|
|
|
tests('return valid consoles') do
|
|
test('as an array') { server.consoles.kind_of? Array }
|
|
server.consoles.each { |i|
|
|
test('and each Console should be a Fog::Compute::XenServer::Console') { i.kind_of? Fog::Compute::XenServer::Console }
|
|
}
|
|
end
|
|
|
|
test("have 0 or more networks") { server.networks.kind_of? Array }
|
|
|
|
tests("have networks if networks > 0") do
|
|
if server.networks.size > 0
|
|
server.networks.each do |n|
|
|
test("and network is of type Fog::Compute::XenServer::Network") do
|
|
n.kind_of? Fog::Compute::XenServer::Network
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
test("reside on a Fog::Compute::XenServer::Host") { server.resident_on.kind_of? Fog::Compute::XenServer::Host }
|
|
#test("have Fog::Compute::XenServer::GuestMetrics") { server.guest_metrics.kind_of? Fog::Compute::XenServer::GuestMetrics }
|
|
test("be able to refresh itself") { server.refresh }
|
|
|
|
test("always stop when I say stop('hard')") do
|
|
server.stop 'hard'
|
|
end
|
|
|
|
# shutdown is async apparently, we wait
|
|
test("not be running when it's stopped") do
|
|
server.wait_for { !server.running? }
|
|
true
|
|
end
|
|
|
|
test("do nothing when I say stop('hard') but it's not running") do
|
|
server.stop('hard') == false
|
|
end
|
|
|
|
test("always start when I say start") do
|
|
server.start
|
|
end
|
|
|
|
# start is async apparently, we wait
|
|
test("be running if I started the server") do
|
|
server.wait_for { server.running? }
|
|
true
|
|
end
|
|
|
|
test("set attribute PV_bootloader to supergrub") do
|
|
server.set_attribute 'PV_bootloader', 'supergrub'
|
|
server.reload
|
|
server.pv_bootloader == 'supergrub'
|
|
end
|
|
|
|
tests("Creating a snapshot") do
|
|
snap_ref = server.snapshot('newsnapshot')
|
|
tests("it should create a snapshot") do
|
|
snap_ref = server.snapshot('newsnapshot')
|
|
servers.get(snap_ref).reference == snap_ref
|
|
end
|
|
test("and destroy it afterwards") { servers.get(snap_ref).destroy }
|
|
end
|
|
|
|
test("be able to be destroyed!") do
|
|
server.destroy
|
|
servers.get_by_name('fog-test-server-shindo') == nil
|
|
end
|
|
|
|
end
|
|
|
|
end
|