mirror of
https://gitlab.com/gitlab-org/gitlab-foss.git
synced 2025-08-13 13:31:19 +00:00
104 lines
4.2 KiB
Ruby
104 lines
4.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe Gitlab::ConfigChecker::ExternalDatabaseChecker do
|
|
describe '#check' do
|
|
subject { described_class.check }
|
|
|
|
let(:old_database_version) { 8 }
|
|
let(:old_database) { instance_double(Gitlab::Database::Reflection) }
|
|
let(:new_database) { instance_double(Gitlab::Database::Reflection) }
|
|
|
|
before do
|
|
allow(Gitlab::Database::Reflection).to receive(:new).and_return(new_database)
|
|
allow(old_database).to receive(:postgresql_minimum_supported_version?).and_return(false)
|
|
allow(old_database).to receive(:version).and_return(old_database_version)
|
|
allow(new_database).to receive(:postgresql_minimum_supported_version?).and_return(true)
|
|
end
|
|
|
|
context 'with a single database' do
|
|
before do
|
|
skip_if_multiple_databases_are_setup
|
|
end
|
|
|
|
context 'when database meets minimum supported version' do
|
|
before do
|
|
allow(Gitlab::Database::Reflection).to receive(:new).with(ActiveRecord::Base).and_return(new_database)
|
|
end
|
|
|
|
it { is_expected.to be_empty }
|
|
end
|
|
|
|
context 'when database does not meet minimum supported version' do
|
|
before do
|
|
allow(Gitlab::Database::Reflection).to receive(:new).with(ActiveRecord::Base).and_return(old_database)
|
|
end
|
|
|
|
it 'reports deprecated database notice' do
|
|
is_expected.to contain_exactly(notice_deprecated_database('main', old_database_version))
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'with a multiple database' do
|
|
before do
|
|
skip_if_multiple_databases_not_setup(:ci)
|
|
end
|
|
|
|
context 'when both databases meets minimum supported version' do
|
|
before do
|
|
allow(Gitlab::Database::Reflection).to receive(:new).with(ActiveRecord::Base).and_return(new_database)
|
|
allow(Gitlab::Database::Reflection).to receive(:new).with(Ci::ApplicationRecord).and_return(new_database)
|
|
end
|
|
|
|
it { is_expected.to be_empty }
|
|
end
|
|
|
|
context 'when the one of the databases does not meet minimum supported version' do
|
|
it 'reports deprecated database notice if the main database is using an old version' do
|
|
allow(Gitlab::Database::Reflection).to receive(:new).with(ActiveRecord::Base).and_return(old_database)
|
|
allow(Gitlab::Database::Reflection).to receive(:new).with(Ci::ApplicationRecord).and_return(new_database)
|
|
is_expected.to contain_exactly(notice_deprecated_database('main', old_database_version))
|
|
end
|
|
|
|
it 'reports deprecated database notice if the ci database is using an old version' do
|
|
allow(Gitlab::Database::Reflection).to receive(:new).with(ActiveRecord::Base).and_return(new_database)
|
|
allow(Gitlab::Database::Reflection).to receive(:new).with(Ci::ApplicationRecord).and_return(old_database)
|
|
is_expected.to contain_exactly(notice_deprecated_database('ci', old_database_version))
|
|
end
|
|
end
|
|
|
|
context 'when both databases do not meet minimum supported version' do
|
|
before do
|
|
allow(Gitlab::Database::Reflection).to receive(:new).with(ActiveRecord::Base).and_return(old_database)
|
|
allow(Gitlab::Database::Reflection).to receive(:new).with(Ci::ApplicationRecord).and_return(old_database)
|
|
end
|
|
|
|
it 'reports deprecated database notice' do
|
|
is_expected.to match_array [
|
|
notice_deprecated_database('main', old_database_version),
|
|
notice_deprecated_database('ci', old_database_version)
|
|
]
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def notice_deprecated_database(database_name, database_version)
|
|
{
|
|
type: 'warning',
|
|
message: _('Database \'%{database_name}\' is using PostgreSQL %{pg_version_current}, ' \
|
|
'but this version of GitLab requires PostgreSQL %{pg_version_minimum}. ' \
|
|
'Please upgrade your environment to a supported PostgreSQL version. ' \
|
|
'See %{pg_requirements_url} for details.') % \
|
|
{
|
|
database_name: database_name,
|
|
pg_version_current: database_version,
|
|
pg_version_minimum: Gitlab::Database::MINIMUM_POSTGRES_VERSION,
|
|
pg_requirements_url: Gitlab::ConfigChecker::ExternalDatabaseChecker::PG_REQUIREMENTS_LINK
|
|
}
|
|
}
|
|
end
|
|
end
|