mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] kunit: tool: fix _list_tests filtering wrong variable when list has TAP prefix
@ 2026-07-29 16:19 mohammad.abukhader
  2026-07-30 12:12 ` David Gow
  0 siblings, 1 reply; 6+ messages in thread
From: mohammad.abukhader @ 2026-07-29 16:19 UTC (permalink / raw)
  To: brendan.higgins, david
  Cc: raemoar63, linux-kselftest, kunit-dev, linux-kernel

From: Mohammad Abu-Khader <mohammad.abukhader@hotmail.com>

`_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")
---
 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']
-- 
2.55.0


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] kunit: tool: fix _list_tests filtering wrong variable when list has TAP prefix
  2026-07-29 16:19 [PATCH] kunit: tool: fix _list_tests filtering wrong variable when list has TAP prefix mohammad.abukhader
@ 2026-07-30 12:12 ` David Gow
  2026-08-03 15:56   ` Shuah Khan
  2026-08-22  8:05   ` [PATCH v3] " Mohammad abukhader
  0 siblings, 2 replies; 6+ messages in thread
From: David Gow @ 2026-07-30 12:12 UTC (permalink / raw)
  To: mohammad.abukhader, brendan.higgins
  Cc: raemoar63, linux-kselftest, kunit-dev, linux-kernel

Le 30/07/2026 à 12:19 AM, mohammad.abukhader@hotmail.com a écrit :
> From: Mohammad Abu-Khader <mohammad.abukhader@hotmail.com>
> 
> `_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 <david@davidgow.net>

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']


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] kunit: tool: fix _list_tests filtering wrong variable when list has TAP prefix
  2026-07-30 12:12 ` David Gow
@ 2026-08-03 15:56   ` Shuah Khan
  2026-08-03 19:02     ` [PATCH v2] " Mohammad abukhader
  2026-08-22  8:05   ` [PATCH v3] " Mohammad abukhader
  1 sibling, 1 reply; 6+ messages in thread
From: Shuah Khan @ 2026-08-03 15:56 UTC (permalink / raw)
  To: David Gow, mohammad.abukhader, brendan.higgins
  Cc: raemoar63, linux-kselftest, kunit-dev, linux-kernel, Shuah Khan

On 7/30/26 06:12, David Gow wrote:
> Le 30/07/2026 à 12:19 AM, mohammad.abukhader@hotmail.com a écrit :
>> From: Mohammad Abu-Khader <mohammad.abukhader@hotmail.com>
>>
>> `_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")

Missing Signed-off-by

Unfortunately I can't apply this patch. Please fix it and resend.
I will try my best to get this into Linux 7.2

thanks,
-- Shuah

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v2] kunit: tool: fix _list_tests filtering wrong variable when list has TAP prefix
  2026-08-03 15:56   ` Shuah Khan
@ 2026-08-03 19:02     ` Mohammad abukhader
  2026-08-12 14:36       ` David Gow
  0 siblings, 1 reply; 6+ messages in thread
From: Mohammad abukhader @ 2026-08-03 19:02 UTC (permalink / raw)
  To: brendan.higgins, david
  Cc: raemoar63, linux-kselftest, kunit-dev, linux-kernel

From: Mohammad Abu-Khader <mohammad.abukhader@hotmail.com>

`_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")
Signed-off-by: Mohammad Abu-Khader <mohammad.abukhader@hotmail.com>
---
 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']
-- 
2.55.0


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] kunit: tool: fix _list_tests filtering wrong variable when list has TAP prefix
  2026-08-03 19:02     ` [PATCH v2] " Mohammad abukhader
@ 2026-08-12 14:36       ` David Gow
  0 siblings, 0 replies; 6+ messages in thread
From: David Gow @ 2026-08-12 14:36 UTC (permalink / raw)
  To: Mohammad abukhader, brendan.higgins
  Cc: raemoar63, linux-kselftest, kunit-dev, linux-kernel

Le 04/08/2026 à 3:02 AM, Mohammad abukhader a écrit :
> From: Mohammad Abu-Khader <mohammad.abukhader@hotmail.com>
> 
> `_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")
> Signed-off-by: Mohammad Abu-Khader <mohammad.abukhader@hotmail.com>
> ---

Reviewed-by: David Gow <david@davidgow.net>

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']


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v3] kunit: tool: fix _list_tests filtering wrong variable when list has TAP prefix
  2026-07-30 12:12 ` David Gow
  2026-08-03 15:56   ` Shuah Khan
@ 2026-08-22  8:05   ` Mohammad abukhader
  1 sibling, 0 replies; 6+ messages in thread
From: Mohammad abukhader @ 2026-08-22  8:05 UTC (permalink / raw)
  To: brendan.higgins, david
  Cc: raemoar63, linux-kselftest, kunit-dev, linux-kernel

From: Mohammad Abu-Khader <mohammad.abukhader@hotmail.com>

`_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")
Reviewed-by: David Gow <david@davidgow.net>
Signed-off-by: Mohammad Abu-Khader <mohammad.abukhader@hotmail.com>
---
 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']
-- 
2.55.0


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2026-08-22  8:05 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-07-29 16:19 [PATCH] kunit: tool: fix _list_tests filtering wrong variable when list has TAP prefix mohammad.abukhader
2026-07-30 12:12 ` David Gow
2026-08-03 15:56   ` Shuah Khan
2026-08-03 19:02     ` [PATCH v2] " Mohammad abukhader
2026-08-12 14:36       ` David Gow
2026-08-22  8:05   ` [PATCH v3] " Mohammad abukhader

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®