diff options
Diffstat (limited to 'qa/qa/tools/ci/non_empty_suites.rb')
-rw-r--r-- | qa/qa/tools/ci/non_empty_suites.rb | 81 |
1 files changed, 35 insertions, 46 deletions
diff --git a/qa/qa/tools/ci/non_empty_suites.rb b/qa/qa/tools/ci/non_empty_suites.rb index 687c11a3e62..2319237fa25 100644 --- a/qa/qa/tools/ci/non_empty_suites.rb +++ b/qa/qa/tools/ci/non_empty_suites.rb @@ -10,42 +10,11 @@ module QA class NonEmptySuites include Helpers - # rubocop:disable Layout/LineLength - SCENARIOS = [ - { klass: "Test::Instance::All" }, - { klass: "Test::Instance::Smoke" }, - { klass: "Test::Instance::Reliable" }, - { klass: "Test::Instance::ReviewBlocking" }, - { klass: "Test::Instance::ReviewNonBlocking" }, - { klass: "Test::Instance::CloudActivation" }, - { klass: "Test::Instance::Integrations" }, - { klass: "Test::Instance::Jira" }, - { klass: "Test::Instance::LargeSetup" }, - { klass: "Test::Instance::Metrics" }, - { klass: "Test::Instance::ObjectStorage" }, - { klass: "Test::Instance::Packages" }, - { klass: "Test::Instance::RepositoryStorage" }, - { klass: "Test::Integration::ServicePingDisabled" }, - { klass: "Test::Integration::LDAPNoTLS" }, - { klass: "Test::Integration::LDAPTLS" }, - { klass: "Test::Integration::LDAPNoServer" }, - { klass: "Test::Integration::InstanceSAML" }, - { klass: "Test::Integration::RegistryWithCDN" }, - { klass: "Test::Integration::RegistryTLS" }, - { klass: "Test::Integration::Registry" }, - { klass: "Test::Integration::SMTP" }, - { klass: "QA::EE::Scenario::Test::Integration::Elasticsearch" }, - { klass: "QA::EE::Scenario::Test::Integration::GroupSAML" }, - { - klass: "QA::EE::Scenario::Test::Geo", - args: "--primary-address http://dummy1.test --primary-name gitlab-primary --secondary-address http://dummy2.test --secondary-name gitlab-secondary --without-setup" - }, - { - klass: "Test::Integration::Mattermost", - args: "--mattermost-address http://mattermost.test" - } + # @return [Array] scenarios that never run in package-and-test pipeline + IGNORED_SCENARIOS = [ + "QA::EE::Scenario::Test::Geo", + "QA::Scenario::Test::Instance::Airgapped" ].freeze - # rubocop:enable Layout/LineLength def initialize(qa_tests) @qa_tests = qa_tests @@ -56,38 +25,58 @@ module QA # @return [String] def fetch logger.info("Checking for runnable suites") - scenarios = SCENARIOS.each_with_object([]) do |scenario, runnable_scenarios| - logger.info(" fetching runnable specs for '#{scenario[:klass]}'") + scenarios.each_with_object([]) do |scenario, runnable_scenarios| + logger.info(" fetching runnable specs for '#{scenario}'") + next logger.info(" scenario is in ignore list, skipping") if IGNORED_SCENARIOS.include?(scenario) - out, err, status = run_command(**scenario) + out, err, status = run_command(scenario) unless status.success? - logger.error(" example count failed!\n#{err}") + logger.error(" example count failed!\n#{err}") next end count = out.split("\n").last.to_i logger.info(" found #{count} examples to run") - runnable_scenarios << scenario[:klass] if count > 0 - end - - scenarios.join(",") + runnable_scenarios << scenario if count > 0 + end.join(",") end private attr_reader :qa_tests + # Get all defined scenarios + # + # @return [Array<String>] + def scenarios + foss_scenarios = scenario_classes(QA::Scenario::Test) + return foss_scenarios unless QA.const_defined?("QA::EE") + + foss_scenarios + scenario_classes(QA::EE::Scenario::Test) + end + + # Fetch scenario classes recursively + # + # @param [Module] mod + # @return [Array<String>] + def scenario_classes(mod) + mod.constants.map do |const| + c = mod.const_get(const, false) + next c.to_s if c.is_a?(Class) + + scenario_classes(c) + end.flatten + end + # Run scenario count command # # @param [String] klass - # @param [String] args # @return [String] - def run_command(klass:, args: nil) + def run_command(klass) cmd = ["bundle exec bin/qa"] cmd << klass cmd << "--count-examples-only --address http://dummy1.test" - cmd << args if args cmd << "-- #{qa_tests}" unless qa_tests.blank? Open3.capture3(cmd.join(" ")) |