spec/chef/cookbooks/pgbouncer/libraries/pgbouncer_helper_spec.rb (144 lines of code) (raw):
require 'chef_helper'
RSpec.describe PgbouncerHelper do
let(:chef_run) { converge_config(is_ee: true) }
subject { described_class.new(chef_run.node) }
before do
allow(Gitlab).to receive(:[]).and_call_original
end
describe '#running?' do
cached(:chef_run) { converge_config(is_ee: true) }
it 'returns true when pgbouncer is running' do
stub_service_success_status('pgbouncer', true)
expect(subject.running?).to be_truthy
end
it 'returns false when pgbouncer is not running' do
stub_service_success_status('pgbouncer', false)
expect(subject.running?).to be_falsey
end
end
describe '#pg_auth_type_prefix' do
using RSpec::Parameterized::TableSyntax
where(:type, :prefix) do
'md5' | 'md5'
'scram-sha-256' | 'SCRAM-SHA-256$'
'MD5' | 'md5'
'SCRAM-SHA-256' | 'SCRAM-SHA-256$'
'plain' | nil
'ScRaM-ShA-256' | 'SCRAM-SHA-256$'
end
with_them do
it 'responds to default values' do
expect(subject.pg_auth_type_prefix(type)).to eq(prefix)
end
end
end
describe '#pgbouncer_admin_config' do
context 'by default' do
it 'by default' do
expect(subject.pgbouncer_admin_config).to eq('user=pgbouncer dbname=pgbouncer sslmode=disable port=6432 host=/var/opt/gitlab/pgbouncer')
end
end
context 'with custom sttings' do
before do
stub_gitlab_rb(
postgresql: {
pgbouncer_user: 'tester',
},
pgbouncer: {
listen_port: 1234,
data_directory: '/tmp'
}
)
end
it 'uses custom settings' do
expect(subject.pgbouncer_admin_config).to eq('user=tester dbname=pgbouncer sslmode=disable port=1234 host=/tmp')
end
end
end
describe '#pg_auth_users' do
context 'by default' do
it 'by default' do
expect(subject.pg_auth_users).to be_empty
end
end
context 'with users' do
before do
stub_gitlab_rb(
pgbouncer: {
users: {
fakeuser: {
password: 'fakepassword'
}
}
}
)
end
it 'returns a hash' do
expect(subject.pg_auth_users).to eq 'fakeuser' => { 'password' => 'fakepassword' }
end
end
context 'with databases' do
before do
stub_gitlab_rb(
pgbouncer: {
databases: {
fakedb: {
user: 'fakeuser',
password: 'fakepassword'
}
}
}
)
end
it 'returns a hash' do
expect(subject.pg_auth_users).to eq 'fakeuser' => { 'password' => 'fakepassword' }
end
end
context 'with both' do
before do
stub_gitlab_rb(
pgbouncer: {
databases: {
fakedb: {
user: 'fakedbuser',
password: 'fakepassword'
}
},
users: {
fakeusersuser: {
password: 'fakepassword'
}
}
}
)
end
it 'should merge both' do
expected = {
'fakeusersuser' => { 'password' => 'fakepassword' }, 'fakedbuser' => { 'password' => 'fakepassword' }
}
expect(subject.pg_auth_users).to eq expected
end
end
context 'with multiple databases' do
before do
stub_gitlab_rb(
pgbouncer: {
databases: {
fakedb_one: {
user: 'fakeuser',
password: 'fakepassword'
},
fakedb_two: {
user: 'fakeuser',
password: 'fakepassword'
}
}
}
)
end
it 'should only have one entry' do
expect(subject.pg_auth_users).to eq 'fakeuser' => { 'password' => 'fakepassword' }
end
end
end
end