Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/workers/concerns/click_house_worker_spec.rb')
-rw-r--r--spec/workers/concerns/click_house_worker_spec.rb88
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