spec/gitlab/qa/component/praefect_spec.rb (72 lines of code) (raw):

# frozen_string_literal: true module Gitlab module QA describe Component::Praefect do subject(:praefect_component) { described_class.new } let(:full_ce_address) { 'registry.gitlab.com/foo/gitlab/gitlab-ce' } let(:full_ce_address_with_complex_tag) { "#{full_ce_address}:omnibus-7263a2" } describe '#release' do context 'with no release' do it 'defaults to CE' do expect(praefect_component.release.to_s).to eq 'gitlab/gitlab-ce:nightly' end end end describe '#release=' do before do praefect_component.release = release end context 'when release is a Release object' do let(:release) { Release.new('EE') } it 'returns a correct release' do expect(praefect_component.release.to_s).to eq 'gitlab/gitlab-ee:nightly' end end context 'when release is a string' do context 'with a simple tag' do let(:release) { full_ce_address_with_complex_tag } it 'returns a correct release' do expect(praefect_component.release.to_s).to eq full_ce_address_with_complex_tag end end end end describe '#name' do before do praefect_component.release = Release.new('CE') end it 'returns a unique name' do expect(praefect_component.name).to match(/\Apraefect-(\w+){8}\z/) end end describe '#reconfigure' do let(:docker) { spy('docker') } before do stub_const('Gitlab::QA::Support::ShellCommand', docker) praefect_component.name = "praefect-#{SecureRandom.hex(4)}" end it 'configures omnibus by writing gitlab.rb' do praefect_component.reconfigure config = praefect_component.praefect_omnibus_configuration expect(docker).to have_received(:new).with( eq("docker exec #{praefect_component.name} bash -c \"echo \\\"#{config}\\\" > /etc/gitlab/gitlab.rb;\""), anything ) end end describe '#wait_until_ready' do let(:docker) { spy('docker') } before do stub_const('Gitlab::QA::Support::ShellCommand', docker) praefect_component.name = "praefect-#{SecureRandom.hex(4)}" end it 'waits until praefect is ready' do praefect_component.wait_until_ready ready_check_cmd = "praefect -config /var/opt/gitlab/praefect/cluster_config.toml check || true" expect(docker).to have_received(:new).with( eq("docker exec #{praefect_component.name} bash -c \"#{ready_check_cmd}\""), anything ) end end end end end