|
1 | 1 | RSpec.describe VmRetireTask do |
2 | 2 | let(:user) { FactoryBot.create(:user_with_group) } |
3 | | - let(:vm) { FactoryBot.create(:vm, :raw_power_state => power_state) } |
| 3 | + let(:ems) { FactoryBot.create(:ext_management_system) } |
| 4 | + let(:vm) { FactoryBot.create(:vm, :ext_management_system => ems, :raw_power_state => power_state) } |
4 | 5 | let!(:miq_server) { EvmSpecHelper.local_miq_server } |
5 | 6 | let(:miq_request) { FactoryBot.create(:vm_retire_request, :requester => user) } |
6 | | - let(:vm_retire_task) { FactoryBot.create(:vm_retire_task, :source => vm, :miq_request => miq_request, :options => {:src_ids => [vm.id]}) } |
| 7 | + let(:vm_retire_task) { FactoryBot.create(:vm_retire_task, :source => vm, :miq_request => miq_request, :options => task_options) } |
| 8 | + let(:task_options) { {:src_ids => [vm.id]} } |
7 | 9 | let(:approver) { FactoryBot.create(:user_miq_request_approver) } |
8 | 10 | let(:power_state) { "unknown" } |
9 | 11 |
|
|
84 | 86 | before { NotificationType.seed } |
85 | 87 |
|
86 | 88 | it "creates a vm_retiring notification" do |
87 | | - expect(vm_retire_task).to receive(:finish_retirement) |
| 89 | + expect(vm_retire_task).to receive(:remove_from_provider) |
88 | 90 | vm_retire_task.signal(:start_retirement) |
89 | 91 |
|
90 | 92 | vm_retiring_notifications = Notification.of_type(:vm_retiring) |
|
93 | 95 | end |
94 | 96 |
|
95 | 97 | it "start the vm retirement process" do |
96 | | - expect(vm_retire_task).to receive(:finish_retirement) |
| 98 | + expect(vm_retire_task).to receive(:remove_from_provider) |
97 | 99 | vm_retire_task.signal(:start_retirement) |
98 | 100 | expect(vm.reload.retirement_state).to eq("retiring") |
99 | 101 | end |
|
125 | 127 | end |
126 | 128 | end |
127 | 129 |
|
| 130 | + describe "#remove_from_provider" do |
| 131 | + context "with removal_type=remove_from_disk" do |
| 132 | + let(:task_options) { {:src_ids => [vm.id], :removal_type => "remove_from_disk"} } |
| 133 | + |
| 134 | + it "doesn't delete from disk if we didn't provision it" do |
| 135 | + expect(vm).not_to receive(:remove_from_disk) |
| 136 | + expect(vm_retire_task).to receive(:check_removed_from_provider) |
| 137 | + vm_retire_task.signal(:remove_from_provider) |
| 138 | + end |
| 139 | + |
| 140 | + context "with tag lifecycle retire_full" do |
| 141 | + before { vm.tag_with("retire_full", :ns => "/managed/lifecycle") } |
| 142 | + |
| 143 | + it "calls remove_from_disk" do |
| 144 | + expect(vm).to receive(:remove_from_disk) |
| 145 | + expect(vm_retire_task).to receive(:check_removed_from_provider) |
| 146 | + vm_retire_task.signal(:remove_from_provider) |
| 147 | + end |
| 148 | + end |
| 149 | + end |
| 150 | + |
| 151 | + context "with removal_type=unregister" do |
| 152 | + let(:task_options) { {:src_ids => [vm.id], :removal_type => "unregister"} } |
| 153 | + |
| 154 | + it "calls unregister" do |
| 155 | + expect(vm).to receive(:unregister) |
| 156 | + expect(vm_retire_task).to receive(:check_removed_from_provider) |
| 157 | + vm_retire_task.signal(:remove_from_provider) |
| 158 | + end |
| 159 | + end |
| 160 | + |
| 161 | + context "with missing removal_type" do |
| 162 | + it "raises an exception" do |
| 163 | + vm_retire_task.signal(:remove_from_provider) |
| 164 | + expect(vm_retire_task.reload).to have_attributes( |
| 165 | + :state => "finished", |
| 166 | + :status => "Error", |
| 167 | + :message => "Unknown retirement type" |
| 168 | + ) |
| 169 | + end |
| 170 | + end |
| 171 | + end |
| 172 | + |
| 173 | + describe "#check_removed_from_provider" do |
| 174 | + context "with an active vm" do |
| 175 | + it "queues a refresh and requeues the state" do |
| 176 | + expect(vm_retire_task).not_to receive(:finish_retirement) |
| 177 | + vm_retire_task.signal(:check_removed_from_provider) |
| 178 | + expect(vm_retire_task.reload.phase).to eq("check_removed_from_provider") |
| 179 | + expect(MiqQueue.first).to have_attributes(:class_name => described_class.name, :method_name => "check_removed_from_provider") |
| 180 | + end |
| 181 | + end |
| 182 | + |
| 183 | + context "with an archived vm" do |
| 184 | + let(:vm) { FactoryBot.create(:vm, :ext_management_system => nil, :raw_power_state => power_state) } |
| 185 | + |
| 186 | + it "signals finish_retirement" do |
| 187 | + expect(vm_retire_task).to receive(:finish_retirement) |
| 188 | + vm_retire_task.signal(:check_removed_from_provider) |
| 189 | + end |
| 190 | + end |
| 191 | + end |
| 192 | + |
128 | 193 | describe "#finish_retirement" do |
129 | 194 | before do |
130 | 195 | NotificationType.seed |
|
0 commit comments