Revision 91f8ffb1
Added by Daniel Lobato Garcia almost 7 years ago
test/models/compute_resources/openstack_test.rb | ||
---|---|---|
require 'test_helper'
|
||
require 'models/compute_resources/compute_resource_test_helpers'
|
||
|
||
class OpenstackTest < ActiveSupport::TestCase
|
||
include ComputeResourceTestHelpers
|
||
module Foreman
|
||
module Model
|
||
class OpenstackTest < ActiveSupport::TestCase
|
||
include ComputeResourceTestHelpers
|
||
|
||
setup do
|
||
@compute_resource = FactoryGirl.build(:openstack_cr)
|
||
end
|
||
should have_one(:key_pair).with_foreign_key('compute_resource_id').
|
||
dependent(:destroy)
|
||
|
||
teardown do
|
||
Fog.unmock!
|
||
end
|
||
setup do
|
||
@compute_resource = FactoryGirl.build(:openstack_cr)
|
||
end
|
||
|
||
test "#associated_host matches any NIC" do
|
||
host = FactoryGirl.create(:host, :ip => '10.0.0.154')
|
||
iface = mock('iface1', :floating_ip_address => '10.0.0.154', :private_ip_address => "10.1.1.1")
|
||
assert_equal host, as_admin { @compute_resource.associated_host(iface) }
|
||
end
|
||
teardown do
|
||
Fog.unmock!
|
||
end
|
||
|
||
test "boot_from_volume does not get triggered when a string 'false' is passed as argument" do
|
||
Fog.mock!
|
||
@compute_resource.stubs(:key_pair).returns(mocked_key_pair)
|
||
@compute_resource.expects(:boot_from_volume).never
|
||
@compute_resource.create_vm(:boot_from_volume => 'false', :nics => [""],
|
||
:flavor_ref => 'foo_flavor', :image_ref => 'foo_image')
|
||
end
|
||
test "#associated_host matches any NIC" do
|
||
host = FactoryGirl.create(:host, :ip => '10.0.0.154')
|
||
iface = mock('iface1', :floating_ip_address => '10.0.0.154', :private_ip_address => "10.1.1.1")
|
||
assert_equal host, as_admin { @compute_resource.associated_host(iface) }
|
||
end
|
||
|
||
describe "formatting hints" do
|
||
it "formats well when set to ServerGroupAntiAffinity" do
|
||
args = {
|
||
:scheduler_hint_filter => "ServerGroupAntiAffinity",
|
||
:scheduler_hint_data => {
|
||
:scheduler_hint_value => "some-uuid"
|
||
test "boot_from_volume does not get triggered when a string 'false' is passed as argument" do
|
||
Fog.mock!
|
||
@compute_resource.stubs(:key_pair).returns(mocked_key_pair)
|
||
@compute_resource.expects(:boot_from_volume).never
|
||
@compute_resource.create_vm(:boot_from_volume => 'false', :nics => [""],
|
||
:flavor_ref => 'foo_flavor', :image_ref => 'foo_image')
|
||
end
|
||
|
||
describe "formatting hints" do
|
||
it "formats well when set to ServerGroupAntiAffinity" do
|
||
args = {
|
||
:scheduler_hint_filter => "ServerGroupAntiAffinity",
|
||
:scheduler_hint_data => {
|
||
:scheduler_hint_value => "some-uuid"
|
||
}
|
||
}
|
||
}
|
||
desired = {
|
||
:os_scheduler_hints => {
|
||
:group => "some-uuid"
|
||
}
|
||
}
|
||
@compute_resource.format_scheduler_hint_filter(args)
|
||
assert_equal(desired, args)
|
||
end
|
||
desired = {
|
||
:os_scheduler_hints => {
|
||
:group => "some-uuid"
|
||
}
|
||
}
|
||
@compute_resource.format_scheduler_hint_filter(args)
|
||
assert_equal(desired, args)
|
||
end
|
||
|
||
it "formats well when set to ServerGroupAffinity" do
|
||
args = {
|
||
:scheduler_hint_filter => "ServerGroupAffinity",
|
||
:scheduler_hint_data => {
|
||
:scheduler_hint_value => "some-uuid"
|
||
it "formats well when set to ServerGroupAffinity" do
|
||
args = {
|
||
:scheduler_hint_filter => "ServerGroupAffinity",
|
||
:scheduler_hint_data => {
|
||
:scheduler_hint_value => "some-uuid"
|
||
}
|
||
}
|
||
}
|
||
desired = {
|
||
:os_scheduler_hints => {
|
||
:group => "some-uuid"
|
||
}
|
||
}
|
||
@compute_resource.format_scheduler_hint_filter(args)
|
||
assert_equal(desired, args)
|
||
end
|
||
desired = {
|
||
:os_scheduler_hints => {
|
||
:group => "some-uuid"
|
||
}
|
||
}
|
||
@compute_resource.format_scheduler_hint_filter(args)
|
||
assert_equal(desired, args)
|
||
end
|
||
|
||
it "formats well when set to Raw" do
|
||
args = {
|
||
:scheduler_hint_filter => "Raw",
|
||
:scheduler_hint_data => {
|
||
:scheduler_hint_value => '{"key": "value"}'
|
||
it "formats well when set to Raw" do
|
||
args = {
|
||
:scheduler_hint_filter => "Raw",
|
||
:scheduler_hint_data => {
|
||
:scheduler_hint_value => '{"key": "value"}'
|
||
}
|
||
}
|
||
}
|
||
desired = {
|
||
:os_scheduler_hints => {
|
||
'key' => "value"
|
||
}
|
||
}
|
||
@compute_resource.format_scheduler_hint_filter(args)
|
||
assert_equal(desired, args)
|
||
end
|
||
desired = {
|
||
:os_scheduler_hints => {
|
||
'key' => "value"
|
||
}
|
||
}
|
||
@compute_resource.format_scheduler_hint_filter(args)
|
||
assert_equal(desired, args)
|
||
end
|
||
|
||
it "Should raise exception if set to Raw and malformed json" do
|
||
args = {
|
||
:scheduler_hint_filter => "Raw",
|
||
:scheduler_hint_data => {
|
||
:scheduler_hint_value => '{"key": }'
|
||
it "Should raise exception if set to Raw and malformed json" do
|
||
args = {
|
||
:scheduler_hint_filter => "Raw",
|
||
:scheduler_hint_data => {
|
||
:scheduler_hint_value => '{"key": }'
|
||
}
|
||
}
|
||
}
|
||
assert_raise ::JSON::ParserError do
|
||
@compute_resource.format_scheduler_hint_filter(args)
|
||
end
|
||
end
|
||
assert_raise ::JSON::ParserError do
|
||
@compute_resource.format_scheduler_hint_filter(args)
|
||
end
|
||
end
|
||
|
||
it "Should raise exception if no hint data provided" do
|
||
args = {
|
||
:scheduler_hint_filter => "Raw"
|
||
}
|
||
e = assert_raise(::Foreman::Exception) do
|
||
@compute_resource.format_scheduler_hint_filter(args)
|
||
it "Should raise exception if no hint data provided" do
|
||
args = {
|
||
:scheduler_hint_filter => "Raw"
|
||
}
|
||
e = assert_raise(::Foreman::Exception) do
|
||
@compute_resource.format_scheduler_hint_filter(args)
|
||
end
|
||
assert_equal("ERF42-4598 [Foreman::Exception]: Hint data is missing", e.message)
|
||
end
|
||
end
|
||
assert_equal("ERF42-4598 [Foreman::Exception]: Hint data is missing", e.message)
|
||
end
|
||
end
|
||
|
||
describe "find_vm_by_uuid" do
|
||
it "raises RecordNotFound when the vm does not exist" do
|
||
cr = mock_cr_servers(Foreman::Model::Openstack.new, empty_servers)
|
||
assert_find_by_uuid_raises(ActiveRecord::RecordNotFound, cr)
|
||
end
|
||
end
|
||
describe "find_vm_by_uuid" do
|
||
it "raises RecordNotFound when the vm does not exist" do
|
||
cr = mock_cr_servers(Foreman::Model::Openstack.new, empty_servers)
|
||
assert_find_by_uuid_raises(ActiveRecord::RecordNotFound, cr)
|
||
end
|
||
end
|
||
|
||
private
|
||
private
|
||
|
||
def mocked_key_pair
|
||
key_pair = mock
|
||
key_pair.stubs(:name).returns('foo_key')
|
||
key_pair
|
||
def mocked_key_pair
|
||
key_pair = mock
|
||
key_pair.stubs(:name).returns('foo_key')
|
||
key_pair
|
||
end
|
||
end
|
||
end
|
||
end
|
Also available in: Unified diff
Fixes #19631 - ComputeResource with KeyPair can be removed
The concern for removing the compute resources with keypairs was trying
to destroy the compute resource too early. Also, this deletion already
happened because of the has_one :dependency => :destroy relation
This fixes the problem and adds tests to ensure the relation works.