From 4713e3c3cba2bf875b067727a88f469a426c7eef Mon Sep 17 00:00:00 2001 From: Kostiantyn Kostiuk Date: Wed, 15 Jul 2026 16:33:59 +0300 Subject: [PATCH] Functest: Add support extra_software for Suite level Signed-off-by: Kostiantyn Kostiuk --- lib/engines/functest/functest.rb | 21 +++++++++++++-------- lib/engines/functest/suite.rb | 3 ++- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/lib/engines/functest/functest.rb b/lib/engines/functest/functest.rb index 89dd8460..d422fc77 100644 --- a/lib/engines/functest/functest.rb +++ b/lib/engines/functest/functest.rb @@ -22,6 +22,7 @@ def initialize(project) @project.append_multilog("#{project.engine_tag}.log") @config = load_engine_config @drivers = load_drivers + @tests = init_tests prepare_extra_sw @logger.info('Functest engine initialized') end @@ -59,13 +60,16 @@ def clients_system_info {} end - # rubocop:disable Metrics/AbcSize - def run - @logger.info('Starting functest engine') - + def init_tests loader = Functest::TestLoader.new(@project, @config['test_definitions_path']) tests = load_tests(loader) @logger.info("Total tests to run: #{tests.length}") + tests + end + + # rubocop:disable Metrics/AbcSize + def run + @logger.info('Starting functest engine') ResourceScope.open do |scope| client = @project.setup_manager.run_functest_client(scope, client_name) @@ -74,7 +78,7 @@ def run @executor = Functest::TestExecutor.new(@project, client, default_timeout: @config['default_timeout']) setup_test_context(@executor.context) - summary = @executor.execute_tests(tests) + summary = @executor.execute_tests(@tests) generate_results(summary) summary[:failed].zero? ? 0 : 1 @@ -110,9 +114,9 @@ def load_tests(loader) def test_names_and_static_rejects(loader) test_options = @project.options.test if test_options.category - suite = loader.load_suite(test_options.category) - @logger.info("Loaded test suite: #{suite.name}") - [suite.tests, suite.reject_test_names] + @suite = loader.load_suite(test_options.category) + @logger.info("Loaded test suite: #{@suite.name}") + [@suite.tests, @suite.reject_test_names] elsif test_options.testcase [test_options.testcase.split(',').map(&:strip), []] else @@ -191,6 +195,7 @@ def skip_driver?(driver) def prepare_extra_sw extra_softwares = @drivers.flat_map(&:extra_software) extra_softwares += @project.engine_platform.extra_software + extra_softwares += @suite.requirements.extra_software if @suite @project.extra_sw_manager.prepare_software_packages( extra_softwares, @project.engine_platform.kit, ENGINE_MODE diff --git a/lib/engines/functest/suite.rb b/lib/engines/functest/suite.rb index db4b02dd..ea562530 100644 --- a/lib/engines/functest/suite.rb +++ b/lib/engines/functest/suite.rb @@ -9,6 +9,7 @@ class SuiteRequirements < T::Struct const :drivers, T::Array[String], default: [] const :platforms, T::Array[String], default: [] + const :extra_software, T::Array[String], default: [] end # Sorbet model for a functest suite JSON file @@ -20,7 +21,7 @@ class Suite < T::Struct const :description, T.nilable(String) const :test_system_ref, T.nilable(String) const :tests, T::Array[String] - const :requirements, T.nilable(SuiteRequirements) + const :requirements, SuiteRequirements, factory: -> { SuiteRequirements.new } const :reject_test_names, T::Array[String], default: [] end end