@@ -386,6 +386,95 @@ def tree_from_args(cli_args: argparse.Namespace) -> kunit_kernel.LinuxSourceTree
386
386
extra_qemu_args = qemu_args )
387
387
388
388
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
+
389
478
def main (argv ):
390
479
parser = argparse .ArgumentParser (
391
480
description = 'Helps writing and running KUnit tests.' )
@@ -429,78 +518,14 @@ def main(argv):
429
518
if get_kernel_root_path ():
430
519
os .chdir (get_kernel_root_path ())
431
520
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 :
503
524
parser .print_help ()
525
+ return
526
+
527
+ subcomand_handler (cli_args )
528
+
504
529
505
530
if __name__ == '__main__' :
506
531
main (sys .argv [1 :])
0 commit comments