twister: harness: Check Console harness configuration

If Console Harness 'harness_config' properties have no 'regex'
patterns or no correct 'type' set, then ConfigurationError exception
is raised, handled, and the test instance error is accounted
in the summary results.

Signed-off-by: Dmitrii Golovanov <dmitrii.golovanov@intel.com>
This commit is contained in:
Dmitrii Golovanov 2023-10-13 20:42:59 +02:00 committed by Anas Nashif
commit 00d260af96
2 changed files with 27 additions and 2 deletions

View file

@ -13,6 +13,7 @@ import logging
import threading
import time
from twisterlib.error import ConfigurationError
from twisterlib.environment import ZEPHYR_BASE, PYTEST_PLUGIN_INSTALLED
from twisterlib.handlers import Handler, terminate_process, SUPPORTED_SIMS_IN_PYTEST
from twisterlib.testinstance import TestInstance
@ -162,6 +163,14 @@ class Console(Harness):
def configure(self, instance):
super(Console, self).configure(instance)
if self.regex is None or len(self.regex) == 0:
self.state = "failed"
tc = self.instance.set_case_status_by_name(
self.id,
"failed",
f"HARNESS:{self.__class__.__name__}:no regex patterns configured."
)
raise ConfigurationError(self.instance.name, tc.reason)
if self.type == "one_line":
self.pattern = re.compile(self.regex[0])
self.patterns_expected = 1
@ -170,6 +179,15 @@ class Console(Harness):
for r in self.regex:
self.patterns.append(re.compile(r))
self.patterns_expected = len(self.patterns)
else:
self.state = "failed"
tc = self.instance.set_case_status_by_name(
self.id,
"failed",
f"HARNESS:{self.__class__.__name__}:incorrect type={self.type}"
)
raise ConfigurationError(self.instance.name, tc.reason)
#
def handle(self, line):
if self.type == "one_line":

View file

@ -25,7 +25,7 @@ from colorama import Fore
from domains import Domains
from twisterlib.cmakecache import CMakeCache
from twisterlib.environment import canonical_zephyr_base
from twisterlib.error import BuildError
from twisterlib.error import BuildError, ConfigurationError
import elftools
from elftools.elf.elffile import ELFFile
@ -1069,7 +1069,14 @@ class ProjectBuilder(FilterBuilder):
instance.handler.extra_test_args = self.options.extra_test_args
harness = HarnessImporter.get_harness(instance.testsuite.harness.capitalize())
harness.configure(instance)
try:
harness.configure(instance)
except ConfigurationError as error:
instance.status = "error"
instance.reason = str(error)
logger.error(instance.reason)
return
#
if isinstance(harness, Pytest):
harness.pytest_run(instance.handler.get_test_timeout())
else: