debian-mirror-gitlab/spec/services/alert_management/process_prometheus_alert_service_spec.rb

93 lines
2.7 KiB
Ruby
Raw Normal View History

2020-05-24 23:13:21 +05:30
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe AlertManagement::ProcessPrometheusAlertService do
2020-11-24 15:15:51 +05:30
let_it_be(:project, reload: true) { create(:project, :repository) }
2020-05-24 23:13:21 +05:30
2021-06-08 01:23:25 +05:30
let(:service) { described_class.new(project, payload) }
2020-06-23 00:09:42 +05:30
2020-05-24 23:13:21 +05:30
describe '#execute' do
2021-06-08 01:23:25 +05:30
include_context 'incident management settings enabled'
subject(:execute) { service.execute }
2020-11-24 15:15:51 +05:30
before do
2021-06-08 01:23:25 +05:30
stub_licensed_features(oncall_schedules: false, generic_alert_fingerprinting: false)
2020-11-24 15:15:51 +05:30
end
2020-05-24 23:13:21 +05:30
context 'when alert payload is valid' do
2021-06-08 01:23:25 +05:30
let_it_be(:starts_at) { '2020-04-27T10:10:22.265949279Z' }
let_it_be(:title) { 'Alert title' }
let_it_be(:fingerprint) { [starts_at, title, 'vector(1)'].join('/') }
let_it_be(:source) { 'Prometheus' }
let(:prometheus_status) { 'firing' }
2020-05-24 23:13:21 +05:30
let(:payload) do
{
2021-06-08 01:23:25 +05:30
'status' => prometheus_status,
2020-05-24 23:13:21 +05:30
'labels' => {
'alertname' => 'GitalyFileServerDown',
'channel' => 'gitaly',
'pager' => 'pagerduty',
'severity' => 's1'
},
'annotations' => {
'description' => 'Alert description',
'runbook' => 'troubleshooting/gitaly-down.md',
2021-06-08 01:23:25 +05:30
'title' => title
2020-05-24 23:13:21 +05:30
},
2021-06-08 01:23:25 +05:30
'startsAt' => starts_at,
2020-05-24 23:13:21 +05:30
'endsAt' => '2020-04-27T10:20:22.265949279Z',
2021-06-08 01:23:25 +05:30
'generatorURL' => 'http://8d467bd4607a:9090/graph?g0.expr=vector%281%29&g0.tab=1'
2020-05-24 23:13:21 +05:30
}
end
2021-06-08 01:23:25 +05:30
it_behaves_like 'processes new firing alert'
2020-05-24 23:13:21 +05:30
2021-06-08 01:23:25 +05:30
context 'with resolving payload' do
let(:prometheus_status) { 'resolved' }
2020-11-24 15:15:51 +05:30
2021-06-08 01:23:25 +05:30
it_behaves_like 'processes recovery alert'
2020-05-24 23:13:21 +05:30
end
2020-07-28 23:09:34 +05:30
context 'environment given' do
let(:environment) { create(:environment, project: project) }
2021-06-08 01:23:25 +05:30
let(:alert) { project.alert_management_alerts.last }
2020-07-28 23:09:34 +05:30
2021-06-08 01:23:25 +05:30
before do
2020-07-28 23:09:34 +05:30
payload['labels']['gitlab_environment_name'] = environment.name
2021-06-08 01:23:25 +05:30
end
2020-07-28 23:09:34 +05:30
2021-06-08 01:23:25 +05:30
it 'sets the environment' do
execute
2020-07-28 23:09:34 +05:30
expect(alert.environment).to eq(environment)
end
end
context 'prometheus alert given' do
let(:prometheus_alert) { create(:prometheus_alert, project: project) }
2021-06-08 01:23:25 +05:30
let(:alert) { project.alert_management_alerts.last }
2020-07-28 23:09:34 +05:30
2021-06-08 01:23:25 +05:30
before do
2020-07-28 23:09:34 +05:30
payload['labels']['gitlab_alert_id'] = prometheus_alert.prometheus_metric_id
2021-06-08 01:23:25 +05:30
end
2020-07-28 23:09:34 +05:30
2021-06-08 01:23:25 +05:30
it 'sets the prometheus alert and environment' do
execute
2020-07-28 23:09:34 +05:30
expect(alert.prometheus_alert).to eq(prometheus_alert)
expect(alert.environment).to eq(prometheus_alert.environment)
end
end
2020-05-24 23:13:21 +05:30
end
context 'when alert payload is invalid' do
let(:payload) { {} }
2021-06-08 01:23:25 +05:30
it_behaves_like 'alerts service responds with an error and takes no actions', :bad_request
2020-05-24 23:13:21 +05:30
end
end
end