summaryrefslogtreecommitdiff
path: root/spec/workers/concerns
diff options
context:
space:
mode:
Diffstat (limited to 'spec/workers/concerns')
-rw-r--r--spec/workers/concerns/application_worker_spec.rb71
-rw-r--r--spec/workers/concerns/gitlab/github_import/object_importer_spec.rb33
-rw-r--r--spec/workers/concerns/waitable_worker_spec.rb6
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)