gitlab-ce/spec/workers/concerns/click_house_worker_spec.rb

89 lines
2.2 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
RSpec.describe ClickHouseWorker, feature_category: :database do
let(:worker) do
Class.new do
def self.name
'DummyWorker'
end
include ApplicationWorker
include ClickHouseWorker
def perform
AnotherWorker.perform_async('identifier')
end
end
end
let(:another_worker) do
Class.new do
def self.name
'AnotherWorker'
end
include ApplicationWorker
end
end
before do
stub_const('DummyWorker', worker)
stub_const('AnotherWorker', another_worker)
end
describe '.register_click_house_worker?' do
subject(:register_click_house_worker?) { worker.register_click_house_worker? }
context 'when click_house_migration_lock is set' do
before do
worker.click_house_migration_lock(1.minute)
end
it { is_expected.to be(true) }
end
context 'when click_house_migration_lock is not set' do
it { is_expected.to be(true) }
end
context 'when worker does not include module' do
it { expect(another_worker).not_to respond_to(:register_click_house_worker?) }
end
end
describe '.click_house_worker_attrs' do
subject(:click_house_worker_attrs) { worker.click_house_migration_lock(ttl) }
let(:ttl) { 1.minute }
it { expect { click_house_worker_attrs }.not_to raise_error }
it { is_expected.to match(a_hash_including(migration_lock_ttl: 60.seconds)) }
context 'with invalid ttl' do
let(:ttl) { {} }
it 'raises exception' do
expect { click_house_worker_attrs }.to raise_error(ArgumentError)
end
end
end
it 'registers ClickHouse worker' do
expect(worker.register_click_house_worker?).to be_truthy
expect(another_worker).not_to respond_to(:register_click_house_worker?)
end
it 'sets default TTL for worker registration' do
expect(worker.click_house_worker_attrs).to match(
a_hash_including(migration_lock_ttl: ClickHouse::MigrationSupport::ExclusiveLock::DEFAULT_CLICKHOUSE_WORKER_TTL)
)
end
it 'registers worker to pause on ClickHouse migrations' do
expect(worker.get_pause_control).to eq(:click_house_migration)
expect(another_worker.get_pause_control).to be_nil
end
end