Project

General

Profile

« Previous | Next » 

Revision 91f8ffb1

Added by Daniel Lobato Garcia almost 7 years ago

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.

View differences:

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