Welcome to mirror list, hosted at ThFree Co, Russian Federation.

loglinking_spec.rb « support « spec « qa - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 79004630253861c23b0e404782547a4429060548 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# frozen_string_literal: true

RSpec.describe QA::Support::Loglinking do
  describe '.failure_metadata' do
    context 'when correlation_id does not exist' do
      it 'returns nil when correlation_id is empty' do
        expect(QA::Support::Loglinking.failure_metadata('')).to eq(nil)
      end

      it 'returns nil when correlation_id is nil' do
        expect(QA::Support::Loglinking.failure_metadata(nil)).to eq(nil)
      end
    end

    context 'when correlation_id exists' do
      let(:correlation_id) { 'foo123' }
      let(:sentry_url) { "https://sentry.address/?environment=bar&query=correlation_id%3A%22#{correlation_id}%22" }
      let(:discover_url) { "https://kibana.address/app/discover#/?_a=%28index:%27pubsub-rails-inf-foo%27%2Cquery%3A%28language%3Akuery%2Cquery%3A%27json.correlation_id%20%3A%20#{correlation_id}%27%29%29&_g=%28time%3A%28from%3A%272022-11-13T00:00:00.000Z%27%2Cto%3A%272022-11-14T00:00:00.000Z%27%29%29" }
      let(:dashboard_url) { "https://kibana.address/app/dashboards#/view/abc-123-dashboard-id?_g=%28time%3A%28from:%272022-11-13T00:00:00.000Z%27%2Cto%3A%272022-11-14T00:00:00.000Z%27%29%29&_a=%28filters%3A%21%28%28query%3A%28match_phrase%3A%28json.correlation_id%3A%27#{correlation_id}%27%29%29%29%29%29" }

      before do
        allow(QA::Support::SystemLogs::Sentry).to receive(:new).and_return(sentry)
        allow(QA::Support::SystemLogs::Kibana).to receive(:new).and_return(kibana)
      end

      context 'and both Sentry and Kibana exist for the logging environment' do
        let(:sentry) { instance_double(QA::Support::SystemLogs::Sentry, url: sentry_url) }
        let(:kibana) do
          instance_double(QA::Support::SystemLogs::Kibana,
                          discover_url: discover_url, dashboard_url: dashboard_url)
        end

        it 'returns both Sentry and Kibana URLs' do
          expect(QA::Support::Loglinking.failure_metadata(correlation_id)).to eql(<<~ERROR.chomp)
          Correlation Id: foo123
          Sentry Url: #{sentry_url}
          Kibana - Discover Url: #{discover_url}
          Kibana - Dashboard Url: #{dashboard_url}
          ERROR
        end
      end

      context 'and only Sentry exists for the logging environment' do
        let(:sentry) { instance_double(QA::Support::SystemLogs::Sentry, url: sentry_url) }
        let(:kibana) do
          instance_double(QA::Support::SystemLogs::Kibana,
                          discover_url: nil, dashboard_url: nil)
        end

        it 'returns only Sentry URL' do
          expect(QA::Support::Loglinking.failure_metadata(correlation_id)).to eql(<<~ERROR.chomp)
          Correlation Id: foo123
          Sentry Url: #{sentry_url}
          ERROR
        end
      end

      context 'and only Kibana exists for the logging environment' do
        let(:sentry) { instance_double(QA::Support::SystemLogs::Sentry, url: nil) }
        let(:kibana) do
          instance_double(QA::Support::SystemLogs::Kibana,
                          discover_url: discover_url, dashboard_url: dashboard_url)
        end

        it 'returns only Kibana Discover and Dashboard URLs' do
          expect(QA::Support::Loglinking.failure_metadata(correlation_id)).to eql(<<~ERROR.chomp)
          Correlation Id: foo123
          Kibana - Discover Url: #{discover_url}
          Kibana - Dashboard Url: #{dashboard_url}
          ERROR
        end
      end

      context 'and neither Sentry nor Kibana exists for the logging environment' do
        let(:sentry) { instance_double(QA::Support::SystemLogs::Sentry, url: nil) }
        let(:kibana) { instance_double(QA::Support::SystemLogs::Kibana, discover_url: nil, dashboard_url: nil) }

        it 'returns only the correlation ID' do
          expect(QA::Support::Loglinking.failure_metadata(correlation_id)).to eql("Correlation Id: #{correlation_id}")
        end
      end
    end
  end

  describe '.logging_environment' do
    let(:staging_address) { 'https://staging.gitlab.com' }
    let(:staging_ref_address) { 'https://staging-ref.gitlab.com' }
    let(:production_address) { 'https://gitlab.com' }
    let(:pre_prod_address) { 'https://pre.gitlab.com' }
    let(:logging_env_array) do
      [
        {
          address: staging_address,
          expected_env: :staging
        },
        {
          address: staging_ref_address,
          expected_env: :staging_ref
        },
        {
          address: production_address,
          expected_env: :production
        },
        {
          address: pre_prod_address,
          expected_env: :pre
        },
        {
          address: 'https://foo.com',
          expected_env: nil
        }
      ]
    end

    it 'returns logging environment if environment found' do
      logging_env_array.each do |logging_env_hash|
        allow(QA::Runtime::Scenario).to receive(:attributes).and_return({ gitlab_address: logging_env_hash[:address] })

        expect(QA::Support::Loglinking.logging_environment).to eq(logging_env_hash[:expected_env])
      end
    end
  end
end