Skip to content

Commit 2dc9d6c

Browse files
alexpantyukhinshuahkh
authored andcommitted
kunit: kunit.py extract handlers
The main function contains a wide if-elif block that handles different subcommands. It's possible to make code refactoring to extract subcommands handlers. Fixed commit summary line. Shuah Khan <[email protected]> Signed-off-by: Alexander Pantyukhin <[email protected]> Reviewed-by: David Gow <[email protected]> Signed-off-by: Shuah Khan <[email protected]>
1 parent 1fdc6f4 commit 2dc9d6c

File tree

1 file changed

+96
-71
lines changed

1 file changed

+96
-71
lines changed

tools/testing/kunit/kunit.py

Lines changed: 96 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,95 @@ def tree_from_args(cli_args: argparse.Namespace) -> kunit_kernel.LinuxSourceTree
386386
extra_qemu_args=qemu_args)
387387

388388

389+
def run_handler(cli_args):
390+
if not os.path.exists(cli_args.build_dir):
391+
os.mkdir(cli_args.build_dir)
392+
393+
linux = tree_from_args(cli_args)
394+
request = KunitRequest(build_dir=cli_args.build_dir,
395+
make_options=cli_args.make_options,
396+
jobs=cli_args.jobs,
397+
raw_output=cli_args.raw_output,
398+
json=cli_args.json,
399+
timeout=cli_args.timeout,
400+
filter_glob=cli_args.filter_glob,
401+
kernel_args=cli_args.kernel_args,
402+
run_isolated=cli_args.run_isolated)
403+
result = run_tests(linux, request)
404+
if result.status != KunitStatus.SUCCESS:
405+
sys.exit(1)
406+
407+
408+
def config_handler(cli_args):
409+
if cli_args.build_dir and (
410+
not os.path.exists(cli_args.build_dir)):
411+
os.mkdir(cli_args.build_dir)
412+
413+
linux = tree_from_args(cli_args)
414+
request = KunitConfigRequest(build_dir=cli_args.build_dir,
415+
make_options=cli_args.make_options)
416+
result = config_tests(linux, request)
417+
stdout.print_with_timestamp((
418+
'Elapsed time: %.3fs\n') % (
419+
result.elapsed_time))
420+
if result.status != KunitStatus.SUCCESS:
421+
sys.exit(1)
422+
423+
424+
def build_handler(cli_args):
425+
linux = tree_from_args(cli_args)
426+
request = KunitBuildRequest(build_dir=cli_args.build_dir,
427+
make_options=cli_args.make_options,
428+
jobs=cli_args.jobs)
429+
result = config_and_build_tests(linux, request)
430+
stdout.print_with_timestamp((
431+
'Elapsed time: %.3fs\n') % (
432+
result.elapsed_time))
433+
if result.status != KunitStatus.SUCCESS:
434+
sys.exit(1)
435+
436+
437+
def exec_handler(cli_args):
438+
linux = tree_from_args(cli_args)
439+
exec_request = KunitExecRequest(raw_output=cli_args.raw_output,
440+
build_dir=cli_args.build_dir,
441+
json=cli_args.json,
442+
timeout=cli_args.timeout,
443+
filter_glob=cli_args.filter_glob,
444+
kernel_args=cli_args.kernel_args,
445+
run_isolated=cli_args.run_isolated)
446+
result = exec_tests(linux, exec_request)
447+
stdout.print_with_timestamp((
448+
'Elapsed time: %.3fs\n') % (result.elapsed_time))
449+
if result.status != KunitStatus.SUCCESS:
450+
sys.exit(1)
451+
452+
453+
def parse_handler(cli_args):
454+
if cli_args.file is None:
455+
sys.stdin.reconfigure(errors='backslashreplace') # pytype: disable=attribute-error
456+
kunit_output = sys.stdin
457+
else:
458+
with open(cli_args.file, 'r', errors='backslashreplace') as f:
459+
kunit_output = f.read().splitlines()
460+
# We know nothing about how the result was created!
461+
metadata = kunit_json.Metadata()
462+
request = KunitParseRequest(raw_output=cli_args.raw_output,
463+
json=cli_args.json)
464+
result, _ = parse_tests(request, metadata, kunit_output)
465+
if result.status != KunitStatus.SUCCESS:
466+
sys.exit(1)
467+
468+
469+
subcommand_handlers_map = {
470+
'run': run_handler,
471+
'config': config_handler,
472+
'build': build_handler,
473+
'exec': exec_handler,
474+
'parse': parse_handler
475+
}
476+
477+
389478
def main(argv):
390479
parser = argparse.ArgumentParser(
391480
description='Helps writing and running KUnit tests.')
@@ -429,78 +518,14 @@ def main(argv):
429518
if get_kernel_root_path():
430519
os.chdir(get_kernel_root_path())
431520

