If a subtest itself reports success, but the outer testcase fails,
the whole testcase should be reported as a failure.
However the status is recalculated based on the test counts,
overwriting the outer test result.
Synthesize a failed test in this case to make sure the failure is not
swallowed.

Signed-off-by: Thomas Weißschuh <thomas.weisssc...@linutronix.de>
Reviewed-by: David Gow <david...@google.com>
---
 tools/testing/kunit/kunit_parser.py                                  | 3 +++
 tools/testing/kunit/kunit_tool_test.py                               | 1 +
 tools/testing/kunit/test_data/test_is_test_passed-failure-nested.log | 3 +++
 3 files changed, 7 insertions(+)

diff --git a/tools/testing/kunit/kunit_parser.py 
b/tools/testing/kunit/kunit_parser.py
index 
c176487356e6c94882046b19ea696d750905b8d5..a7a61e627e348db14b953080ec8789994fba955a
 100644
--- a/tools/testing/kunit/kunit_parser.py
+++ b/tools/testing/kunit/kunit_parser.py
@@ -687,6 +687,9 @@ def bubble_up_test_results(test: Test) -> None:
        elif test.counts.get_status() == TestStatus.TEST_CRASHED:
                test.status = TestStatus.TEST_CRASHED
 
+       if status == TestStatus.FAILURE and test.counts.get_status() == 
TestStatus.SUCCESS:
+               counts.add_status(status)
+
 def parse_test(lines: LineStream, expected_num: int, log: List[str], 
is_subtest: bool, printer: Printer) -> Test:
        """
        Finds next test to parse in LineStream, creates new Test object,
diff --git a/tools/testing/kunit/kunit_tool_test.py 
b/tools/testing/kunit/kunit_tool_test.py
index 
b74dc05fc2fe5b3ff629172fc7aafeb5c3d29fb3..d5bbcb95ab6abb1a8ee91439d87daaf29d159294
 100755
--- a/tools/testing/kunit/kunit_tool_test.py
+++ b/tools/testing/kunit/kunit_tool_test.py
@@ -172,6 +172,7 @@ class KUnitParserTest(unittest.TestCase):
                self.assertEqual(kunit_parser.TestStatus.FAILURE, result.status)
                self.assertEqual(result.counts.failed, 2)
                self.assertEqual(kunit_parser.TestStatus.FAILURE, 
result.subtests[0].status)
+               self.assertEqual(kunit_parser.TestStatus.SUCCESS, 
result.subtests[0].subtests[0].status)
                self.assertEqual(kunit_parser.TestStatus.FAILURE, 
result.subtests[1].status)
                self.assertEqual(kunit_parser.TestStatus.FAILURE, 
result.subtests[1].subtests[0].status)
 
diff --git 
a/tools/testing/kunit/test_data/test_is_test_passed-failure-nested.log 
b/tools/testing/kunit/test_data/test_is_test_passed-failure-nested.log
index 
2e528da39ab5b2be0fca6cf9160c10929fba3c9e..5498dfd0b0db24663e1a1e9bf78c587de6746522
 100644
--- a/tools/testing/kunit/test_data/test_is_test_passed-failure-nested.log
+++ b/tools/testing/kunit/test_data/test_is_test_passed-failure-nested.log
@@ -1,5 +1,8 @@
 KTAP version 1
 1..2
+    KTAP version 1
+    1..1
+        ok 1 test 1
 not ok 1 subtest 1
     KTAP version 1
     1..1

-- 
2.50.0


Reply via email to