Skip to content

Commit

Permalink
Add specs for VmOrTemplate.post_refresh_ems
Browse files Browse the repository at this point in the history
  • Loading branch information
Fryguy committed Dec 13, 2016
1 parent aeb4f6a commit c39789d
Show file tree
Hide file tree
Showing 2 changed files with 230 additions and 0 deletions.
79 changes: 79 additions & 0 deletions spec/factories/ems_folder.rb
Expand Up @@ -14,4 +14,83 @@
factory :inventory_root_group,
:class => "ManageIQ::Providers::ConfigurationManager::InventoryRootGroup",
:parent => :ems_folder

#
# VMware specific folders
#

factory :vmware_folder, :parent => :ems_folder do
sequence(:ems_ref) { |n| "group-d#{n}" }
end

factory :vmware_folder_vm, :parent => :ems_folder do
sequence(:ems_ref) { |n| "group-v#{n}" }
end

factory :vmware_folder_host, :parent => :ems_folder do
sequence(:ems_ref) { |n| "group-h#{n}" }
end

factory :vmware_folder_datastore, :parent => :ems_folder do
sequence(:ems_ref) { |n| "group-s#{n}" }
end

factory :vmware_folder_network, :parent => :ems_folder do
sequence(:ems_ref) { |n| "group-n#{n}" }
end

factory :vmware_folder_root, :parent => :vmware_folder do
name "Datacenters"
hidden true
end

factory :vmware_folder_vm_root, :parent => :vmware_folder_vm do
name "vm"
hidden true
end

factory :vmware_folder_host_root, :parent => :vmware_folder_host do
name "host"
hidden true
end

factory :vmware_folder_datastore_root, :parent => :vmware_folder_datastore do
name "datastore"
hidden true
end

factory :vmware_folder_network_root, :parent => :vmware_folder_network do
name "network"
hidden true
end

factory :vmware_datacenter, :parent => :vmware_folder, :class => "Datacenter" do
sequence(:name) { |n| "Test Datacenter #{seq_padded_for_sorting(n)}" }
end
end

def build_vmware_folder_structure!(ems)
ems.add_child(
FactoryGirl.create(:vmware_folder_root, :ems_id => ems.id).tap do |root|
root.add_child(
FactoryGirl.create(:vmware_folder, :name => "yellow1", :ems_id => ems.id).tap do |f|
f.add_child(
FactoryGirl.create(:vmware_datacenter, :ems_id => ems.id).tap do |dc|
dc.add_children(
FactoryGirl.create(:vmware_folder_vm_root, :ems_id => ems.id) do |vm|
vm.add_children(
FactoryGirl.create(:vmware_folder_vm, :name => "blue1", :ems_id => ems.id),
FactoryGirl.create(:vmware_folder_vm, :name => "blue2", :ems_id => ems.id)
)
end,
FactoryGirl.create(:vmware_folder_host_root, :ems_id => ems.id),
FactoryGirl.create(:vmware_folder_datastore_root, :ems_id => ems.id),
FactoryGirl.create(:vmware_folder_network_root, :ems_id => ems.id)
)
end
)
end
)
end
)
end
151 changes: 151 additions & 0 deletions spec/models/vm_or_template_spec.rb
Expand Up @@ -866,4 +866,155 @@
expect(VmOrTemplate.not_archived_nor_orphaned).to eq([vm])
end
end

describe ".post_refresh_ems" do
let(:folder_blue1) { EmsFolder.find_by(:name => "blue1") }
let(:folder_blue2) { EmsFolder.find_by(:name => "blue2") }
let(:folder_vm_root) { EmsFolder.find_by(:name => "vm") }
let(:vm_blue1) { VmOrTemplate.find_by(:name => "vm_blue1") }
let(:vm_blue2) { VmOrTemplate.find_by(:name => "vm_blue2") }

let!(:ems) do
_, _, zone = EvmSpecHelper.local_guid_miq_server_zone
FactoryGirl.create(:ems_vmware, :zone => zone).tap do |ems|
build_vmware_folder_structure!(ems)
folder_blue1.add_child(FactoryGirl.create(:vm_vmware, :name => "vm_blue1", :ems_id => ems.id))
folder_blue2.add_child(FactoryGirl.create(:vm_vmware, :name => "vm_blue2", :ems_id => ems.id))
end
end

let!(:start_time) { Time.now.utc }

it "when a folder is created under a folder" do
new_folder = FactoryGirl.create(:vmware_folder_vm, :ems_id => ems.id)
new_folder.parent = folder_blue1

