Commit 41833edb authored by Sean Arnold's avatar Sean Arnold

Add tests for Prometheus alert processing

Refactor process alert worker spec
parent 105f3b6d
......@@ -96,7 +96,7 @@ module AlertManagement
return unless am_alert
return if am_alert.issue
IncidentManagement::ProcessAlertWorker.new.perform(nil, nil, am_alert.id)
IncidentManagement::ProcessAlertWorker.perform_async(nil, nil, am_alert.id)
end
def logger
......
......@@ -83,6 +83,15 @@ RSpec.describe AlertManagement::ProcessPrometheusAlertService do
context 'when alert does not exist' do
context 'when alert can be created' do
it_behaves_like 'creates an alert management alert'
it 'creates an incident issue' do
expect(IncidentManagement::ProcessAlertWorker)
.to receive(:perform_async)
.with(nil, nil, kind_of(Integer))
.once
expect(subject).to be_success
end
end
context 'when alert cannot be created' do
......@@ -102,6 +111,13 @@ RSpec.describe AlertManagement::ProcessPrometheusAlertService do
execute
end
it 'does not create incident issue' do
expect(IncidentManagement::ProcessAlertWorker)
.not_to receive(:perform_async)
expect(subject).to be_success
end
end
it { is_expected.to be_success }
......
......@@ -16,66 +16,73 @@ RSpec.describe IncidentManagement::ProcessAlertWorker do
subject { described_class.new.perform(nil, nil, alert.id) }
before do
allow(Gitlab::AppLogger).to receive(:warn).and_call_original
allow(IncidentManagement::CreateIssueService)
.to receive(:new).with(alert.project, parsed_payload)
.and_call_original
end
it 'creates an issue' do
expect(IncidentManagement::CreateIssueService)
.to receive(:new).with(alert.project, parsed_payload)
shared_examples 'creates issue successfully' do
it 'creates an issue' do
expect(IncidentManagement::CreateIssueService)
.to receive(:new).with(alert.project, parsed_payload)
expect { subject }.to change { Issue.count }.by(1)
end
expect { subject }.to change { Issue.count }.by(1)
end
context 'with invalid alert' do
let(:invalid_alert_id) { non_existing_record_id }
it 'updates AlertManagement::Alert#issue_id' do
subject
subject { described_class.new.perform(nil, nil, invalid_alert_id) }
expect(alert.reload.issue_id).to eq(created_issue.id)
end
it 'does not create issues' do
expect(IncidentManagement::CreateIssueService).not_to receive(:new)
it 'does not write a warning to log' do
subject
expect { subject }.not_to change { Issue.count }
expect(Gitlab::AppLogger).not_to have_received(:warn)
end
end
context 'with valid alert' do
before do
allow(Gitlab::AppLogger).to receive(:warn).and_call_original
end
it_behaves_like 'creates issue successfully'
context 'when alert can be updated' do
it 'updates AlertManagement::Alert#issue_id' do
subject
context 'when alert cannot be updated' do
let_it_be(:alert) { create(:alert_management_alert, :with_validation_errors, project: project, payload: payload) }
expect(alert.reload.issue_id).to eq(created_issue.id)
it 'updates AlertManagement::Alert#issue_id' do
expect { subject }.not_to change { alert.reload.issue_id }
end
it 'does not write a warning to log' do
it 'logs a warning' do
subject
expect(Gitlab::AppLogger).not_to have_received(:warn)
expect(Gitlab::AppLogger).to have_received(:warn).with(
message: 'Cannot link an Issue with Alert',
issue_id: created_issue.id,
alert_id: alert.id,
alert_errors: { hosts: ['hosts array is over 255 chars'] }
)
end
end
context 'when alert cannot be updated' do
let_it_be(:alert) { create(:alert_management_alert, :with_validation_errors, project: project, payload: payload) }
context 'prometheus alert' do
let_it_be(:alert) { create(:alert_management_alert, :prometheus, project: project, started_at: started_at) }
let_it_be(:parsed_payload) { alert.payload }
it 'updates AlertManagement::Alert#issue_id' do
expect { subject }.not_to change { alert.reload.issue_id }
end
it_behaves_like 'creates issue successfully'
end
end
it 'logs a warning' do
subject
context 'with invalid alert' do
let(:invalid_alert_id) { non_existing_record_id }
expect(Gitlab::AppLogger).to have_received(:warn).with(
message: 'Cannot link an Issue with Alert',
issue_id: created_issue.id,
alert_id: alert.id,
alert_errors: { hosts: ['hosts array is over 255 chars'] }
)
end
end
subject { described_class.new.perform(nil, nil, invalid_alert_id) }
it 'does not create issues' do
expect(IncidentManagement::CreateIssueService).not_to receive(:new)
expect { subject }.not_to change { Issue.count }
end
end
end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment