spec/chef/gitlab-ctl-commands/lib/postgresql/replication_spec.rb (74 lines of code) (raw):

require 'spec_helper' $LOAD_PATH << File.join(__dir__, '../../../../files/gitlab-ctl-commands/lib') require 'postgresql/replication' RSpec.describe PostgreSQL::Replication do let(:ctl) { spy('gitlab ctl') } let(:util) { spy('gitlab ctl util', error?: false) } let(:attributes) { spy('node attributes spy') } subject { described_class.new(ctl) } before do stub_const('GitlabCtl::Util', util) allow(util).to receive(:get_node_attributes) .and_return(attributes) end it 'asks for the password' do expect(subject).to receive(:ask_password).and_return('pass').once subject.set_password! end it 'sets a password' do allow(subject).to receive(:ask_password).and_return('mypass') subject.set_password! expect(util).to have_received(:run_command) .with(%r{WITH ENCRYPTED PASSWORD 'mypass'}) end context 'when postgresql is enabled and patroni disabled' do before do allow(ctl).to receive(:service_enabled?).with('postgresql').and_return(true) allow(ctl).to receive(:service_enabled?).with('patroni').and_return(false) end it 'sets a password for user defined in `sql_replication_user` attribute' do allow(subject).to receive(:ask_password).and_return('mypass') allow(attributes).to receive(:to_s).and_return('myuser') subject.set_password! expect(util).to have_received(:run_command) .with(%r{ALTER USER myuser WITH ENCRYPTED PASSWORD 'mypass'}) end end it 'raises an error if replication user is not configured' do allow(subject).to receive(:ask_password).and_return('mypass') allow(attributes).to receive(:dig).and_return(nil) expect { subject.set_password! }.to raise_error(ArgumentError) end context 'when postgresql is disabled and patroni enabled' do before do allow(ctl).to receive(:service_enabled?).with('postgresql').and_return(false) allow(ctl).to receive(:service_enabled?).with('patroni').and_return(true) end it 'sets a password for user defined in `sql_replication_user` attribute' do allow(subject).to receive(:ask_password).and_return('mypass') allow(attributes).to receive(:to_s).and_return('myuser') subject.set_password! expect(util).to have_received(:run_command) .with(%r{ALTER USER myuser WITH ENCRYPTED PASSWORD 'mypass'}) end end context 'when postgresql and patroni services are disabled' do around do |example| example.run rescue SystemExit end before do allow(ctl).to receive(:service_enabled?).with('postgresql').and_return(false) allow(ctl).to receive(:service_enabled?).with('patroni').and_return(false) end it 'prints an error message' do expect { subject.set_password! }.to output( /There is no PostgreSQL instance enabled in Omnibus/).to_stdout end it 'exits with 1' do expect { subject.set_password! }.to raise_error(SystemExit) do |error| expect(error.status).to eq(1) end end end end