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/lib/initializer_connections_spec.rb')
-rw-r--r--spec/lib/initializer_connections_spec.rb36
1 files changed, 25 insertions, 11 deletions
diff --git a/spec/lib/initializer_connections_spec.rb b/spec/lib/initializer_connections_spec.rb
index 4ca283c4f22..e69aa0aa821 100644
--- a/spec/lib/initializer_connections_spec.rb
+++ b/spec/lib/initializer_connections_spec.rb
@@ -3,15 +3,20 @@
require 'spec_helper'
RSpec.describe InitializerConnections do
- describe '.with_disabled_database_connections', :reestablished_active_record_base do
+ describe '.raise_if_new_database_connection', :reestablished_active_record_base do
+ before do
+ ActiveRecord::Base.connection_handler.clear_active_connections!
+ ActiveRecord::Base.connection_handler.flush_idle_connections!
+ end
+
def block_with_database_call
- described_class.with_disabled_database_connections do
+ described_class.raise_if_new_database_connection do
Project.first
end
end
def block_with_error
- described_class.with_disabled_database_connections do
+ described_class.raise_if_new_database_connection do
raise "oops, an error"
end
end
@@ -20,6 +25,12 @@ RSpec.describe InitializerConnections do
expect { block_with_database_call }.to raise_error(/Database connection should not be called during initializer/)
end
+ it 'prevents any database connection re-use within the block' do
+ Project.connection # establish a connection first, it will be used inside the block
+
+ expect { block_with_database_call }.to raise_error(/Database connection should not be called during initializer/)
+ end
+
it 'does not prevent database connection if SKIP_RAISE_ON_INITIALIZE_CONNECTIONS is set' do
stub_env('SKIP_RAISE_ON_INITIALIZE_CONNECTIONS', '1')
@@ -33,31 +44,34 @@ RSpec.describe InitializerConnections do
end
it 'restores original connection handler' do
- # rubocop:disable Database/MultipleDatabases
original_handler = ActiveRecord::Base.connection_handler
expect { block_with_database_call }.to raise_error(/Database connection should not be called during initializer/)
expect(ActiveRecord::Base.connection_handler).to eq(original_handler)
- # rubocop:enabled Database/MultipleDatabases
end
it 'restores original connection handler even there is an error' do
- # rubocop:disable Database/MultipleDatabases
original_handler = ActiveRecord::Base.connection_handler
expect { block_with_error }.to raise_error(/an error/)
expect(ActiveRecord::Base.connection_handler).to eq(original_handler)
- # rubocop:enabled Database/MultipleDatabases
end
- it 'raises if any new connection_pools are established in the block' do
+ it 'does not raise if connection_pool is retrieved in the block' do
+ # connection_pool, connection_db_config doesn't connect to database, so it's OK
+ expect do
+ described_class.raise_if_new_database_connection do
+ ApplicationRecord.connection_pool
+ end
+ end.not_to raise_error
+
expect do
- described_class.with_disabled_database_connections do
- ApplicationRecord.connects_to database: { writing: :main, reading: :main }
+ described_class.raise_if_new_database_connection do
+ Ci::ApplicationRecord.connection_pool
end
- end.to raise_error(/Unxpected connection_pools/)
+ end.not_to raise_error
end
end
end