summaryrefslogtreecommitdiff
path: root/qa/qa/tools/ci/non_empty_suites.rb
diff options
context:
space:
mode:
Diffstat (limited to 'qa/qa/tools/ci/non_empty_suites.rb')
-rw-r--r--qa/qa/tools/ci/non_empty_suites.rb81
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(" "))