Skip to content

Commit d992880

Browse files
dlatypovshuahkh
authored andcommitted
kunit: tool: add support for filtering suites by glob
This allows running different subsets of tests, e.g. $ ./tools/testing/kunit/kunit.py build $ ./tools/testing/kunit/kunit.py exec 'list*' $ ./tools/testing/kunit/kunit.py exec 'kunit*' This passes the "kunit_filter.glob" commandline option to the UML kernel, which currently only supports filtering by suite name. Signed-off-by: Daniel Latypov <[email protected]> Reviewed-by: Brendan Higgins <[email protected]> Signed-off-by: Shuah Khan <[email protected]>
1 parent 5d31f71 commit d992880

File tree

3 files changed

+28
-12
lines changed

3 files changed

+28
-12
lines changed

tools/testing/kunit/kunit.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@
2828
['jobs', 'build_dir', 'alltests',
2929
'make_options'])
3030
KunitExecRequest = namedtuple('KunitExecRequest',
31-
['timeout', 'build_dir', 'alltests'])
31+
['timeout', 'build_dir', 'alltests', 'filter_glob'])
3232
KunitParseRequest = namedtuple('KunitParseRequest',
3333
['raw_output', 'input_data', 'build_dir', 'json'])
3434
KunitRequest = namedtuple('KunitRequest', ['raw_output','timeout', 'jobs',
35-
'build_dir', 'alltests', 'json',
36-
'make_options'])
35+
'build_dir', 'alltests', 'filter_glob',
36+
'json', 'make_options'])
3737

3838
KernelDirectoryPath = sys.argv[0].split('tools/testing/kunit/')[0]
3939

@@ -93,6 +93,7 @@ def exec_tests(linux: kunit_kernel.LinuxSourceTree,
9393
test_start = time.time()
9494
result = linux.run_kernel(
9595
timeout=None if request.alltests else request.timeout,
96+
filter_glob=request.filter_glob,
9697
build_dir=request.build_dir)
9798

9899
test_end = time.time()
@@ -149,7 +150,7 @@ def run_tests(linux: kunit_kernel.LinuxSourceTree,
149150
return build_result
150151

151152
exec_request = KunitExecRequest(request.timeout, request.build_dir,
152-
request.alltests)
153+
request.alltests, request.filter_glob)
153154
exec_result = exec_tests(linux, exec_request)
154155
if exec_result.status != KunitStatus.SUCCESS:
155156
return exec_result
@@ -200,6 +201,14 @@ def add_exec_opts(parser) -> None:
200201
type=int,
201202
default=300,
202203
metavar='timeout')
204+
parser.add_argument('filter_glob',
205+
help='maximum number of seconds to allow for all tests '
206+
'to run. This does not include time taken to build the '
207+
'tests.',
208+
type=str,
209+
nargs='?',
210+
default='',
211+
metavar='filter_glob')
203212

204213
def add_parse_opts(parser) -> None:
205214
parser.add_argument('--raw_output', help='don\'t format output from kernel',
@@ -266,6 +275,7 @@ def main(argv, linux=None):
266275
cli_args.jobs,
267276
cli_args.build_dir,
268277
cli_args.alltests,
278+
cli_args.filter_glob,
269279
cli_args.json,
270280
cli_args.make_options)
271281
result = run_tests(linux, request)
@@ -307,7 +317,8 @@ def main(argv, linux=None):
307317

