diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-05-20 14:34:42 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-05-20 14:34:42 +0000 |
commit | 9f46488805e86b1bc341ea1620b866016c2ce5ed (patch) | |
tree | f9748c7e287041e37d6da49e0a29c9511dc34768 /spec/lib/gitlab/alert_management | |
parent | dfc92d081ea0332d69c8aca2f0e745cb48ae5e6d (diff) | |
download | gitlab-ce-9f46488805e86b1bc341ea1620b866016c2ce5ed.tar.gz |
Add latest changes from gitlab-org/gitlab@13-0-stable-ee
Diffstat (limited to 'spec/lib/gitlab/alert_management')
-rw-r--r-- | spec/lib/gitlab/alert_management/alert_params_spec.rb | 94 | ||||
-rw-r--r-- | spec/lib/gitlab/alert_management/alert_status_counts_spec.rb | 55 |
2 files changed, 149 insertions, 0 deletions
diff --git a/spec/lib/gitlab/alert_management/alert_params_spec.rb b/spec/lib/gitlab/alert_management/alert_params_spec.rb new file mode 100644 index 00000000000..5cf34038f68 --- /dev/null +++ b/spec/lib/gitlab/alert_management/alert_params_spec.rb @@ -0,0 +1,94 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Gitlab::AlertManagement::AlertParams do + let_it_be(:project) { create(:project, :repository, :private) } + + describe '.from_generic_alert' do + let(:started_at) { Time.current.change(usec: 0).rfc3339 } + let(:default_payload) do + { + 'title' => 'Alert title', + 'description' => 'Description', + 'monitoring_tool' => 'Monitoring tool name', + 'service' => 'Service', + 'hosts' => ['gitlab.com'], + 'start_time' => started_at, + 'some' => { 'extra' => { 'payload' => 'here' } } + } + end + let(:payload) { default_payload } + + subject { described_class.from_generic_alert(project: project, payload: payload) } + + it 'returns Alert compatible parameters' do + is_expected.to eq( + project_id: project.id, + title: 'Alert title', + description: 'Description', + monitoring_tool: 'Monitoring tool name', + service: 'Service', + severity: 'critical', + hosts: ['gitlab.com'], + payload: payload, + started_at: started_at + ) + end + + context 'when severity given' do + let(:payload) { default_payload.merge(severity: 'low') } + + it 'returns Alert compatible parameters' do + expect(subject[:severity]).to eq('low') + end + end + + context 'when there are no hosts in the payload' do + let(:payload) { {} } + + it 'hosts param is an empty array' do + expect(subject[:hosts]).to be_empty + end + end + end + + describe '.from_prometheus_alert' do + let(:payload) do + { + 'status' => 'firing', + 'labels' => { + 'alertname' => 'GitalyFileServerDown', + 'channel' => 'gitaly', + 'pager' => 'pagerduty', + 'severity' => 's1' + }, + 'annotations' => { + 'description' => 'Alert description', + 'runbook' => 'troubleshooting/gitaly-down.md', + 'title' => 'Alert title' + }, + 'startsAt' => '2020-04-27T10:10:22.265949279Z', + 'endsAt' => '0001-01-01T00:00:00Z', + 'generatorURL' => 'http://8d467bd4607a:9090/graph?g0.expr=vector%281%29&g0.tab=1', + 'fingerprint' => 'b6ac4d42057c43c1' + } + end + let(:parsed_alert) { Gitlab::Alerting::Alert.new(project: project, payload: payload) } + + subject { described_class.from_prometheus_alert(project: project, parsed_alert: parsed_alert) } + + it 'returns Alert-compatible params' do + is_expected.to eq( + project_id: project.id, + title: 'Alert title', + description: 'Alert description', + monitoring_tool: 'Prometheus', + payload: payload, + started_at: parsed_alert.starts_at, + ended_at: parsed_alert.ends_at, + fingerprint: parsed_alert.gitlab_fingerprint + ) + end + end +end diff --git a/spec/lib/gitlab/alert_management/alert_status_counts_spec.rb b/spec/lib/gitlab/alert_management/alert_status_counts_spec.rb new file mode 100644 index 00000000000..816ed918fe8 --- /dev/null +++ b/spec/lib/gitlab/alert_management/alert_status_counts_spec.rb @@ -0,0 +1,55 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Gitlab::AlertManagement::AlertStatusCounts do + let_it_be(:current_user) { create(:user) } + let_it_be(:project) { create(:project) } + let_it_be(:alert_1) { create(:alert_management_alert, :resolved, project: project) } + let_it_be(:alert_2) { create(:alert_management_alert, :ignored, project: project) } + let_it_be(:alert_3) { create(:alert_management_alert) } + let(:params) { {} } + + describe '#execute' do + subject(:counts) { described_class.new(current_user, project, params) } + + context 'for an unauthorized user' do + it 'returns zero for all statuses' do + expect(counts.open).to eq(0) + expect(counts.all).to eq(0) + + AlertManagement::Alert::STATUSES.each_key do |status| + expect(counts.send(status)).to eq(0) + end + end + end + + context 'for an authorized user' do + before do + project.add_developer(current_user) + end + + it 'returns the correct counts for each status' do + expect(counts.open).to eq(0) + expect(counts.all).to eq(2) + expect(counts.resolved).to eq(1) + expect(counts.ignored).to eq(1) + expect(counts.triggered).to eq(0) + expect(counts.acknowledged).to eq(0) + end + + context 'when filtering params are included' do + let(:params) { { status: AlertManagement::Alert::STATUSES[:resolved] } } + + it 'returns the correct counts for each status' do + expect(counts.open).to eq(0) + expect(counts.all).to eq(1) + expect(counts.resolved).to eq(1) + expect(counts.ignored).to eq(0) + expect(counts.triggered).to eq(0) + expect(counts.acknowledged).to eq(0) + end + end + end + end +end |