Le 30/07/2026 à 12:19 AM, [email protected] a écrit : > From: Mohammad Abu-Khader <[email protected]> > > `_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. > > Fixes: 723c8258c8fe ("kunit: tool: Add command line interface to filter and > report attributes") > ---
Thanks: nice catch. I rarely run with CONFIG_PRINTK_TIME=y, so didn't notice. Reviewed-by: David Gow <[email protected]> Cheers, -- David > tools/testing/kunit/kunit.py | 2 +- > tools/testing/kunit/kunit_tool_test.py | 12 ++++++++++++ > 2 files changed, 13 insertions(+), 1 deletion(-) > > diff --git a/tools/testing/kunit/kunit.py b/tools/testing/kunit/kunit.py > index ac3f7159e67f..91d234ac3b57 100755 > --- a/tools/testing/kunit/kunit.py > +++ b/tools/testing/kunit/kunit.py > @@ -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'] > diff --git a/tools/testing/kunit/kunit_tool_test.py > b/tools/testing/kunit/kunit_tool_test.py > index da88c3a1651d..85ae21754bdf 100755 > --- a/tools/testing/kunit/kunit_tool_test.py > +++ b/tools/testing/kunit/kunit_tool_test.py > @@ -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']

