twister: Skip scanning non-ztest tests in Twister
Twister scans C-files to find testcases that are implemented using ZTest framework. Also runs scanning of Elf files after building. Skip scanning files if it is not required. Signed-off-by: Grzegorz Chwierut <grzegorz.chwierut@nordicsemi.no>
This commit is contained in:
parent
f3a6454f93
commit
663786d0a4
4 changed files with 29 additions and 17 deletions
|
|
@ -660,15 +660,18 @@ class ProjectBuilder(FilterBuilder):
|
||||||
self.instance.add_missing_case_status("blocked", self.instance.reason)
|
self.instance.add_missing_case_status("blocked", self.instance.reason)
|
||||||
pipeline.put({"op": "report", "test": self.instance})
|
pipeline.put({"op": "report", "test": self.instance})
|
||||||
else:
|
else:
|
||||||
logger.debug(f"Determine test cases for test instance: {self.instance.name}")
|
if self.instance.testsuite.harness in ['ztest', 'test']:
|
||||||
try:
|
logger.debug(f"Determine test cases for test instance: {self.instance.name}")
|
||||||
self.determine_testcases(results)
|
try:
|
||||||
|
self.determine_testcases(results)
|
||||||
|
pipeline.put({"op": "gather_metrics", "test": self.instance})
|
||||||
|
except BuildError as e:
|
||||||
|
logger.error(str(e))
|
||||||
|
self.instance.status = "error"
|
||||||
|
self.instance.reason = str(e)
|
||||||
|
pipeline.put({"op": "report", "test": self.instance})
|
||||||
|
else:
|
||||||
pipeline.put({"op": "gather_metrics", "test": self.instance})
|
pipeline.put({"op": "gather_metrics", "test": self.instance})
|
||||||
except BuildError as e:
|
|
||||||
logger.error(str(e))
|
|
||||||
self.instance.status = "error"
|
|
||||||
self.instance.reason = str(e)
|
|
||||||
pipeline.put({"op": "report", "test": self.instance})
|
|
||||||
|
|
||||||
elif op == "gather_metrics":
|
elif op == "gather_metrics":
|
||||||
ret = self.gather_metrics(self.instance)
|
ret = self.gather_metrics(self.instance)
|
||||||
|
|
|
||||||
|
|
@ -542,12 +542,19 @@ class TestPlan:
|
||||||
try:
|
try:
|
||||||
parsed_data = TwisterConfigParser(suite_yaml_path, self.suite_schema)
|
parsed_data = TwisterConfigParser(suite_yaml_path, self.suite_schema)
|
||||||
parsed_data.load()
|
parsed_data.load()
|
||||||
subcases, ztest_suite_names = scan_testsuite_path(suite_path)
|
subcases = None
|
||||||
|
ztest_suite_names = None
|
||||||
|
|
||||||
for name in parsed_data.scenarios.keys():
|
for name in parsed_data.scenarios.keys():
|
||||||
suite_dict = parsed_data.get_scenario(name)
|
suite_dict = parsed_data.get_scenario(name)
|
||||||
suite = TestSuite(root, suite_path, name, data=suite_dict, detailed_test_id=self.options.detailed_test_id)
|
suite = TestSuite(root, suite_path, name, data=suite_dict, detailed_test_id=self.options.detailed_test_id)
|
||||||
suite.add_subcases(suite_dict, subcases, ztest_suite_names)
|
if suite.harness in ['ztest', 'test']:
|
||||||
|
if subcases is None:
|
||||||
|
# scan it only once per testsuite
|
||||||
|
subcases, ztest_suite_names = scan_testsuite_path(suite_path)
|
||||||
|
suite.add_subcases(suite_dict, subcases, ztest_suite_names)
|
||||||
|
else:
|
||||||
|
suite.add_subcases(suite_dict)
|
||||||
if testsuite_filter:
|
if testsuite_filter:
|
||||||
scenario = os.path.basename(suite.name)
|
scenario = os.path.basename(suite.name)
|
||||||
if suite.name and (suite.name in testsuite_filter or scenario in testsuite_filter):
|
if suite.name and (suite.name in testsuite_filter or scenario in testsuite_filter):
|
||||||
|
|
|
||||||
|
|
@ -423,21 +423,22 @@ class TestSuite(DisablePyTestCollectionMixin):
|
||||||
if self.harness == 'console' and not self.harness_config:
|
if self.harness == 'console' and not self.harness_config:
|
||||||
raise Exception('Harness config error: console harness defined without a configuration.')
|
raise Exception('Harness config error: console harness defined without a configuration.')
|
||||||
|
|
||||||
def add_subcases(self, data, parsed_subcases, suite_names):
|
def add_subcases(self, data, parsed_subcases=None, suite_names=None):
|
||||||
testcases = data.get("testcases", [])
|
testcases = data.get("testcases", [])
|
||||||
if testcases:
|
if testcases:
|
||||||
for tc in testcases:
|
for tc in testcases:
|
||||||
self.add_testcase(name=f"{self.id}.{tc}")
|
self.add_testcase(name=f"{self.id}.{tc}")
|
||||||
else:
|
else:
|
||||||
# only add each testcase once
|
|
||||||
for sub in set(parsed_subcases):
|
|
||||||
name = "{}.{}".format(self.id, sub)
|
|
||||||
self.add_testcase(name)
|
|
||||||
|
|
||||||
if not parsed_subcases:
|
if not parsed_subcases:
|
||||||
self.add_testcase(self.id, freeform=True)
|
self.add_testcase(self.id, freeform=True)
|
||||||
|
else:
|
||||||
|
# only add each testcase once
|
||||||
|
for sub in set(parsed_subcases):
|
||||||
|
name = "{}.{}".format(self.id, sub)
|
||||||
|
self.add_testcase(name)
|
||||||
|
|
||||||
self.ztest_suite_names = suite_names
|
if suite_names:
|
||||||
|
self.ztest_suite_names = suite_names
|
||||||
|
|
||||||
def add_testcase(self, name, freeform=False):
|
def add_testcase(self, name, freeform=False):
|
||||||
tc = TestCase(name=name, testsuite=self)
|
tc = TestCase(name=name, testsuite=self)
|
||||||
|
|
|
||||||
|
|
@ -1504,6 +1504,7 @@ def test_projectbuilder_process(
|
||||||
instance_mock.run = instance_run
|
instance_mock.run = instance_run
|
||||||
instance_mock.handler = mock.Mock()
|
instance_mock.handler = mock.Mock()
|
||||||
instance_mock.handler.ready = instance_handler_ready
|
instance_mock.handler.ready = instance_handler_ready
|
||||||
|
instance_mock.testsuite.harness = 'test'
|
||||||
env_mock = mock.Mock()
|
env_mock = mock.Mock()
|
||||||
|
|
||||||
pb = ProjectBuilder(instance_mock, env_mock, mocked_jobserver)
|
pb = ProjectBuilder(instance_mock, env_mock, mocked_jobserver)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue