diff options
Diffstat (limited to 'spec/workers/concerns')
-rw-r--r-- | spec/workers/concerns/application_worker_spec.rb | 71 | ||||
-rw-r--r-- | spec/workers/concerns/gitlab/github_import/object_importer_spec.rb | 33 | ||||
-rw-r--r-- | spec/workers/concerns/waitable_worker_spec.rb | 6 |
3 files changed, 85 insertions, 25 deletions
diff --git a/spec/workers/concerns/application_worker_spec.rb b/spec/workers/concerns/application_worker_spec.rb index 29c69ff8b4b..ac4e4a682c8 100644 --- a/spec/workers/concerns/application_worker_spec.rb +++ b/spec/workers/concerns/application_worker_spec.rb @@ -176,6 +176,77 @@ RSpec.describe ApplicationWorker do end end + describe '.data_consistency' do + using RSpec::Parameterized::TableSyntax + + where(:data_consistency, :sidekiq_option_retry, :expect_error) do + :delayed | false | true + :delayed | 0 | true + :delayed | 3 | false + :delayed | nil | false + :sticky | false | false + :sticky | 0 | false + :sticky | 3 | false + :sticky | nil | false + :always | false | false + :always | 0 | false + :always | 3 | false + :always | nil | false + end + + with_them do + before do + worker.sidekiq_options retry: sidekiq_option_retry unless sidekiq_option_retry.nil? + end + + context "when workers data consistency is #{params['data_consistency']}" do + it "#{params['expect_error'] ? '' : 'not to '}raise an exception" do + if expect_error + expect { worker.data_consistency data_consistency } + .to raise_error("Retry support cannot be disabled if data_consistency is set to :delayed") + else + expect { worker.data_consistency data_consistency } + .not_to raise_error + end + end + end + end + end + + describe '.retry' do + using RSpec::Parameterized::TableSyntax + + where(:data_consistency, :sidekiq_option_retry, :expect_error) do + :delayed | false | true + :delayed | 0 | true + :delayed | 3 | false + :sticky | false | false + :sticky | 0 | false + :sticky | 3 | false + :always | false | false + :always | 0 | false + :always | 3 | false + end + + with_them do + before do + worker.data_consistency(data_consistency) + end + + context "when retry sidekiq option is #{params['sidekiq_option_retry']}" do + it "#{params['expect_error'] ? '' : 'not to '}raise an exception" do + if expect_error + expect { worker.sidekiq_options retry: sidekiq_option_retry } + .to raise_error("Retry support cannot be disabled if data_consistency is set to :delayed") + else + expect { worker.sidekiq_options retry: sidekiq_option_retry } + .not_to raise_error + end + end + end + end + end + describe '.perform_async' do shared_examples_for 'worker utilizes load balancing capabilities' do |data_consistency| before do diff --git a/spec/workers/concerns/gitlab/github_import/object_importer_spec.rb b/spec/workers/concerns/gitlab/github_import/object_importer_spec.rb index 85e1721461f..4c96daea7b3 100644 --- a/spec/workers/concerns/gitlab/github_import/object_importer_spec.rb +++ b/spec/workers/concerns/gitlab/github_import/object_importer_spec.rb @@ -11,12 +11,8 @@ RSpec.describe Gitlab::GithubImport::ObjectImporter do include(Gitlab::GithubImport::ObjectImporter) - def counter_name - :dummy_counter - end - - def counter_description - 'This is a counter' + def object_type + :dummy end def representation_class @@ -42,7 +38,7 @@ RSpec.describe Gitlab::GithubImport::ObjectImporter do end) end - describe '#import' do + describe '#import', :clean_gitlab_redis_shared_state do let(:importer_class) { double(:importer_class, name: 'klass_name') } let(:importer_instance) { double(:importer_instance) } let(:project) { double(:project, full_path: 'foo/bar', id: 1) } @@ -64,10 +60,6 @@ RSpec.describe Gitlab::GithubImport::ObjectImporter do expect(importer_instance) .to receive(:execute) - expect(worker.counter) - .to receive(:increment) - .and_call_original - expect_next_instance_of(Gitlab::Import::Logger) do |logger| expect(logger) .to receive(:info) @@ -90,6 +82,11 @@ RSpec.describe Gitlab::GithubImport::ObjectImporter do end worker.import(project, client, { 'number' => 10, 'github_id' => 1 }) + + expect(Gitlab::GithubImport::ObjectCounter.summary(project)).to eq({ + 'fetched' => {}, + 'imported' => { 'dummy' => 1 } + }) end it 'logs error when the import fails' do @@ -176,18 +173,4 @@ RSpec.describe Gitlab::GithubImport::ObjectImporter do .to raise_error(KeyError, 'key not found: :github_id') end end - - describe '#counter' do - it 'returns a Prometheus counter' do - expect(worker) - .to receive(:counter_name) - .and_call_original - - expect(worker) - .to receive(:counter_description) - .and_call_original - - worker.counter - end - end end diff --git a/spec/workers/concerns/waitable_worker_spec.rb b/spec/workers/concerns/waitable_worker_spec.rb index 5d08d38380a..824ae8fcf83 100644 --- a/spec/workers/concerns/waitable_worker_spec.rb +++ b/spec/workers/concerns/waitable_worker_spec.rb @@ -38,6 +38,12 @@ RSpec.describe WaitableWorker do it 'inlines workloads <= 3 jobs' do args_list = [[1], [2], [3]] expect(worker).to receive(:bulk_perform_inline).with(args_list).and_call_original + expect(Gitlab::AppJsonLogger).to( + receive(:info).with(a_hash_including('message' => 'running inline', + 'class' => 'Gitlab::Foo::Bar::DummyWorker', + 'job_status' => 'running', + 'queue' => 'foo_bar_dummy')) + .exactly(3).times) worker.bulk_perform_and_wait(args_list) |