308318
exec_request = KunitExecRequest(cli_args.timeout,
309319
cli_args.build_dir,
310-
cli_args.alltests)
320+
cli_args.alltests,
321+
cli_args.filter_glob)
311322
exec_result = exec_tests(linux, exec_request)
312323
parse_request = KunitParseRequest(cli_args.raw_output,
313324
exec_result.result,

tools/testing/kunit/kunit_kernel.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,10 @@ def build_um_kernel(self, alltests, jobs, build_dir, make_options) -> bool:
203203
return False
204204
return self.validate_config(build_dir)
205205

206-
def run_kernel(self, args=[], build_dir='', timeout=None) -> Iterator[str]:
206+
def run_kernel(self, args=[], build_dir='', filter_glob='', timeout=None) -> Iterator[str]:
207207
args.extend(['mem=1G', 'console=tty'])
208+
if filter_glob:
209+
args.append('kunit.filter_glob='+filter_glob)
208210
self._ops.linux_bin(args, timeout, build_dir)
209211
outfile = get_outfile_path(build_dir)
210212
subprocess.call(['stty', 'sane'])

tools/testing/kunit/kunit_tool_test.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -315,15 +315,16 @@ def test_exec_passes_args_pass(self):
315315
kunit.main(['exec'], self.linux_source_mock)
316316
self.assertEqual(self.linux_source_mock.build_reconfig.call_count, 0)
317317
self.assertEqual(self.linux_source_mock.run_kernel.call_count, 1)
318-
self.linux_source_mock.run_kernel.assert_called_once_with(build_dir='.kunit', timeout=300)
318+
self.linux_source_mock.run_kernel.assert_called_once_with(
319+
build_dir='.kunit', filter_glob='', timeout=300)
319320
self.print_mock.assert_any_call(StrContains('Testing complete.'))
320321

321322
def test_run_passes_args_pass(self):
322323
kunit.main(['run'], self.linux_source_mock)
323324
self.assertEqual(self.linux_source_mock.build_reconfig.call_count, 1)
324325
self.assertEqual(self.linux_source_mock.run_kernel.call_count, 1)
325326
self.linux_source_mock.run_kernel.assert_called_once_with(
326-
build_dir='.kunit', timeout=300)
327+
build_dir='.kunit', filter_glob='', timeout=300)
327328
self.print_mock.assert_any_call(StrContains('Testing complete.'))
328329

329330
def test_exec_passes_args_fail(self):
@@ -361,23 +362,24 @@ def test_run_raw_output(self):
361362
def test_exec_timeout(self):
362363
timeout = 3453
363364
kunit.main(['exec', '--timeout', str(timeout)], self.linux_source_mock)
364-
self.linux_source_mock.run_kernel.assert_called_once_with(build_dir='.kunit', timeout=timeout)
365+
self.linux_source_mock.run_kernel.assert_called_once_with(
366+
build_dir='.kunit', filter_glob='', timeout=timeout)
365367
self.print_mock.assert_any_call(StrContains('Testing complete.'))
366368

367369
def test_run_timeout(self):
368370
timeout = 3453
369371
kunit.main(['run', '--timeout', str(timeout)], self.linux_source_mock)
370372
self.assertEqual(self.linux_source_mock.build_reconfig.call_count, 1)
371373
self.linux_source_mock.run_kernel.assert_called_once_with(
372-
build_dir='.kunit', timeout=timeout)
374+
build_dir='.kunit', filter_glob='', timeout=timeout)
373375
self.print_mock.assert_any_call(StrContains('Testing complete.'))
374376

375377
def test_run_builddir(self):
376378
build_dir = '.kunit'
377379
kunit.main(['run', '--build_dir=.kunit'], self.linux_source_mock)
378380
self.assertEqual(self.linux_source_mock.build_reconfig.call_count, 1)
379381
self.linux_source_mock.run_kernel.assert_called_once_with(
380-
build_dir=build_dir, timeout=300)
382+
build_dir=build_dir, filter_glob='', timeout=300)
381383
self.print_mock.assert_any_call(StrContains('Testing complete.'))
382384

383385
def test_config_builddir(self):
@@ -393,7 +395,8 @@ def test_build_builddir(self):
393395
def test_exec_builddir(self):
394396
build_dir = '.kunit'
395397
kunit.main(['exec', '--build_dir', build_dir], self.linux_source_mock)
396-
self.linux_source_mock.run_kernel.assert_called_once_with(build_dir=build_dir, timeout=300)
398+
self.linux_source_mock.run_kernel.assert_called_once_with(
399+
build_dir=build_dir, filter_glob='', timeout=300)
397400
self.print_mock.assert_any_call(StrContains('Testing complete.'))
398401

399402
@mock.patch.object(kunit_kernel, 'LinuxSourceTree')

0 commit comments

Comments
 (0)