mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-27 15:17:04 -04:00
kunit: tool: fix _list_tests filtering wrong variable when list has TAP prefix
`_list_tests()` runs the kernel to list tests, strips printk timestamp
lines via `extract_tap_lines()`, then drops the dummy TAP header from
the cleaned `lines`. However the subsequent regex filter mistakenly
operates on the original `output` instead of the cleaned `lines`. When
the kernel output includes timestamp prefixes (common with UML or slower
setups), e.g.:
[ 0.100000] suite.test1
[ 0.100000] suite.test2
the anchored regex `^[^\s.]+\.[^\s.]+$` rejects them and `--list_tests`
returns an empty list.
Filter `lines` instead of `output`, matching the behavior of the
adjacent `_list_tests_attr()` which already returns the cleaned list.
Add a regression test with timestamp-prefixed input to verify the fix.
Link: https://lore.kernel.org/r/20260803190059.36491-1-mohammad.abukhader@hotmail.com
Fixes: 723c8258c8 ("kunit: tool: Add command line interface to filter and report attributes")
Signed-off-by: Mohammad Abu-Khader <mohammad.abukhader@hotmail.com>
Reviewed-by: David Gow <david@davidgow.net>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
This commit is contained in:
committed by
Shuah Khan
parent
34b5c01329
commit
dea754ded9
@@ -126,7 +126,7 @@ def _list_tests(linux: kunit_kernel.LinuxSourceTree, request: KunitExecRequest)
|
||||
lines.pop()
|
||||
|
||||
# Filter out any extraneous non-test output that might have gotten mixed in.
|
||||
return [l for l in output if re.match(r'^[^\s.]+\.[^\s.]+$', l)]
|
||||
return [l for l in lines if re.match(r'^[^\s.]+\.[^\s.]+$', l)]
|
||||
|
||||
def _list_tests_attr(linux: kunit_kernel.LinuxSourceTree, request: KunitExecRequest) -> Iterable[str]:
|
||||
args = ['kunit.action=list_attr']
|
||||
|
||||
@@ -979,6 +979,18 @@ class KUnitMainTest(unittest.TestCase):
|
||||
self.linux_source_mock.run_kernel.assert_called_once_with(
|
||||
args=['kunit.action=list'], build_dir='.kunit', filter_glob='suite*', filter='', filter_action=None, timeout=300)
|
||||
|
||||
def test_list_tests_with_prefix(self):
|
||||
want = ['suite.test1', 'suite.test2', 'suite2.test1']
|
||||
self.linux_source_mock.run_kernel.return_value = [
|
||||
'[ 0.100000] TAP version 14',
|
||||
'[ 0.200000] suite.test1',
|
||||
'[ 0.200000] suite.test2',
|
||||
'[ 0.300000] suite2.test1']
|
||||
|
||||
got = kunit._list_tests(self.linux_source_mock,
|
||||
kunit.KunitExecRequest(None, None, None, False, False, '.kunit', 300, 'suite*', '', None, None, 'suite', False, False, False))
|
||||
self.assertEqual(got, want)
|
||||
|
||||
@mock.patch.object(kunit, '_list_tests')
|
||||
def test_run_isolated_by_suite(self, mock_tests):
|
||||
mock_tests.return_value = ['suite.test1', 'suite.test2', 'suite2.test1']
|
||||
|
||||
Reference in New Issue
Block a user