Skip to content

Commit

Permalink
Merge pull request #85 from tinaafitz/generic_service_on_error
Browse files Browse the repository at this point in the history
Generic Service State Machine update_status change
  • Loading branch information
mkanoor authored Apr 3, 2017
2 parents f0f9a14 + 3263b0e commit c9739f2
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,24 +46,34 @@ def service_action
end
end

def update_status(service)
# Get status from input field status
status = @handle.inputs['status']
def error
@handle.root['ae_result'] == "error"
end

def updated_message(service, status)
updated_message = "Server [#{@handle.root['miq_server'].name}] "
updated_message += "Service [#{service.name}] #{service_action} "
updated_message += "Step [#{@handle.root['ae_state']}] "
updated_message += "Status [#{status}] "
updated_message += "Current Retry Number [#{@handle.root['ae_state_retries']}]"\
if @handle.root['ae_result'] == 'retry'
@handle.log(:info, "Status message: #{updated_message} ")
update_task(updated_message, status)
updated_message
end

if @handle.root['ae_result'] == "error"
@handle.create_notification(:level => "error",
:subject => service,
:message => "Generic Service Error: #{updated_message}")
end
def error_handling(service, message)
@handle.create_notification(:level => "error",
:subject => service,
:message => "Generic Service Error: #{message}")
service.on_error(service_action)
end

def update_status(service)
# Get status from input field status
status = @handle.inputs['status']
message = updated_message(service, status)
update_task(message, status)
error_handling(service, message) if error
end
end
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,17 @@
let(:svc_task) { MiqAeMethodService::MiqAeServiceServiceTemplateProvisionTask.find(task.id) }
let(:svc_service) { MiqAeMethodService::MiqAeServiceServiceAnsibleTower.find(service_ansible_tower.id) }
let(:root_object) do
Spec::Support::MiqAeMockObject.new('service' => svc_service,
'service_action' => 'Provision',
'miq_server' => svc_model_miq_server)
Spec::Support::MiqAeMockObject.new('service' => service_object,
'service_action' => service_action,
'service_template_provision_task' => svc_task,
'miq_server' => svc_model_miq_server)
end
let(:ae_service) { Spec::Support::MiqAeMockService.new(root_object) }
let(:errormsg) { "simple error" }
let(:svc_model_request) { MiqAeMethodService::MiqAeServiceServiceTemplateProvisionRequest.find(request.id) }
let(:miq_server) { EvmSpecHelper.local_miq_server }
let(:svc_model_miq_server) { MiqAeMethodService::MiqAeServiceMiqServer.find(miq_server.id) }
let(:service_action) { 'Provision' }
let(:service_object) { svc_service }

shared_examples_for "update_status_error" do
it "error" do
Expand All @@ -29,33 +31,30 @@
end
end

shared_examples_for "update_status_on_error" do
it "on_error" do
allow(svc_task).to receive(:destination).and_return(svc_service)
root_object['ae_result'] = 'error'
allow(ae_service).to receive(:create_notification)
allow(ae_service).to receive(:inputs) { {'status' => "fred"} }
expect(svc_service).to receive(:on_error).with(service_action)
described_class.new(ae_service).main
end
end

context "invalid service_action" do
let(:errormsg) { 'Invalid service_action' }
let(:root_object) do
Spec::Support::MiqAeMockObject.new('service' => svc_service,
'service_action' => 'fred',
'miq_server' => svc_model_miq_server)
end
let(:service_action) { 'fred' }
it_behaves_like "update_status_error"
end

context "service not found" do
let(:errormsg) { 'Service not found' }
let(:root_object) do
Spec::Support::MiqAeMockObject.new('service_template_provision_task' => task,
'service_action' => 'Provision',
'miq_server' => svc_model_miq_server)
end
let(:service_object) { nil }
it_behaves_like "update_status_error"
end

context "update_status" do
let(:root_object) do
Spec::Support::MiqAeMockObject.new('service_template_provision_task' => task,
'service_action' => 'Provision',
'service' => svc_service,
'miq_server' => svc_model_miq_server)
end
it "successful scenario" do
allow(svc_task).to receive(:destination).and_return(svc_service)
allow(svc_service).to receive(:update_status).and_return(nil)
Expand All @@ -65,6 +64,17 @@

msg = "Server [#{miq_server.name}] Service [#{svc_service.name}] Provision Step [] Status [fred] "
expect(svc_model_request.reload.message).to eq(msg)
expect(svc_service).not_to receive(:on_error)
end
end

context "on_error provisioning" do
let(:service_action) { 'Provision' }
it_behaves_like "update_status_on_error"
end

context "on_error retirement" do
let(:service_action) { 'Retirement' }
it_behaves_like "update_status_on_error"
end
end

0 comments on commit c9739f2

Please sign in to comment.