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

require 'spec_helper'

describe Gitlab::SidekiqMiddleware::Monitor do
  let(:monitor) { described_class.new }

  describe '#call' do
    let(:worker) { double }
    let(:job) { { 'jid' => 'job-id' } }
    let(:queue) { 'my-queue' }

    it 'calls SidekiqMonitor' do
      expect(Gitlab::SidekiqMonitor.instance).to receive(:within_job)
        .with('job-id', 'my-queue')
        .and_call_original

      expect { |blk| monitor.call(worker, job, queue, &blk) }.to yield_control
    end

    it 'passthroughs the return value' do
      result = monitor.call(worker, job, queue) do
        'value'
      end

      expect(result).to eq('value')
    end

    context 'when cancel happens' do
      subject do
        monitor.call(worker, job, queue) do
          raise Gitlab::SidekiqMonitor::CancelledError
        end
      end

      it 'skips the job' do
        expect { subject }.to raise_error(Sidekiq::JobRetry::Skip)
      end

      it 'puts job in DeadSet' do
        ::Sidekiq::DeadSet.new.clear

        expect do
          subject rescue Sidekiq::JobRetry::Skip
        end.to change { ::Sidekiq::DeadSet.new.size }.by(1)
      end
    end
  end
end