]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
kunit: tool: Don't overwrite test status based on subtest counts
authorThomas Weißschuh <thomas.weissschuh@linutronix.de>
Tue, 30 Dec 2025 12:26:36 +0000 (13:26 +0100)
committerShuah Khan <skhan@linuxfoundation.org>
Mon, 5 Jan 2026 22:36:08 +0000 (15:36 -0700)
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.

Link: https://lore.kernel.org/r/20251230-kunit-nested-failure-v1-2-98cfbeb87823@linutronix.de
Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
Reviewed-by: David Gow <davidgow@google.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
tools/testing/kunit/kunit_parser.py
tools/testing/kunit/kunit_tool_test.py
tools/testing/kunit/test_data/test_is_test_passed-failure-nested.log

index 333cd3a4a56b6f26c10aa1a5ecec9858bc57fbd7..5338489dcbe48c01912c5e8f02a481d6860a5d15 100644 (file)
@@ -689,6 +689,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,
index 81a0996edef4b191410db0af2fcce166bf49a9d2..bdc51b5c7b10700a47cfbb7f24906231e9fad545 100755 (executable)
@@ -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)
 
index 2e528da39ab5b2be0fca6cf9160c10929fba3c9e..5498dfd0b0db24663e1a1e9bf78c587de6746522 100644 (file)
@@ -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