omnibus-gitlab/spec/chef/cookbooks/gitlab-ee/recipes/geo_spec.rb

167 lines
4.8 KiB
Ruby

require 'chef_helper'
RSpec.describe 'gitlab-ee::geo' do
let(:node) { chef_run.node }
before do
allow(Gitlab).to receive(:[]).and_call_original
end
shared_examples 'default services' do
it 'remain enabled', :aggregate_failures do
chef_run
default_services = Services.find_by_group(Services::DEFAULT_GROUP)
omnibus_helper = OmnibusHelper.new(node)
expect(default_services.count).to be > 0
default_services.each do |service|
expect(omnibus_helper.service_enabled?(service.tr('_', '-'))).to be(true), "#{service} was not enabled"
end
end
end
context 'when geo_primary_role enabled' do
cached(:chef_run) do
RSpec::Mocks.with_temporary_scope do
stub_gitlab_rb(geo_primary_role: { enable: true })
end
ChefSpec::SoloRunner.converge('gitlab-ee::default')
end
it_behaves_like 'default services'
context 'in geo_logcursor settings' do
it 'is not enabled' do
expect(node['gitlab']['geo-logcursor']['enable']).to eq(nil)
end
end
context 'in postgres settings' do
let(:config_attrs) { node['postgresql'] }
it 'defines sql_replication_user' do
expect(config_attrs['sql_replication_user']).to eq('gitlab_replicator')
end
it 'defines wal_level' do
expect(config_attrs['wal_level']).to eq('hot_standby')
end
it 'defines wal_log_hints' do
expect(config_attrs['wal_log_hints']).to eq('off')
end
it 'defines max_wal_senders' do
expect(config_attrs['max_wal_senders']).to eq(10)
end
it 'defines wal_keep_segments' do
expect(config_attrs['wal_keep_segments']).to eq(50)
end
it 'defines max_replication_slots' do
expect(config_attrs['max_replication_slots']).to eq(1)
end
it 'defines hot_standby' do
expect(config_attrs['hot_standby']).to eq('on')
end
end
end
context 'geo_secondary_role enabled' do
cached(:chef_run) do
RSpec::Mocks.with_temporary_scope do
stub_gitlab_rb(geo_secondary_role: { enable: true })
end
ChefSpec::SoloRunner.converge('gitlab-ee::default')
end
it_behaves_like 'default services'
context 'in geo_postgres settings' do
it 'is enabled' do
expect(node['gitlab']['geo-postgresql']['enable']).to eq(true)
end
end
context 'in geo_logcursor settings' do
it 'is enabled' do
expect(node['gitlab']['geo-logcursor']['enable']).to eq(true)
end
end
context 'in postgres settings' do
let(:config_attrs) { node['postgresql'] }
it 'defines wal_level' do
expect(config_attrs['wal_level']).to eq('hot_standby')
end
it 'defines wal_log_hints' do
expect(config_attrs['wal_log_hints']).to eq('off')
end
it 'defines max_wal_senders' do
expect(config_attrs['max_wal_senders']).to eq(10)
end
it 'defines wal_keep_segments' do
expect(config_attrs['wal_keep_segments']).to eq(10)
end
it 'defines max_replication_slots' do
expect(config_attrs['max_replication_slots']).to eq(0)
end
it 'defines hot_standby' do
expect(config_attrs['hot_standby']).to eq('on')
end
it 'defines standby settings' do
expect(config_attrs['max_standby_archive_delay']).to eq('60s')
expect(config_attrs['max_standby_streaming_delay']).to eq('60s')
end
end
context 'postgresql 13' do
let(:runtime_conf) { '/var/opt/gitlab/geo-postgresql/data/runtime.conf' }
before do
allow_any_instance_of(GeoPgHelper).to receive(:version).and_return(PGVersion.new('13.0'))
allow_any_instance_of(GeoPgHelper).to receive(:database_version).and_return(PGVersion.new('13.0'))
end
it 'configures wal_keep_size instead of wal_keep_segments' do
expect(chef_run).to render_file(runtime_conf).with_content { |content|
expect(content).to include("wal_keep_size")
expect(content).not_to include("wal_keep_segments")
}
end
end
context 'postgresql 12' do
let(:runtime_conf) { '/var/opt/gitlab/geo-postgresql/data/runtime.conf' }
before do
allow_any_instance_of(GeoPgHelper).to receive(:version).and_return(PGVersion.new('12.0'))
allow_any_instance_of(GeoPgHelper).to receive(:database_version).and_return(PGVersion.new('12.0'))
end
it 'configures wal_keep_segments instead of wal_keep_size' do
expect(chef_run).to render_file(runtime_conf).with_content { |content|
expect(content).to include("wal_keep_segments")
expect(content).to_not include("wal_keep_size")
}
end
end
context 'in gitlab-rails' do
it 'disables auto_migrate' do
expect(node['gitlab']['gitlab-rails']['auto_migrate']).to eq(false)
end
end
end
end