@@ -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+
389478def 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
505530if __name__ == '__main__' :
506531 main (sys .argv [1 :])
0 commit comments