diff options
Diffstat (limited to 'spec/workers/concerns/click_house_worker_spec.rb')
-rw-r--r-- | spec/workers/concerns/click_house_worker_spec.rb | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/spec/workers/concerns/click_house_worker_spec.rb b/spec/workers/concerns/click_house_worker_spec.rb new file mode 100644 index 00000000000..cb8bf9c7578 --- /dev/null +++ b/spec/workers/concerns/click_house_worker_spec.rb @@ -0,0 +1,88 @@ +# 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 |