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/gitlab/database_spec.rb')
-rw-r--r--spec/lib/gitlab/database_spec.rb99
1 files changed, 87 insertions, 12 deletions
diff --git a/spec/lib/gitlab/database_spec.rb b/spec/lib/gitlab/database_spec.rb
index f2be888e6eb..ab3cd8fa5e6 100644
--- a/spec/lib/gitlab/database_spec.rb
+++ b/spec/lib/gitlab/database_spec.rb
@@ -15,6 +15,68 @@ RSpec.describe Gitlab::Database, feature_category: :database do
end
end
+ describe '.all_database_connections' do
+ it 'the first entry is always main' do
+ expect(described_class.all_database_connections.keys).to start_with('main')
+ end
+
+ it 'contains as many entries as YAML files' do
+ expect(described_class.all_database_connections.values.map(&:file_path))
+ .to contain_exactly(*described_class.all_database_connection_files)
+ end
+ end
+
+ describe '.database_base_models' do
+ subject { described_class.database_base_models }
+
+ it 'contains "main"' do
+ is_expected.to include("main" => ActiveRecord::Base)
+ end
+
+ it 'does not contain "ci" when not running CI database' do
+ skip_if_multiple_databases_are_setup(:ci)
+
+ is_expected.not_to include("ci")
+ end
+
+ it 'contains "ci" pointing to Ci::ApplicationRecord when running CI database' do
+ skip_if_multiple_databases_not_setup(:ci)
+
+ is_expected.to include("ci" => Ci::ApplicationRecord)
+ end
+ end
+
+ describe '.all_gitlab_schemas' do
+ it 'contains as many entries as YAML files' do
+ expect(described_class.all_gitlab_schemas.values.map(&:file_path))
+ .to contain_exactly(*described_class.all_gitlab_schema_files)
+ end
+ end
+
+ describe '.schemas_to_base_models' do
+ subject { described_class.schemas_to_base_models }
+
+ it 'contains gitlab_main' do
+ is_expected.to include(gitlab_main: [ActiveRecord::Base])
+ end
+
+ it 'contains gitlab_shared' do
+ is_expected.to include(gitlab_main: include(ActiveRecord::Base))
+ end
+
+ it 'contains gitlab_ci pointing to ActiveRecord::Base when not running CI database' do
+ skip_if_multiple_databases_are_setup(:ci)
+
+ is_expected.to include(gitlab_ci: [ActiveRecord::Base])
+ end
+
+ it 'contains gitlab_ci pointing to Ci::ApplicationRecord when running CI database' do
+ skip_if_multiple_databases_not_setup(:ci)
+
+ is_expected.to include(gitlab_ci: [Ci::ApplicationRecord])
+ end
+ end
+
describe '.default_pool_size' do
before do
allow(Gitlab::Runtime).to receive(:max_threads).and_return(7)
@@ -250,22 +312,35 @@ RSpec.describe Gitlab::Database, feature_category: :database do
end
describe '.db_config_names' do
- let(:expected) { %w[foo bar] }
+ using RSpec::Parameterized::TableSyntax
- it 'includes only main by default' do
- allow(::ActiveRecord::Base).to receive(:configurations).and_return(
- double(configs_for: %w[foo bar].map { |x| double(name: x) })
- )
-
- expect(described_class.db_config_names).to eq(expected)
+ where(:configs_for, :gitlab_schema, :expected_main, :expected_main_ci) do
+ %i[main] | :gitlab_shared | %i[main] | %i[main]
+ %i[main ci] | :gitlab_shared | %i[main] | %i[main ci]
+ %i[main ci] | :gitlab_ci | %i[main] | %i[ci]
end
- it 'excludes geo when that is included' do
- allow(::ActiveRecord::Base).to receive(:configurations).and_return(
- double(configs_for: %w[foo bar geo].map { |x| double(name: x) })
- )
+ with_them do
+ before do
+ hash_configs = configs_for.map do |x|
+ instance_double(ActiveRecord::DatabaseConfigurations::HashConfig, name: x)
+ end
+ allow(::ActiveRecord::Base).to receive(:configurations).and_return(
+ instance_double(ActiveRecord::DatabaseConfigurations, configs_for: hash_configs)
+ )
+ end
- expect(described_class.db_config_names).to eq(expected)
+ if ::Gitlab::Database.has_config?(:ci)
+ it 'when main and CI database are configured' do
+ expect(described_class.db_config_names(with_schema: gitlab_schema))
+ .to eq(expected_main_ci)
+ end
+ else
+ it 'when only main database is configured' do
+ expect(described_class.db_config_names(with_schema: gitlab_schema))
+ .to eq(expected_main)
+ end
+ end
end
end