summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/sidekiq_middleware/instrumentation_logger_spec.rb
blob: eb9ba50cdcd7d4903ccb21465829a4d0b0be47e9 (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
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe Gitlab::SidekiqMiddleware::InstrumentationLogger do
  let(:job) { { 'jid' => 123 } }
  let(:queue) { 'test_queue' }
  let(:worker) do
    Class.new do
      def self.name
        'TestDWorker'
      end

      include ApplicationWorker

      def perform(*args)
      end
    end
  end

  subject { described_class.new }

  before do
    stub_const('TestWorker', worker)
  end

  describe '.keys' do
    it 'returns all available payload keys' do
      expected_keys = [
        :cpu_s,
        :gitaly_calls,
        :gitaly_duration_s,
        :rugged_calls,
        :rugged_duration_s,
        :elasticsearch_calls,
        :elasticsearch_duration_s,
        :elasticsearch_timed_out_count,
        :mem_objects,
        :mem_bytes,
        :mem_mallocs,
        :redis_calls,
        :redis_duration_s,
        :redis_read_bytes,
        :redis_write_bytes,
        :redis_action_cable_calls,
        :redis_action_cable_duration_s,
        :redis_action_cable_read_bytes,
        :redis_action_cable_write_bytes,
        :redis_cache_calls,
        :redis_cache_duration_s,
        :redis_cache_read_bytes,
        :redis_cache_write_bytes,
        :redis_queues_calls,
        :redis_queues_duration_s,
        :redis_queues_read_bytes,
        :redis_queues_write_bytes,
        :redis_shared_state_calls,
        :redis_shared_state_duration_s,
        :redis_shared_state_read_bytes,
        :redis_shared_state_write_bytes,
        :db_count,
        :db_write_count,
        :db_cached_count,
        :external_http_count,
        :external_http_duration_s,
        :rack_attack_redis_count,
        :rack_attack_redis_duration_s
      ]

      expect(described_class.keys).to include(*expected_keys)
    end
  end

  describe '#call', :request_store do
    let(:instrumentation_values) do
      {
        cpu_s: 10,
        unknown_attribute: 123,
        db_count: 0,
        db_cached_count: 0,
        db_write_count: 0,
        gitaly_calls: 0,
        redis_calls: 0
      }
    end

    before do
      allow(::Gitlab::InstrumentationHelper).to receive(:add_instrumentation_data) do |values|
        values.merge!(instrumentation_values)
      end
    end

    it 'merges correct instrumentation data in the job' do
      expect { |b| subject.call(worker, job, queue, &b) }.to yield_control

      expected_values = instrumentation_values.except(:unknown_attribute)

      expect(job[:instrumentation]).to eq(expected_values)
    end
  end
end