diff options
Diffstat (limited to 'spec/initializers')
-rw-r--r-- | spec/initializers/00_rails_disable_joins_spec.rb | 6 | ||||
-rw-r--r-- | spec/initializers/action_cable_subscription_adapter_identifier_spec.rb | 2 | ||||
-rw-r--r-- | spec/initializers/carrierwave_patch_spec.rb | 6 | ||||
-rw-r--r-- | spec/initializers/load_balancing_spec.rb | 100 | ||||
-rw-r--r-- | spec/initializers/microsoft_graph_mailer_spec.rb | 56 | ||||
-rw-r--r-- | spec/initializers/net_http_patch_spec.rb | 1 | ||||
-rw-r--r-- | spec/initializers/settings_spec.rb | 36 | ||||
-rw-r--r-- | spec/initializers/trusted_proxies_spec.rb | 2 |
8 files changed, 201 insertions, 8 deletions
diff --git a/spec/initializers/00_rails_disable_joins_spec.rb b/spec/initializers/00_rails_disable_joins_spec.rb index 78e78b6810b..3b390f1ef17 100644 --- a/spec/initializers/00_rails_disable_joins_spec.rb +++ b/spec/initializers/00_rails_disable_joins_spec.rb @@ -98,8 +98,8 @@ RSpec.describe 'DisableJoins' do primary_model.has_one :test_bridge, anonymous_class: bridge_model, foreign_key: :primary_record_id bridge_model.belongs_to :test_secondary, anonymous_class: secondary_model, foreign_key: :secondary_record_id - primary_model.has_one :test_secondary, through: :test_bridge, anonymous_class: secondary_model, - disable_joins: -> { joins_disabled_flag } + primary_model.has_one :test_secondary, + through: :test_bridge, anonymous_class: secondary_model, disable_joins: -> { joins_disabled_flag } primary_record = primary_model.create! secondary_record = secondary_model.create! @@ -149,7 +149,7 @@ RSpec.describe 'DisableJoins' do primary_model.has_many :test_bridges, anonymous_class: bridge_model, foreign_key: :primary_record_id bridge_model.has_many :test_secondaries, anonymous_class: secondary_model, foreign_key: :bridge_record_id primary_model.has_many :test_secondaries, through: :test_bridges, anonymous_class: secondary_model, - disable_joins: -> { disabled_join_flag } + disable_joins: -> { disabled_join_flag } primary_record = primary_model.create! bridge_record = bridge_model.create!(primary_record_id: primary_record.id) diff --git a/spec/initializers/action_cable_subscription_adapter_identifier_spec.rb b/spec/initializers/action_cable_subscription_adapter_identifier_spec.rb index 074df9adc21..94134ce44fd 100644 --- a/spec/initializers/action_cable_subscription_adapter_identifier_spec.rb +++ b/spec/initializers/action_cable_subscription_adapter_identifier_spec.rb @@ -22,7 +22,7 @@ RSpec.describe 'ActionCableSubscriptionAdapterIdentifier override' do sub = ActionCable.server.pubsub.send(:redis_connection) - expect(sub.connection[:id]).to eq('redis:///home/localuser/redis/redis.socket/0') + expect(sub.connection[:id]).to eq('unix:///home/localuser/redis/redis.socket/0') expect(ActionCable.server.config.cable[:id]).to be_nil end end diff --git a/spec/initializers/carrierwave_patch_spec.rb b/spec/initializers/carrierwave_patch_spec.rb index b0f337935ef..0910342f10f 100644 --- a/spec/initializers/carrierwave_patch_spec.rb +++ b/spec/initializers/carrierwave_patch_spec.rb @@ -8,7 +8,7 @@ RSpec.describe 'CarrierWave::Storage::Fog::File' do let(:storage) { CarrierWave::Storage::Fog.new(uploader) } let(:bucket_name) { 'some-bucket' } let(:connection) { ::Fog::Storage.new(connection_options) } - let(:bucket) { connection.directories.new(key: bucket_name )} + let(:bucket) { connection.directories.new(key: bucket_name ) } let(:test_filename) { 'test' } let(:test_data) { File.read(Rails.root.join('spec/support/gitlab_stubs/gitlab_ci.yml')) } @@ -33,7 +33,7 @@ RSpec.describe 'CarrierWave::Storage::Fog::File' do end describe '#copy_to' do - let(:dest_filename) { 'copied.txt'} + let(:dest_filename) { 'copied.txt' } it 'copies the file' do fog_file = subject.send(:file) @@ -67,7 +67,7 @@ RSpec.describe 'CarrierWave::Storage::Fog::File' do end describe '#copy_to' do - let(:dest_filename) { 'copied.txt'} + let(:dest_filename) { 'copied.txt' } it 'copies the file' do result = subject.copy_to(dest_filename) diff --git a/spec/initializers/load_balancing_spec.rb b/spec/initializers/load_balancing_spec.rb new file mode 100644 index 00000000000..d9162acd2cd --- /dev/null +++ b/spec/initializers/load_balancing_spec.rb @@ -0,0 +1,100 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'load_balancing', :delete, :reestablished_active_record_base do + subject(:initialize_load_balancer) do + load Rails.root.join('config/initializers/load_balancing.rb') + end + + before do + # Stub out middleware call, as not idempotent + allow(Gitlab::Application.instance.middleware).to receive(:use) + end + + context 'with replica hosts configured' do + before do + # Setup host-based load balancing + # Patch in our load balancer config, simply pointing at the test database twice + allow(Gitlab::Database::LoadBalancing::Configuration).to receive(:for_model) do |base_model| + db_host = base_model.connection_pool.db_config.host + + Gitlab::Database::LoadBalancing::Configuration.new(base_model, [db_host, db_host]) + end + end + + after do + # reset load balancing to original state + allow(Gitlab::Database::LoadBalancing::Configuration).to receive(:for_model).and_call_original + allow(Gitlab::Cluster::LifecycleEvents).to receive(:in_clustered_puma?).and_call_original + + load Rails.root.join('config/initializers/load_balancing.rb') + end + + it 'configures load balancer with two replica hosts' do + expect(ApplicationRecord.connection.load_balancer.configuration.hosts.size).to eq(0) + expect(Ci::ApplicationRecord.connection.load_balancer.configuration.hosts.size).to eq(0) + + initialize_load_balancer + + expect(ApplicationRecord.connection.load_balancer.configuration.hosts.size).to eq(2) + expect(Ci::ApplicationRecord.connection.load_balancer.configuration.hosts.size).to eq(2) + end + + context 'for a clustered puma worker' do + let!(:group) { create(:group, name: 'my group') } + + before do + # Pretend we are in clustered environment + allow(Gitlab::Cluster::LifecycleEvents).to receive(:in_clustered_puma?).and_return(true) + end + + it 'configures load balancer to have two replica hosts' do + initialize_load_balancer + + simulate_puma_worker do + expect(ApplicationRecord.connection.load_balancer.configuration.hosts.size).to eq(2) + expect(Ci::ApplicationRecord.connection.load_balancer.configuration.hosts.size).to eq(2) + end + end + + # We tried using Process.fork for a more realistic simulation + # but run into bugs where GPRC cannot be used before forking processes. + # See https://gitlab.com/gitlab-org/gitlab/-/issues/333184#note_1081658113 + def simulate_puma_worker + # Called in https://github.com/rails/rails/blob/6-1-stable/activerecord/lib/active_record/connection_adapters/pool_config.rb#L73 + ActiveRecord::ConnectionAdapters::PoolConfig.discard_pools! + + # Called in config/puma.rb + Gitlab::Cluster::LifecycleEvents.do_worker_start + + yield + end + + it 'makes a read query successfully' do + # Clear any previous sticky writes + ::Gitlab::Database::LoadBalancing::Session.clear_session + + initialize_load_balancer + + group_name = simulate_puma_worker do + Group.find_by_name('my group').name + end + + expect(group_name).to eq(group.name) + end + + it 'makes a write query successfully' do + initialize_load_balancer + + expect do + simulate_puma_worker do + Group.touch_all + end + + group.reload + end.to change(group, :updated_at) + end + end + end +end diff --git a/spec/initializers/microsoft_graph_mailer_spec.rb b/spec/initializers/microsoft_graph_mailer_spec.rb new file mode 100644 index 00000000000..fbe667e34fe --- /dev/null +++ b/spec/initializers/microsoft_graph_mailer_spec.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'microsoft_graph_mailer initializer for GitLab' do + let(:microsoft_graph_setting) do + { + user_id: SecureRandom.hex, + tenant: SecureRandom.hex, + client_id: SecureRandom.hex, + client_secret: SecureRandom.hex, + azure_ad_endpoint: 'https://test-azure_ad_endpoint', + graph_endpoint: 'https://test-graph_endpoint' + } + end + + def load_microsoft_graph_mailer_initializer + load Rails.root.join('config/initializers/microsoft_graph_mailer.rb') + end + + context 'when microsoft_graph_mailer is enabled' do + before do + stub_microsoft_graph_mailer_setting(microsoft_graph_setting.merge(enabled: true)) + end + + it 'configures ActionMailer' do + previous_delivery_method = ActionMailer::Base.delivery_method + previous_microsoft_graph_settings = ActionMailer::Base.microsoft_graph_settings + + load_microsoft_graph_mailer_initializer + + expect(ActionMailer::Base.delivery_method).to eq(:microsoft_graph) + expect(ActionMailer::Base.microsoft_graph_settings).to eq(microsoft_graph_setting) + ensure + ActionMailer::Base.delivery_method = previous_delivery_method + ActionMailer::Base.microsoft_graph_settings = previous_microsoft_graph_settings + end + end + + context 'when microsoft_graph_mailer is disabled' do + before do + stub_microsoft_graph_mailer_setting(microsoft_graph_setting.merge(enabled: false)) + end + + it 'does not configure ActionMailer' do + previous_delivery_method = ActionMailer::Base.delivery_method + previous_microsoft_graph_settings = ActionMailer::Base.microsoft_graph_settings + + load_microsoft_graph_mailer_initializer + + expect(previous_microsoft_graph_settings).not_to eq(:microsoft_graph) + expect(ActionMailer::Base.delivery_method).to eq(previous_delivery_method) + expect(ActionMailer::Base.microsoft_graph_settings).to eq(previous_microsoft_graph_settings) + end + end +end diff --git a/spec/initializers/net_http_patch_spec.rb b/spec/initializers/net_http_patch_spec.rb index d6b003d84fa..d56730917f1 100644 --- a/spec/initializers/net_http_patch_spec.rb +++ b/spec/initializers/net_http_patch_spec.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require 'fast_spec_helper' +require 'net/http' require_relative '../../config/initializers/net_http_patch' diff --git a/spec/initializers/settings_spec.rb b/spec/initializers/settings_spec.rb index 71ea12a41aa..c3200d2fab1 100644 --- a/spec/initializers/settings_spec.rb +++ b/spec/initializers/settings_spec.rb @@ -58,4 +58,40 @@ RSpec.describe Settings do end end end + + describe "#weak_passwords_digest_set" do + subject { described_class.gitlab.weak_passwords_digest_set } + + it 'is a Set' do + expect(subject).to be_kind_of(Set) + end + + it 'contains 4500 password digests' do + expect(subject.length).to eq(4500) + end + + it 'includes 8 char weak password digest' do + expect(subject).to include(digest("password")) + end + + it 'includes 16 char weak password digest' do + expect(subject).to include(digest("progressivehouse")) + end + + it 'includes long char weak password digest' do + expect(subject).to include(digest("01234567890123456789")) + end + + it 'does not include 7 char weak password digest' do + expect(subject).not_to include(digest("1234567")) + end + + it 'does not include plaintext' do + expect(subject).not_to include("password") + end + + def digest(plaintext) + Digest::SHA256.base64digest(plaintext) + end + end end diff --git a/spec/initializers/trusted_proxies_spec.rb b/spec/initializers/trusted_proxies_spec.rb index 2786f034969..63c96ce17d1 100644 --- a/spec/initializers/trusted_proxies_spec.rb +++ b/spec/initializers/trusted_proxies_spec.rb @@ -58,7 +58,7 @@ RSpec.describe 'trusted_proxies' do end def stub_request(headers = {}) - ActionDispatch::RemoteIp.new(proc { }, false, Rails.application.config.action_dispatch.trusted_proxies).call(headers) + ActionDispatch::RemoteIp.new(proc {}, false, Rails.application.config.action_dispatch.trusted_proxies).call(headers) ActionDispatch::Request.new(headers) end |