]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
kunit: tool: make parser stop overwriting status of suites w/ no_tests
authorDaniel Latypov <dlatypov@google.com>
Thu, 12 May 2022 18:35:37 +0000 (11:35 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Jun 2022 08:29:45 +0000 (10:29 +0200)
[ Upstream commit dbf0b0d53a2b5afa6ef7372dcedf52302669fc2c ]

Consider this invocation
$ ./tools/testing/kunit/kunit.py parse <<EOF
  TAP version 14
  1..2
  ok 1 - suite
    # Subtest: no_tests_suite
    # catastrophic error!
  not ok 1 - no_tests_suite
EOF

It will have a 0 exit code even though there's a "not ok".

Consider this one:
$ ./tools/testing/kunit/kunit.py parse <<EOF
  TAP version 14
  1..2
  ok 1 - suite
  not ok 1 - no_tests_suite
EOF

It will a non-zero exit code.

Why?
We have this line in the kunit_parser.py
> parent_test = parse_test_header(lines, test)
where we have special handling when we see "# Subtest" and we ignore the
explicit reported "not ok 1" status!

Also, NO_TESTS at a suite-level only results in a non-zero status code
where then there's only one suite atm.

This change is the minimal one to make sure we don't overwrite it.

Signed-off-by: Daniel Latypov <dlatypov@google.com>
Reviewed-by: David Gow <davidgow@google.com>
Reviewed-by: Brendan Higgins <brendanhiggins@google.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
tools/testing/kunit/kunit_parser.py
tools/testing/kunit/test_data/test_is_test_passed-no_tests_no_plan.log

index 05ff334761dd001cb283c08dde07f12f8a4e0635..2f93ed1d7f9909740502663c559c4928499ab983 100644 (file)
@@ -789,8 +789,11 @@ def parse_test(lines: LineStream, expected_num: int, log: List[str]) -> Test:
 
        # Check for there being no tests
        if parent_test and len(subtests) == 0:
-               test.status = TestStatus.NO_TESTS
-               test.add_error('0 tests run!')
+               # Don't override a bad status if this test had one reported.
+               # Assumption: no subtests means CRASHED is from Test.__init__()
+               if test.status in (TestStatus.TEST_CRASHED, TestStatus.SUCCESS):
+                       test.status = TestStatus.NO_TESTS
+                       test.add_error('0 tests run!')
 
        # Add statuses to TestCounts attribute in Test object
        bubble_up_test_results(test)
index dd873c981108605a758d74b21b0c19527ed8ea51..4f81876ee6f18fb1f77bea4bd242f1a102940d73 100644 (file)
@@ -3,5 +3,5 @@ TAP version 14
   # Subtest: suite
   1..1
     # Subtest: case
-  ok 1 - case # SKIP
+  ok 1 - case
 ok 1 - suite