diff --git a/scripts/pylib/twister/twister/hardwaremap.py b/scripts/pylib/twister/twister/hardwaremap.py index 236bd3e6eea..3b43010b186 100644 --- a/scripts/pylib/twister/twister/hardwaremap.py +++ b/scripts/pylib/twister/twister/hardwaremap.py @@ -13,7 +13,6 @@ import yaml import scl import logging from pathlib import Path -import expr_parser from twister.enviornment import ZEPHYR_BASE @@ -139,9 +138,23 @@ class HardwareMap: ] } - def __init__(self): + def __init__(self, env=None): self.detected = [] self.duts = [] + self.options = env.options + + def discover(self): + if self.options.generate_hardware_map: + self.scan(persistent=self.options.persistent_hardware_map) + self.save(self.options.generate_hardware_map) + return 0 + if not self.options.device_testing and self.options.hardware_map: + self.load(self.options.hardware_map) + logger.info("Available devices:") + table = [] + self.dump(connected_only=True) + return 0 + return 1 def add_device(self, serial, platform, pre_script, is_pty, baud=None): device = DUT(platform=platform, connected=True, pre_script=pre_script, serial_baud=baud) diff --git a/scripts/pylib/twister/twister/runner.py b/scripts/pylib/twister/twister/runner.py index 4b8ce08f012..5945329567a 100644 --- a/scripts/pylib/twister/twister/runner.py +++ b/scripts/pylib/twister/twister/runner.py @@ -389,10 +389,6 @@ class ProjectBuilder(FilterBuilder): self.env = env self.duts = None - self.extra_args = kwargs.get('extra_args', []) - self.verbose = kwargs.get('verbose', None) - self.suite_name_check = kwargs.get('suite_name_check', True) - self.seed = kwargs.get('seed', 0) if self.options.ninja: self.generator_cmd = "ninja" self.generator = "Ninja" @@ -597,7 +593,7 @@ class ProjectBuilder(FilterBuilder): results.error += 1 else: results.failed += 1 - if self.verbose: + if self.options.verbose: status = Fore.RED + "FAILED " + Fore.RESET + instance.reason else: print("") @@ -608,7 +604,7 @@ class ProjectBuilder(FilterBuilder): Fore.RED, Fore.RESET, instance.reason)) - if not self.verbose: + if not self.options.verbose: self.log_info_file(self.options.inline_logs) elif instance.status in ["skipped", "filtered"]: status = Fore.YELLOW + "SKIPPED" + Fore.RESET @@ -624,8 +620,8 @@ class ProjectBuilder(FilterBuilder): logger.debug(f"Unknown status = {instance.status}") status = Fore.YELLOW + "UNKNOWN" + Fore.RESET - if self.verbose: - if self.cmake_only: + if self.options.verbose: + if self.options.cmake_only: more_info = "cmake" elif instance.status in ["skipped", "filtered"]: more_info = instance.reason @@ -641,7 +637,7 @@ class ProjectBuilder(FilterBuilder): if ( instance.status in ["error", "failed", "timeout", "flash_error"] and hasattr(self.instance.handler, 'seed') and self.instance.handler.seed is not None ): - more_info += "/seed: " + str(self.seed) + more_info += "/seed: " + str(self.options.seed) logger.info("{:>{}}/{} {:<25} {:<50} {} ({})".format( results.done + results.skipped_filter, total_tests_width, total_to_do , instance.platform.name, @@ -674,7 +670,7 @@ class ProjectBuilder(FilterBuilder): instance = self.instance args = self.testsuite.extra_args[:] - args += self.extra_args + args += self.options.extra_args if instance.handler: args += instance.handler.args @@ -719,11 +715,11 @@ class ProjectBuilder(FilterBuilder): if instance.handler.type_str == "device": instance.handler.duts = self.duts - if(self.seed is not None and instance.platform.name.startswith("native_posix")): + if(self.options.seed is not None and instance.platform.name.startswith("native_posix")): self.parse_generated() if('CONFIG_FAKE_ENTROPY_NATIVE_POSIX' in self.defconfig and self.defconfig['CONFIG_FAKE_ENTROPY_NATIVE_POSIX'] == 'y'): - instance.handler.seed = self.seed + instance.handler.seed = self.options.seed instance.handler.handle() diff --git a/scripts/pylib/twister/twister/testplan.py b/scripts/pylib/twister/twister/testplan.py index 37b88b53865..efb68ec9009 100755 --- a/scripts/pylib/twister/twister/testplan.py +++ b/scripts/pylib/twister/twister/testplan.py @@ -223,6 +223,9 @@ class TestPlan: self.find_subtests() self.add_configurations() + if self.load_errors: + raise TwisterRuntimeError("Errors while loading configurations") + # handle quarantine ql = self.options.quarantine_list if ql: @@ -238,6 +241,11 @@ class TestPlan: if self.options.subset: subset, sets = self.options.subset.split("/") subset = int(subset) + if int(subset) > 0 and int(sets) >= int(subset): + logger.info("Running only a subset: %s/%s" % (subset, sets)) + else: + logger.error("You have provided a wrong subset value: %s." % self.options.subset) + return self.generate_subset(subset, sets) def load(self): diff --git a/scripts/twister b/scripts/twister index 4761827440f..68878bd4d4e 100755 --- a/scripts/twister +++ b/scripts/twister @@ -894,32 +894,17 @@ def main(): size_report(SizeCalculator(fn, [])) return - hwm = HardwareMap() - if options.generate_hardware_map: - hwm.scan(persistent=options.persistent_hardware_map) - hwm.save(options.generate_hardware_map) - return - - if not options.device_testing and options.hardware_map: - hwm.load(options.hardware_map) - logger.info("Available devices:") - table = [] - hwm.dump(connected_only=True) - return - - if options.subset: - subset, sets = options.subset.split("/") - if int(subset) > 0 and int(sets) >= int(subset): - logger.info("Running only a subset: %s/%s" % (subset, sets)) - else: - logger.error("You have provided a wrong subset value: %s." % options.subset) - return env = TwisterEnv(options) - env.hwm = hwm env.discover() - tplan = TestPlan(options.board_root, options.testsuite_root, hwm, env, options.outdir) + hwm = HardwareMap(env) + env.hwm = hwm + ret = hwm.discover() + if ret == 0: + return + + tplan = TestPlan(options.board_root, options.testsuite_root, env, options.outdir) try: tplan.discover() except RuntimeError as e: @@ -960,13 +945,9 @@ def main(): for d in tplan.hwm.duts: d.fixtures.extend(options.fixture) - if tplan.load_errors: - sys.exit(1) - if tplan.report() == 0: return - tplan.load() if options.list_tests and options.platform: @@ -1016,6 +997,7 @@ def main(): tplan.create_build_dir_links() runner = TwisterRunner(tplan.instances, tplan.testsuites, env) + runner.duts = hwm.duts runner.run() # figure out which report to use for size comparison