diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-07-20 12:55:51 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-07-20 12:55:51 +0300 |
commit | e8d2c2579383897a1dd7f9debd359abe8ae8373d (patch) | |
tree | c42be41678c2586d49a75cabce89322082698334 /spec/lib/gitlab/database/load_balancing/sidekiq_client_middleware_spec.rb | |
parent | fc845b37ec3a90aaa719975f607740c22ba6a113 (diff) |
Add latest changes from gitlab-org/gitlab@14-1-stable-eev14.1.0-rc42
Diffstat (limited to 'spec/lib/gitlab/database/load_balancing/sidekiq_client_middleware_spec.rb')
-rw-r--r-- | spec/lib/gitlab/database/load_balancing/sidekiq_client_middleware_spec.rb | 61 |
1 files changed, 42 insertions, 19 deletions
diff --git a/spec/lib/gitlab/database/load_balancing/sidekiq_client_middleware_spec.rb b/spec/lib/gitlab/database/load_balancing/sidekiq_client_middleware_spec.rb index 90051172fca..54050a87af0 100644 --- a/spec/lib/gitlab/database/load_balancing/sidekiq_client_middleware_spec.rb +++ b/spec/lib/gitlab/database/load_balancing/sidekiq_client_middleware_spec.rb @@ -5,12 +5,27 @@ require 'spec_helper' RSpec.describe Gitlab::Database::LoadBalancing::SidekiqClientMiddleware do let(:middleware) { described_class.new } + let(:load_balancer) { double.as_null_object } + let(:worker_class) { 'TestDataConsistencyWorker' } + let(:job) { { "job_id" => "a180b47c-3fd6-41b8-81e9-34da61c3400e" } } + + before do + skip_feature_flags_yaml_validation + skip_default_enabled_yaml_check + allow(::Gitlab::Database::LoadBalancing).to receive_message_chain(:proxy, :load_balancer).and_return(load_balancer) + end + after do Gitlab::Database::LoadBalancing::Session.clear_session end + def run_middleware + middleware.call(worker_class, job, nil, nil) {} + end + describe '#call' do shared_context 'data consistency worker class' do |data_consistency, feature_flag| + let(:expected_consistency) { data_consistency } let(:worker_class) do Class.new do def self.name @@ -31,13 +46,23 @@ RSpec.describe Gitlab::Database::LoadBalancing::SidekiqClientMiddleware do end end + shared_examples_for 'job data consistency' do + it "sets job data consistency" do + run_middleware + + expect(job['worker_data_consistency']).to eq(expected_consistency) + end + end + shared_examples_for 'does not pass database locations' do it 'does not pass database locations', :aggregate_failures do - middleware.call(worker_class, job, double(:queue), redis_pool) { 10 } + run_middleware expect(job['database_replica_location']).to be_nil expect(job['database_write_location']).to be_nil end + + include_examples 'job data consistency' end shared_examples_for 'mark data consistency location' do |data_consistency| @@ -45,7 +70,9 @@ RSpec.describe Gitlab::Database::LoadBalancing::SidekiqClientMiddleware do let(:location) { '0/D525E3A8' } - context 'when feature flag load_balancing_for_sidekiq is disabled' do + context 'when feature flag is disabled' do + let(:expected_consistency) { :always } + before do stub_feature_flags(load_balancing_for_test_data_consistency_worker: false) end @@ -59,12 +86,14 @@ RSpec.describe Gitlab::Database::LoadBalancing::SidekiqClientMiddleware do end it 'passes database_replica_location' do - expect(middleware).to receive_message_chain(:load_balancer, :host, "database_replica_location").and_return(location) + expect(load_balancer).to receive_message_chain(:host, "database_replica_location").and_return(location) - middleware.call(worker_class, job, double(:queue), redis_pool) { 10 } + run_middleware expect(job['database_replica_location']).to eq(location) end + + include_examples 'job data consistency' end context 'when write was performed' do @@ -73,12 +102,14 @@ RSpec.describe Gitlab::Database::LoadBalancing::SidekiqClientMiddleware do end it 'passes primary write location', :aggregate_failures do - expect(middleware).to receive_message_chain(:load_balancer, :primary_write_location).and_return(location) + expect(load_balancer).to receive(:primary_write_location).and_return(location) - middleware.call(worker_class, job, double(:queue), redis_pool) { 10 } + run_middleware expect(job['database_write_location']).to eq(location) end + + include_examples 'job data consistency' end end @@ -89,7 +120,7 @@ RSpec.describe Gitlab::Database::LoadBalancing::SidekiqClientMiddleware do end it 'does not set database locations again' do - middleware.call(worker_class, job, double(:queue), redis_pool) { 10 } + run_middleware expect(job[provided_database_location]).to eq(old_location) expect(job[other_location]).to be_nil @@ -101,8 +132,8 @@ RSpec.describe Gitlab::Database::LoadBalancing::SidekiqClientMiddleware do let(:job) { { "job_id" => "a180b47c-3fd6-41b8-81e9-34da61c3400e", provided_database_location => old_location } } before do - allow(middleware).to receive_message_chain(:load_balancer, :primary_write_location).and_return(new_location) - allow(middleware).to receive_message_chain(:load_balancer, :database_replica_location).and_return(new_location) + allow(load_balancer).to receive(:primary_write_location).and_return(new_location) + allow(load_balancer).to receive(:database_replica_location).and_return(new_location) end context "when write was performed" do @@ -114,24 +145,16 @@ RSpec.describe Gitlab::Database::LoadBalancing::SidekiqClientMiddleware do end end - let(:queue) { 'default' } - let(:redis_pool) { Sidekiq.redis_pool } - let(:worker_class) { 'TestDataConsistencyWorker' } - let(:job) { { "job_id" => "a180b47c-3fd6-41b8-81e9-34da61c3400e" } } - - before do - skip_feature_flags_yaml_validation - skip_default_enabled_yaml_check - end - context 'when worker cannot be constantized' do let(:worker_class) { 'ActionMailer::MailDeliveryJob' } + let(:expected_consistency) { :always } include_examples 'does not pass database locations' end context 'when worker class does not include ApplicationWorker' do let(:worker_class) { ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper } + let(:expected_consistency) { :always } include_examples 'does not pass database locations' end |