described_class.post_refresh_ems(ems.id, start_time)

expect(MiqQueue.count).to eq(0)
end

it "when a folder is renamed" do
folder_blue1.update_attributes(:name => "new blue1")

described_class.post_refresh_ems(ems.id, start_time)

expect(MiqQueue.count).to eq(1)
expect(MiqQueue.first).to have_attributes(
:class_name => vm_blue1.class.name,
:instance_id => vm_blue1.id,
:method_name => "classify_with_parent_folder_path"
)
end

it "when a folder is moved" do
folder_blue1.parent = folder_blue2

described_class.post_refresh_ems(ems.id, start_time)

expect(MiqQueue.count).to eq(1)
expect(MiqQueue.first).to have_attributes(
:class_name => vm_blue1.class.name,
:instance_id => vm_blue1.id,
:method_name => "classify_with_parent_folder_path"
)
end

it "when a VM is created under a folder" do
new_vm = FactoryGirl.create(:vm_vmware, :ems_id => ems.id)
new_vm.with_relationship_type("ems_metadata") { |v| v.parent = folder_blue1 }

described_class.post_refresh_ems(ems.id, start_time)

expect(MiqQueue.count).to eq(1)
expect(MiqQueue.first).to have_attributes(
:class_name => new_vm.class.name,
:instance_id => new_vm.id,
:method_name => "post_create_actions"
)
end

it "when a VM is moved to another folder" do
vm_blue1.with_relationship_type("ems_metadata") { |v| v.parent = folder_blue2 }

described_class.post_refresh_ems(ems.id, start_time)

expect(MiqQueue.count).to eq(1)
expect(MiqQueue.first).to have_attributes(
:class_name => vm_blue1.class.name,
:instance_id => vm_blue1.id,
:method_name => "classify_with_parent_folder_path"
)
end

it "when a folder is created and a folder is moved under it simultaneously" do
new_folder = FactoryGirl.create(:vmware_folder_vm, :ems_id => ems.id)
new_folder.parent = folder_vm_root
folder_blue1.parent = new_folder

described_class.post_refresh_ems(ems.id, start_time)

expect(MiqQueue.count).to eq(1)
expect(MiqQueue.first).to have_attributes(
:class_name => vm_blue1.class.name,
:instance_id => vm_blue1.id,
:method_name => "classify_with_parent_folder_path"
)
end

it "when a folder is renamed and a folder is moved under it simultaneously" do
folder_blue1.update_attributes(:name => "new blue1")
folder_blue2.parent = folder_blue1

described_class.post_refresh_ems(ems.id, start_time)

queue_items = MiqQueue.order(:instance_id)
expect(queue_items.count).to eq(2)
expect(queue_items[0]).to have_attributes(
:class_name => vm_blue1.class.name,
:instance_id => vm_blue1.id,
:method_name => "classify_with_parent_folder_path"
)
expect(queue_items[1]).to have_attributes(
:class_name => vm_blue2.class.name,
:instance_id => vm_blue2.id,
:method_name => "classify_with_parent_folder_path"
)
end

it "when a folder is created and a VM is moved under it simultaneously" do
new_folder = FactoryGirl.create(:vmware_folder_vm, :ems_id => ems.id)
new_folder.parent = folder_vm_root
vm_blue1.with_relationship_type("ems_metadata") { |v| v.parent = new_folder }

described_class.post_refresh_ems(ems.id, start_time)

expect(MiqQueue.count).to eq(1)
expect(MiqQueue.first).to have_attributes(
:class_name => vm_blue1.class.name,
:instance_id => vm_blue1.id,
:method_name => "classify_with_parent_folder_path"
)
end

it "when a folder is renamed and a VM is moved under it simultaneously" do
folder_blue2.update_attributes(:name => "new blue2")
vm_blue1.with_relationship_type("ems_metadata") { |v| v.parent = folder_blue2 }

described_class.post_refresh_ems(ems.id, start_time)

queue_items = MiqQueue.order(:instance_id)
expect(queue_items.count).to eq(2)
expect(queue_items[0]).to have_attributes(
:class_name => vm_blue1.class.name,
:instance_id => vm_blue1.id,
:method_name => "classify_with_parent_folder_path"
)
expect(queue_items[1]).to have_attributes(
:class_name => vm_blue2.class.name,
:instance_id => vm_blue2.id,
:method_name => "classify_with_parent_folder_path"
)
end
end
end

0 comments on commit c39789d

Please sign in to comment.