gitlab-org--gitlab-foss/spec/lib/gitlab/sidekiq_middleware/monitor_spec.rb

49 lines
1.2 KiB
Ruby

# 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 Gitlab::SidekiqDaemon::Monitor' do
expect(Gitlab::SidekiqDaemon::Monitor.instance).to receive(:within_job)
.with(anything, '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::SidekiqDaemon::Monitor::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