spec/gitlab/qa/runner_spec.rb (111 lines of code) (raw):

# frozen_string_literal: true describe Gitlab::QA::Runner do let(:image) { Gitlab::QA::Scenario::Test::Instance::Image } let(:scenario_arg) { ['Test::Instance::Image'] } before do allow(image).to receive(:perform) end describe '.run' do shared_examples 'passes args to scenario' do it 'accepts defined options' do described_class.run(scenario_arg + passed_args) expect(image).to have_received(:perform).with(*passed_args) end end context 'when passing gitlab-qa and rspec args' do it_behaves_like 'passes args to scenario' do let(:passed_args) { %w[CE -- --tag smoke] } end end context 'when enabling a feature flag' do it_behaves_like 'passes args to scenario' do let(:passed_args) { %w[CE --enable-feature gitaly_enforce_requests_limits] } end end context 'when enabling a feature flag with scenarios with no release specified' do it_behaves_like 'passes args to scenario' do let(:passed_args) { %w[--enable-feature gitaly_enforce_requests_limits] } end end context 'when specifying an address' do it_behaves_like 'passes args to scenario' do let(:passed_args) { %w[CE --address http://testurl] } end end context 'when specifying a mattermost server address' do it_behaves_like 'passes args to scenario' do let(:passed_args) { %w[CE --mattermost-address http://mattermost-server] } end end it 'ignores unsupported options' do passed_args = %w[CE --foo] expect { described_class.run(scenario_arg + passed_args) }.not_to raise_error end it 'does not pass options to the tests if they are only for GitLab QA' do described_class.run(scenario_arg + %w[EE --no-teardown --no-tests --seed-db file1,file2 --no-admin-token]) expect(image).to have_received(:perform).with('EE') end it 'includes the Default Omnibus configuration' do described_class.run(scenario_arg + %w[EE]) expect(Gitlab::QA::Runtime::Scenario.omnibus_configuration.to_s) .to include(Gitlab::QA::Runtime::OmnibusConfigurations::Default.configuration.strip) end it 'disables seed_db option by default' do described_class.run(scenario_arg + %w[EE]) expect(Gitlab::QA::Runtime::Scenario.seed_db).to be false end context 'with omnibus configurations specified' do let(:passed_args) { %w[EE --omnibus-config default] } let(:default) { 'Gitlab::QA::Runtime::OmnibusConfigurations::Default' } let(:config) { Gitlab::QA::Runtime::Scenario.omnibus_configuration.to_s.split("\n") } before do described_class.run(scenario_arg + passed_args) end it 'has a comment showing that GitLab QA is configuring Omnibus' do expect(config.first).to include('GitLab QA') end it 'adds a comment indicating which configuration is being loaded' do expect(config).to include("# #{default}") end it 'loads the default configuration' do # remove first two comment lines expect(config[2..]).to eq(Gitlab::QA::Runtime::OmnibusConfigurations::Default.new.configuration.split("\n")) end context 'with exec commands' do let(:passed_args) { %w[EE --omnibus-config default,decomposition_multiple_db] } it 'adds an item to the list of omnibus gitlab exec commands to execute' do expect( Gitlab::QA::Runtime::Scenario.omnibus_exec_commands.flatten).to include(/gitlab-rake db:schema:load:ci/ ) end end end context 'with --seed-db option' do let(:options) { Gitlab::QA::Runtime::Scenario.seed_db } before do described_class.run(scenario_arg + passed_args) end context 'with specified seed scripts' do let(:passed_args) { %w[EE --seed-db file1,file2*.rb] } it 'returns correct file search patterns' do expect(options).to eq ['file1', 'file2*.rb'] end end end end describe '.remove_gitlab_qa_args' do before do described_class.run(scenario_arg + passed_args) end context 'when specifying options with no arguments' do let(:passed_args) { %w[EE --no-teardown] } it 'removes options that accept no arguments' do expect(described_class.remove_gitlab_qa_args(passed_args)).to eq(%w[EE]) end end context 'when specifying options with arguments' do let(:passed_args) { %w[EE --omnibus-config default --] } it 'removes options that accept arguments' do expect(described_class.remove_gitlab_qa_args(passed_args)).to eq(%w[EE --]) end end end end