Skip to content

Commit 05c167e

Browse files
golowanowkartben
authored andcommitted
twister: ztest: Optimize logging and comment special cases
Add more comments and optimize logging on Ztest tracing. Signed-off-by: Dmitrii Golovanov <[email protected]>
1 parent c99a61a commit 05c167e

File tree

3 files changed

+46
-32
lines changed

3 files changed

+46
-32
lines changed

scripts/pylib/twister/twisterlib/harness.py

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -757,12 +757,14 @@ def get_testcase(self, tc_name, phase, ts_name=None):
757757
"""
758758
ts_names = self.started_suites.keys()
759759
if ts_name:
760-
if ts_name not in self.instance.testsuite.ztest_suite_names:
761-
logger.warning(f"On {phase}: unexpected Ztest suite '{ts_name}' "
762-
f"not present among: {self.instance.testsuite.ztest_suite_names}")
760+
if self.trace and ts_name not in self.instance.testsuite.ztest_suite_names:
761+
# This can happen if a ZTEST_SUITE name is macro-generated
762+
# in the test source files, e.g. based on DT information.
763+
logger.debug(f"{phase}: unexpected Ztest suite '{ts_name}' is "
764+
f"not present among: {self.instance.testsuite.ztest_suite_names}")
763765
if ts_name not in self.detected_suite_names:
764766
if self.trace:
765-
logger.debug(f"On {phase}: detected new Ztest suite '{ts_name}'")
767+
logger.debug(f"{phase}: detected new Ztest suite '{ts_name}'")
766768
self.detected_suite_names.append(ts_name)
767769
ts_names = [ ts_name ] if ts_name in ts_names else []
768770

@@ -773,68 +775,74 @@ def get_testcase(self, tc_name, phase, ts_name=None):
773775
tc_fq_id = self.instance.compose_case_name(f"{ts_name_}.{tc_name}")
774776
if tc := self.instance.get_case_by_name(tc_fq_id):
775777
if self.trace:
776-
logger.debug(f"On {phase}: Ztest case '{tc_name}' matched to '{tc_fq_id}")
778+
logger.debug(f"{phase}: Ztest case '{tc_name}' matched to '{tc_fq_id}")
777779
return tc
778780
logger.debug(
779-
f"On {phase}: Ztest case '{tc_name}' is not known"
781+
f"{phase}: Ztest case '{tc_name}' is not known"
780782
f" in {self.started_suites} running suite(s)."
781783
)
782784
tc_id = self.instance.compose_case_name(tc_name)
783785
return self.instance.get_case_or_create(tc_id)
784786

785-
def start_suite(self, suite_name):
787+
def start_suite(self, suite_name, phase='TS_START'):
786788
if suite_name not in self.detected_suite_names:
787789
self.detected_suite_names.append(suite_name)
788-
if suite_name not in self.instance.testsuite.ztest_suite_names:
789-
logger.warning(f"Unexpected Ztest suite '{suite_name}'")
790+
if self.trace and suite_name not in self.instance.testsuite.ztest_suite_names:
791+
# This can happen if a ZTEST_SUITE name is macro-generated
792+
# in the test source files, e.g. based on DT information.
793+
logger.debug(f"{phase}: unexpected Ztest suite '{suite_name}' is "
794+
f"not present among: {self.instance.testsuite.ztest_suite_names}")
790795
if suite_name in self.started_suites:
791796
if self.started_suites[suite_name]['count'] > 0:
792-
logger.warning(f"Already STARTED '{suite_name}':{self.started_suites[suite_name]}")
797+
# Either the suite restarts itself or unexpected state transition.
798+
logger.warning(f"{phase}: already STARTED '{suite_name}':"
799+
f"{self.started_suites[suite_name]}")
793800
elif self.trace:
794-
logger.debug(f"START suite '{suite_name}'")
801+
logger.debug(f"{phase}: START suite '{suite_name}'")
795802
self.started_suites[suite_name]['count'] += 1
796803
self.started_suites[suite_name]['repeat'] += 1
797804
else:
798805
self.started_suites[suite_name] = { 'count': 1, 'repeat': 0 }
799806

800-
def end_suite(self, suite_name, phase='', suite_status=None):
807+
def end_suite(self, suite_name, phase='TS_END', suite_status=None):
801808
if suite_name in self.started_suites:
802809
if phase == 'TS_SUM' and self.started_suites[suite_name]['count'] == 0:
803810
return
804811
if self.started_suites[suite_name]['count'] < 1:
805812
logger.error(
806-
f"Already ENDED {phase} suite '{suite_name}':{self.started_suites[suite_name]}"
813+
f"{phase}: already ENDED suite '{suite_name}':{self.started_suites[suite_name]}"
807814
)
808815
elif self.trace:
809-
logger.debug(f"END {phase} suite '{suite_name}':{self.started_suites[suite_name]}")
816+
logger.debug(f"{phase}: END suite '{suite_name}':{self.started_suites[suite_name]}")
810817
self.started_suites[suite_name]['count'] -= 1
811818
elif suite_status == 'SKIP':
812-
self.start_suite(suite_name) # register skipped suites at their summary end
819+
self.start_suite(suite_name, phase) # register skipped suites at their summary end
813820
self.started_suites[suite_name]['count'] -= 1
814821
else:
815-
logger.warning(f"END {phase} suite '{suite_name}' without START detected")
822+
logger.warning(f"{phase}: END suite '{suite_name}' without START detected")
816823

817-
def start_case(self, tc_name):
824+
def start_case(self, tc_name, phase='TC_START'):
818825
if tc_name in self.started_cases:
819826
if self.started_cases[tc_name]['count'] > 0:
820-
logger.warning(f"Already STARTED '{tc_name}':{self.started_cases[tc_name]}")
827+
logger.warning(f"{phase}: already STARTED case "
828+
f"'{tc_name}':{self.started_cases[tc_name]}")
821829
self.started_cases[tc_name]['count'] += 1
822830
else:
823831
self.started_cases[tc_name] = { 'count': 1 }
824832

825-
def end_case(self, tc_name, phase=''):
833+
def end_case(self, tc_name, phase='TC_END'):
826834
if tc_name in self.started_cases:
827835
if phase == 'TS_SUM' and self.started_cases[tc_name]['count'] == 0:
828836
return
829837
if self.started_cases[tc_name]['count'] < 1:
830838
logger.error(
831-
f"Already ENDED {phase} case '{tc_name}':{self.started_cases[tc_name]}"
839+
f"{phase}: already ENDED case '{tc_name}':{self.started_cases[tc_name]}"
832840
)
833841
elif self.trace:
834-
logger.debug(f"END {phase} case '{tc_name}':{self.started_cases[tc_name]}")
842+
logger.debug(f"{phase}: END case '{tc_name}':{self.started_cases[tc_name]}")
835843
self.started_cases[tc_name]['count'] -= 1
836844
elif phase != 'TS_SUM':
837-
logger.warning(f"END {phase} case '{tc_name}' without START detected")
845+
logger.warning(f"{phase}: END case '{tc_name}' without START detected")
838846

839847

840848
def handle(self, line):
@@ -846,7 +854,7 @@ def handle(self, line):
846854
self.start_suite(test_suite_start_match.group("suite_name"))
847855
elif test_suite_end_match := re.search(self.test_suite_end_pattern, line):
848856
suite_name=test_suite_end_match.group("suite_name")
849-
self.end_suite(suite_name, 'TS_END')
857+
self.end_suite(suite_name)
850858
elif testcase_match := re.search(self.test_case_start_pattern, line):
851859
tc_name = testcase_match.group(2)
852860
tc = self.get_testcase(tc_name, 'TC_START')

scripts/pylib/twister/twisterlib/runner.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1210,9 +1210,12 @@ def determine_testcases(self, results):
12101210
# The 1st capture group is new ztest suite name.
12111211
# The 2nd capture group is new ztest unit test name.
12121212
new_ztest_suite = m_[1]
1213-
if new_ztest_suite not in self.instance.testsuite.ztest_suite_names:
1214-
logger.warning(
1215-
f"Unexpected Ztest suite '{new_ztest_suite}' "
1213+
if self.trace and \
1214+
new_ztest_suite not in self.instance.testsuite.ztest_suite_names:
1215+
# This can happen if a ZTEST_SUITE name is macro-generated
1216+
# in the test source files, e.g. based on DT information.
1217+
logger.debug(
1218+
f"Unexpected Ztest suite '{new_ztest_suite}' is "
12161219
f"not present in: {self.instance.testsuite.ztest_suite_names}"
12171220
)
12181221
test_func_name = m_[2].replace("test_", "", 1)
@@ -1222,10 +1225,12 @@ def determine_testcases(self, results):
12221225
detected_cases.append(testcase_id)
12231226

12241227
logger.debug(
1225-
f"Test instance {self.instance.name} already has {len(self.instance.testcases)} cases."
1228+
f"Test instance {self.instance.name} already has {len(self.instance.testcases)} "
1229+
f"testcase(s) known: {self.instance.testcases}"
12261230
)
12271231
if detected_cases:
1228-
logger.debug(f"Detected Ztest cases: [{', '.join(detected_cases)}] in {elf_file}")
1232+
logger.debug(f"Detected {len(detected_cases)} Ztest case(s): "
1233+
f"[{', '.join(detected_cases)}] in {elf_file}")
12291234
tc_keeper = {
12301235
tc.name: {'status': tc.status, 'reason': tc.reason}
12311236
for tc in self.instance.testcases

scripts/tests/twister/test_harness.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -607,7 +607,7 @@ def test_get_harness(name):
607607
),
608608
(
609609
True,
610-
"On TC_START: Ztest case 'testcase' is not known in {} running suite(s)",
610+
"TC_START: Ztest case 'testcase' is not known in {} running suite(s)",
611611
"START - test_testcase",
612612
[],
613613
{},
@@ -618,7 +618,7 @@ def test_get_harness(name):
618618
),
619619
(
620620
True,
621-
"On TC_END: Ztest case 'example' is not known in {} running suite(s)",
621+
"TC_END: Ztest case 'example' is not known in {} running suite(s)",
622622
"PASS - test_example in 0 seconds",
623623
[],
624624
{},
@@ -629,7 +629,7 @@ def test_get_harness(name):
629629
),
630630
(
631631
True,
632-
"On TC_END: Ztest case 'example' is not known in {} running suite(s)",
632+
"TC_END: Ztest case 'example' is not known in {} running suite(s)",
633633
"SKIP - test_example in 0 seconds",
634634
[],
635635
{},
@@ -640,7 +640,7 @@ def test_get_harness(name):
640640
),
641641
(
642642
True,
643-
"On TC_END: Ztest case 'example' is not known in {} running suite(s)",
643+
"TC_END: Ztest case 'example' is not known in {} running suite(s)",
644644
"FAIL - test_example in 0 seconds",
645645
[],
646646
{},
@@ -714,6 +714,7 @@ def test_test_handle(
714714
instance = TestInstance(
715715
testsuite=mock_testsuite, platform=mock_platform, outdir=outdir
716716
)
717+
instance.handler = mock.Mock(options=mock.Mock(verbose=0), type_str="handler_type")
717718

718719
test_obj = Test()
719720
test_obj.configure(instance)

0 commit comments

Comments
 (0)