15
15
16
16
assert sys .version_info >= (3 , 7 ), "Python version is too old"
17
17
18
- from collections import namedtuple
18
+ from dataclasses import dataclass
19
19
from enum import Enum , auto
20
- from typing import Iterable , Sequence , List
20
+ from typing import Any , Iterable , Sequence , List , Optional
21
21
22
22
import kunit_json
23
23
import kunit_kernel
24
24
import kunit_parser
25
25
26
- KunitResult = namedtuple ('KunitResult' , ['status' ,'result' ,'elapsed_time' ])
27
-
28
- KunitConfigRequest = namedtuple ('KunitConfigRequest' ,
29
- ['build_dir' , 'make_options' ])
30
- KunitBuildRequest = namedtuple ('KunitBuildRequest' ,
31
- ['jobs' , 'build_dir' , 'alltests' ,
32
- 'make_options' ])
33
- KunitExecRequest = namedtuple ('KunitExecRequest' ,
34
- ['timeout' , 'build_dir' , 'alltests' ,
35
- 'filter_glob' , 'kernel_args' , 'run_isolated' ])
36
- KunitParseRequest = namedtuple ('KunitParseRequest' ,
37
- ['raw_output' , 'build_dir' , 'json' ])
38
- KunitRequest = namedtuple ('KunitRequest' , ['raw_output' ,'timeout' , 'jobs' ,
39
- 'build_dir' , 'alltests' , 'filter_glob' ,
40
- 'kernel_args' , 'run_isolated' , 'json' , 'make_options' ])
41
-
42
- KernelDirectoryPath = sys .argv [0 ].split ('tools/testing/kunit/' )[0 ]
43
-
44
26
class KunitStatus (Enum ):
45
27
SUCCESS = auto ()
46
28
CONFIG_FAILURE = auto ()
47
29
BUILD_FAILURE = auto ()
48
30
TEST_FAILURE = auto ()
49
31
32
+ @dataclass
33
+ class KunitResult :
34
+ status : KunitStatus
35
+ result : Any
36
+ elapsed_time : float
37
+
38
+ @dataclass
39
+ class KunitConfigRequest :
40
+ build_dir : str
41
+ make_options : Optional [List [str ]]
42
+
43
+ @dataclass
44
+ class KunitBuildRequest (KunitConfigRequest ):
45
+ jobs : int
46
+ alltests : bool
47
+
48
+ @dataclass
49
+ class KunitParseRequest :
50
+ raw_output : Optional [str ]
51
+ build_dir : str
52
+ json : Optional [str ]
53
+
54
+ @dataclass
55
+ class KunitExecRequest (KunitParseRequest ):
56
+ timeout : int
57
+ alltests : bool
58
+ filter_glob : str
59
+ kernel_args : Optional [List [str ]]
60
+ run_isolated : Optional [str ]
61
+
62
+ @dataclass
63
+ class KunitRequest (KunitExecRequest , KunitBuildRequest ):
64
+ pass
65
+
66
+
67
+ KernelDirectoryPath = sys .argv [0 ].split ('tools/testing/kunit/' )[0 ]
68
+
50
69
def get_kernel_root_path () -> str :
51
70
path = sys .argv [0 ] if not __file__ else __file__
52
71
parts = os .path .realpath (path ).split ('tools/testing/kunit' )
@@ -121,8 +140,7 @@ def _suites_from_test_list(tests: List[str]) -> List[str]:
121
140
122
141
123
142
124
- def exec_tests (linux : kunit_kernel .LinuxSourceTree , request : KunitExecRequest ,
125
- parse_request : KunitParseRequest ) -> KunitResult :
143
+ def exec_tests (linux : kunit_kernel .LinuxSourceTree , request : KunitExecRequest ) -> KunitResult :
126
144
filter_globs = [request .filter_glob ]
127
145
if request .run_isolated :
128
146
tests = _list_tests (linux , request )
@@ -147,7 +165,7 @@ def exec_tests(linux: kunit_kernel.LinuxSourceTree, request: KunitExecRequest,
147
165
filter_glob = filter_glob ,
148
166
build_dir = request .build_dir )
149
167
150
- result = parse_tests (parse_request , run_result )
168
+ result = parse_tests (request , run_result )
151
169
# run_kernel() doesn't block on the kernel exiting.
152
170
# That only happens after we get the last line of output from `run_result`.
153
171
# So exec_time here actually contains parsing + execution time, which is fine.
@@ -217,27 +235,15 @@ def run_tests(linux: kunit_kernel.LinuxSourceTree,
217
235
request : KunitRequest ) -> KunitResult :
218
236
run_start = time .time ()
219
237
220
- config_request = KunitConfigRequest (request .build_dir ,
221
- request .make_options )
222
- config_result = config_tests (linux , config_request )
238
+ config_result = config_tests (linux , request )
223
239
if config_result .status != KunitStatus .SUCCESS :
224
240
return config_result
225
241
226
- build_request = KunitBuildRequest (request .jobs , request .build_dir ,
227
- request .alltests ,
228
- request .make_options )
229
- build_result = build_tests (linux , build_request )
242
+ build_result = build_tests (linux , request )
230
243
if build_result .status != KunitStatus .SUCCESS :
231
244
return build_result
232
245
233
- exec_request = KunitExecRequest (request .timeout , request .build_dir ,
234
- request .alltests , request .filter_glob ,
235
- request .kernel_args , request .run_isolated )
236
- parse_request = KunitParseRequest (request .raw_output ,
237
- request .build_dir ,
238
- request .json )
239
-
240
- exec_result = exec_tests (linux , exec_request , parse_request )
246
+ exec_result = exec_tests (linux , request )
241
247
242
248
run_end = time .time ()
243
249
@@ -413,16 +419,16 @@ def main(argv, linux=None):
413
419
cross_compile = cli_args .cross_compile ,
414
420
qemu_config_path = cli_args .qemu_config )
415
421
416
- request = KunitRequest (cli_args .raw_output ,
417
- cli_args .timeout ,
418
- cli_args .jobs ,
419
- cli_args .build_dir ,
420
- cli_args .alltests ,
421
- cli_args .filter_glob ,
422
- cli_args .kernel_args ,
423
- cli_args .run_isolated ,
424
- cli_args .json ,
425
- cli_args .make_options )
422
+ request = KunitRequest (build_dir = cli_args .build_dir ,
423
+ make_options = cli_args .make_options ,
424
+ jobs = cli_args .jobs ,
425
+ alltests = cli_args .alltests ,
426
+ raw_output = cli_args .raw_output ,
427
+ json = cli_args .json ,
428
+ timeout = cli_args .timeout ,
429
+ filter_glob = cli_args .filter_glob ,
430
+ kernel_args = cli_args .kernel_args ,
431
+ run_isolated = cli_args .run_isolated )
426
432
result = run_tests (linux , request )
427
433
if result .status != KunitStatus .SUCCESS :
428
434
sys .exit (1 )
@@ -439,8 +445,8 @@ def main(argv, linux=None):
439
445
cross_compile = cli_args .cross_compile ,
440
446
qemu_config_path = cli_args .qemu_config )
441
447
442
- request = KunitConfigRequest (cli_args .build_dir ,
443
- cli_args .make_options )
448
+ request = KunitConfigRequest (build_dir = cli_args .build_dir ,
449
+ make_options = cli_args .make_options )
444
450
result = config_tests (linux , request )
445
451
kunit_parser .print_with_timestamp ((
446
452
'Elapsed time: %.3fs\n ' ) % (
@@ -456,10 +462,10 @@ def main(argv, linux=None):
456
462
cross_compile = cli_args .cross_compile ,
457
463
qemu_config_path = cli_args .qemu_config )
458
464
459
- request = KunitBuildRequest (cli_args .jobs ,
460
- cli_args .build_dir ,
461
- cli_args .alltests ,
462
- cli_args .make_options )
465
+ request = KunitBuildRequest (build_dir = cli_args .build_dir ,
466
+ make_options = cli_args .make_options ,
467
+ jobs = cli_args .jobs ,
468
+ alltests = cli_args .alltests )
463
469
result = build_tests (linux , request )
464
470
kunit_parser .print_with_timestamp ((
465
471
'Elapsed time: %.3fs\n ' ) % (
@@ -475,16 +481,15 @@ def main(argv, linux=None):
475
481
cross_compile = cli_args .cross_compile ,
476
482
qemu_config_path = cli_args .qemu_config )
477
483
478
- exec_request = KunitExecRequest (cli_args .timeout ,
479
- cli_args .build_dir ,
480
- cli_args .alltests ,
481
- cli_args .filter_glob ,
482
- cli_args .kernel_args ,
483
- cli_args .run_isolated )
484
- parse_request = KunitParseRequest (cli_args .raw_output ,
485
- cli_args .build_dir ,
486
- cli_args .json )
487
- result = exec_tests (linux , exec_request , parse_request )
484
+ exec_request = KunitExecRequest (raw_output = cli_args .raw_output ,
485
+ build_dir = cli_args .build_dir ,
486
+ json = cli_args .json ,
487
+ timeout = cli_args .timeout ,
488
+ alltests = cli_args .alltests ,
489
+ filter_glob = cli_args .filter_glob ,
490
+ kernel_args = cli_args .kernel_args ,
491
+ run_isolated = cli_args .run_isolated )
492
+ result = exec_tests (linux , exec_request )
488
493
kunit_parser .print_with_timestamp ((
489
494
'Elapsed time: %.3fs\n ' ) % (result .elapsed_time ))
490
495
if result .status != KunitStatus .SUCCESS :
@@ -496,9 +501,9 @@ def main(argv, linux=None):
496
501
else :
497
502
with open (cli_args .file , 'r' , errors = 'backslashreplace' ) as f :
498
503
kunit_output = f .read ().splitlines ()
499
- request = KunitParseRequest (cli_args .raw_output ,
500
- None ,
501
- cli_args .json )
504
+ request = KunitParseRequest (raw_output = cli_args .raw_output ,
505
+ build_dir = '' ,
506
+ json = cli_args .json )
502
507
result = parse_tests (request , kunit_output )
503
508
if result .status != KunitStatus .SUCCESS :
504
509
sys .exit (1 )
0 commit comments