432-
if cli_args.subcommand == 'run':
433-
if not os.path.exists(cli_args.build_dir):
434-
os.mkdir(cli_args.build_dir)
435-
436-
linux = tree_from_args(cli_args)
437-
request = KunitRequest(build_dir=cli_args.build_dir,
438-
make_options=cli_args.make_options,
439-
jobs=cli_args.jobs,
440-
raw_output=cli_args.raw_output,
441-
json=cli_args.json,
442-
timeout=cli_args.timeout,
443-
filter_glob=cli_args.filter_glob,
444-
kernel_args=cli_args.kernel_args,
445-
run_isolated=cli_args.run_isolated)
446-
result = run_tests(linux, request)
447-
if result.status != KunitStatus.SUCCESS:
448-
sys.exit(1)
449-
elif cli_args.subcommand == 'config':
450-
if cli_args.build_dir and (
451-
not os.path.exists(cli_args.build_dir)):
452-
os.mkdir(cli_args.build_dir)
453-
454-
linux = tree_from_args(cli_args)
455-
request = KunitConfigRequest(build_dir=cli_args.build_dir,
456-
make_options=cli_args.make_options)
457-
result = config_tests(linux, request)
458-
stdout.print_with_timestamp((
459-
'Elapsed time: %.3fs\n') % (
460-
result.elapsed_time))
461-
if result.status != KunitStatus.SUCCESS:
462-
sys.exit(1)
463-
elif cli_args.subcommand == 'build':
464-
linux = tree_from_args(cli_args)
465-
request = KunitBuildRequest(build_dir=cli_args.build_dir,
466-
make_options=cli_args.make_options,
467-
jobs=cli_args.jobs)
468-
result = config_and_build_tests(linux, request)
469-
stdout.print_with_timestamp((
470-
'Elapsed time: %.3fs\n') % (
471-
result.elapsed_time))
472-
if result.status != KunitStatus.SUCCESS:
473-
sys.exit(1)
474-
elif cli_args.subcommand == 'exec':
475-
linux = tree_from_args(cli_args)
476-
exec_request = KunitExecRequest(raw_output=cli_args.raw_output,
477-
build_dir=cli_args.build_dir,
478-
json=cli_args.json,
479-
timeout=cli_args.timeout,
480-
filter_glob=cli_args.filter_glob,
481-
kernel_args=cli_args.kernel_args,
482-
run_isolated=cli_args.run_isolated)
483-
result = exec_tests(linux, exec_request)
484-
stdout.print_with_timestamp((
485-
'Elapsed time: %.3fs\n') % (result.elapsed_time))
486-
if result.status != KunitStatus.SUCCESS:
487-
sys.exit(1)
488-
elif cli_args.subcommand == 'parse':
489-
if cli_args.file is None:
490-
sys.stdin.reconfigure(errors='backslashreplace') # pytype: disable=attribute-error
491-
kunit_output = sys.stdin
492-
else:
493-
with open(cli_args.file, 'r', errors='backslashreplace') as f:
494-
kunit_output = f.read().splitlines()
495-
# We know nothing about how the result was created!
496-
metadata = kunit_json.Metadata()
497-
request = KunitParseRequest(raw_output=cli_args.raw_output,
498-
json=cli_args.json)
499-
result, _ = parse_tests(request, metadata, kunit_output)
500-
if result.status != KunitStatus.SUCCESS:
501-
sys.exit(1)
502-
else:
521+
subcomand_handler = subcommand_handlers_map.get(cli_args.subcommand, None)
522+
523+
if subcomand_handler is None:
503524
parser.print_help()
525+
return
526+
527+
subcomand_handler(cli_args)
528+
504529

505530
if __name__ == '__main__':
506531
main(sys.argv[1:])

0 commit comments

Comments
 (0)