kunit.py (5578d008d9e06bb531fb3e62dd17096d9fd9c853) | kunit.py (21a6d1780d5bbfca0ce9b8104ca6233502fcbf86) |
---|---|
1#!/usr/bin/python3 2# SPDX-License-Identifier: GPL-2.0 3# 4# A thin wrapper on top of the KUnit Kernel 5# 6# Copyright (C) 2019, Google LLC. 7# Author: Felix Guo <felixguoxiuping@gmail.com> 8# Author: Brendan Higgins <brendanhiggins@google.com> 9 10import argparse 11import sys 12import os 13import time 14import shutil 15 16from collections import namedtuple 17from enum import Enum, auto 18 19import kunit_config | 1#!/usr/bin/python3 2# SPDX-License-Identifier: GPL-2.0 3# 4# A thin wrapper on top of the KUnit Kernel 5# 6# Copyright (C) 2019, Google LLC. 7# Author: Felix Guo <felixguoxiuping@gmail.com> 8# Author: Brendan Higgins <brendanhiggins@google.com> 9 10import argparse 11import sys 12import os 13import time 14import shutil 15 16from collections import namedtuple 17from enum import Enum, auto 18 19import kunit_config |
20import kunit_json |
|
20import kunit_kernel 21import kunit_parser 22 23KunitResult = namedtuple('KunitResult', ['status','result','elapsed_time']) 24 25KunitConfigRequest = namedtuple('KunitConfigRequest', 26 ['build_dir', 'make_options']) 27KunitBuildRequest = namedtuple('KunitBuildRequest', 28 ['jobs', 'build_dir', 'alltests', 29 'make_options']) 30KunitExecRequest = namedtuple('KunitExecRequest', 31 ['timeout', 'build_dir', 'alltests']) 32KunitParseRequest = namedtuple('KunitParseRequest', | 21import kunit_kernel 22import kunit_parser 23 24KunitResult = namedtuple('KunitResult', ['status','result','elapsed_time']) 25 26KunitConfigRequest = namedtuple('KunitConfigRequest', 27 ['build_dir', 'make_options']) 28KunitBuildRequest = namedtuple('KunitBuildRequest', 29 ['jobs', 'build_dir', 'alltests', 30 'make_options']) 31KunitExecRequest = namedtuple('KunitExecRequest', 32 ['timeout', 'build_dir', 'alltests']) 33KunitParseRequest = namedtuple('KunitParseRequest', |
33 ['raw_output', 'input_data']) | 34 ['raw_output', 'input_data', 'build_dir', 'json']) |
34KunitRequest = namedtuple('KunitRequest', ['raw_output','timeout', 'jobs', | 35KunitRequest = namedtuple('KunitRequest', ['raw_output','timeout', 'jobs', |
35 'build_dir', 'alltests', | 36 'build_dir', 'alltests', 'json', |
36 'make_options']) 37 38KernelDirectoryPath = sys.argv[0].split('tools/testing/kunit/')[0] 39 40class KunitStatus(Enum): 41 SUCCESS = auto() 42 CONFIG_FAILURE = auto() 43 BUILD_FAILURE = auto() --- 64 unchanged lines hidden (view full) --- 108 test_end - test_start) 109 110def parse_tests(request: KunitParseRequest) -> KunitResult: 111 parse_start = time.time() 112 113 test_result = kunit_parser.TestResult(kunit_parser.TestStatus.SUCCESS, 114 [], 115 'Tests not Parsed.') | 37 'make_options']) 38 39KernelDirectoryPath = sys.argv[0].split('tools/testing/kunit/')[0] 40 41class KunitStatus(Enum): 42 SUCCESS = auto() 43 CONFIG_FAILURE = auto() 44 BUILD_FAILURE = auto() --- 64 unchanged lines hidden (view full) --- 109 test_end - test_start) 110 111def parse_tests(request: KunitParseRequest) -> KunitResult: 112 parse_start = time.time() 113 114 test_result = kunit_parser.TestResult(kunit_parser.TestStatus.SUCCESS, 115 [], 116 'Tests not Parsed.') |
117 |
|
116 if request.raw_output: 117 kunit_parser.raw_output(request.input_data) 118 else: 119 test_result = kunit_parser.parse_run_tests(request.input_data) 120 parse_end = time.time() 121 | 118 if request.raw_output: 119 kunit_parser.raw_output(request.input_data) 120 else: 121 test_result = kunit_parser.parse_run_tests(request.input_data) 122 parse_end = time.time() 123 |
124 if request.json: 125 json_obj = kunit_json.get_json_result( 126 test_result=test_result, 127 def_config='kunit_defconfig', 128 build_dir=request.build_dir, 129 json_path=request.json) 130 if request.json == 'stdout': 131 print(json_obj) 132 |
|
122 if test_result.status != kunit_parser.TestStatus.SUCCESS: 123 return KunitResult(KunitStatus.TEST_FAILURE, test_result, 124 parse_end - parse_start) 125 126 return KunitResult(KunitStatus.SUCCESS, test_result, 127 parse_end - parse_start) 128 129 --- 16 unchanged lines hidden (view full) --- 146 147 exec_request = KunitExecRequest(request.timeout, request.build_dir, 148 request.alltests) 149 exec_result = exec_tests(linux, exec_request) 150 if exec_result.status != KunitStatus.SUCCESS: 151 return exec_result 152 153 parse_request = KunitParseRequest(request.raw_output, | 133 if test_result.status != kunit_parser.TestStatus.SUCCESS: 134 return KunitResult(KunitStatus.TEST_FAILURE, test_result, 135 parse_end - parse_start) 136 137 return KunitResult(KunitStatus.SUCCESS, test_result, 138 parse_end - parse_start) 139 140 --- 16 unchanged lines hidden (view full) --- 157 158 exec_request = KunitExecRequest(request.timeout, request.build_dir, 159 request.alltests) 160 exec_result = exec_tests(linux, exec_request) 161 if exec_result.status != KunitStatus.SUCCESS: 162 return exec_result 163 164 parse_request = KunitParseRequest(request.raw_output, |
154 exec_result.result) | 165 exec_result.result, 166 request.build_dir, 167 request.json) |
155 parse_result = parse_tests(parse_request) 156 157 run_end = time.time() 158 159 kunit_parser.print_with_timestamp(( 160 'Elapsed time: %.3fs total, %.3fs configuring, %.3fs ' + 161 'building, %.3fs running\n') % ( 162 run_end - run_start, --- 27 unchanged lines hidden (view full) --- 190 'tests.', 191 type=int, 192 default=300, 193 metavar='timeout') 194 195def add_parse_opts(parser): 196 parser.add_argument('--raw_output', help='don\'t format output from kernel', 197 action='store_true') | 168 parse_result = parse_tests(parse_request) 169 170 run_end = time.time() 171 172 kunit_parser.print_with_timestamp(( 173 'Elapsed time: %.3fs total, %.3fs configuring, %.3fs ' + 174 'building, %.3fs running\n') % ( 175 run_end - run_start, --- 27 unchanged lines hidden (view full) --- 203 'tests.', 204 type=int, 205 default=300, 206 metavar='timeout') 207 208def add_parse_opts(parser): 209 parser.add_argument('--raw_output', help='don\'t format output from kernel', 210 action='store_true') |
211 parser.add_argument('--json', 212 nargs='?', 213 help='Stores test results in a JSON, and either ' 214 'prints to stdout or saves to file if a ' 215 'filename is specified', 216 type=str, const='stdout', default=None) |
|
198 | 217 |
199 | |
200def main(argv, linux=None): 201 parser = argparse.ArgumentParser( 202 description='Helps writing and running KUnit tests.') 203 subparser = parser.add_subparsers(dest='subcommand') 204 205 # The 'run' command will config, build, exec, and parse in one go. 206 run_parser = subparser.add_parser('run', help='Runs KUnit tests.') 207 add_common_opts(run_parser) --- 40 unchanged lines hidden (view full) --- 248 if not linux: 249 linux = kunit_kernel.LinuxSourceTree() 250 251 request = KunitRequest(cli_args.raw_output, 252 cli_args.timeout, 253 cli_args.jobs, 254 cli_args.build_dir, 255 cli_args.alltests, | 218def main(argv, linux=None): 219 parser = argparse.ArgumentParser( 220 description='Helps writing and running KUnit tests.') 221 subparser = parser.add_subparsers(dest='subcommand') 222 223 # The 'run' command will config, build, exec, and parse in one go. 224 run_parser = subparser.add_parser('run', help='Runs KUnit tests.') 225 add_common_opts(run_parser) --- 40 unchanged lines hidden (view full) --- 266 if not linux: 267 linux = kunit_kernel.LinuxSourceTree() 268 269 request = KunitRequest(cli_args.raw_output, 270 cli_args.timeout, 271 cli_args.jobs, 272 cli_args.build_dir, 273 cli_args.alltests, |
274 cli_args.json, |
|
256 cli_args.make_options) 257 result = run_tests(linux, request) 258 if result.status != KunitStatus.SUCCESS: 259 sys.exit(1) 260 elif cli_args.subcommand == 'config': 261 if cli_args.build_dir: 262 if not os.path.exists(cli_args.build_dir): 263 os.mkdir(cli_args.build_dir) --- 28 unchanged lines hidden (view full) --- 292 if not linux: 293 linux = kunit_kernel.LinuxSourceTree() 294 295 exec_request = KunitExecRequest(cli_args.timeout, 296 cli_args.build_dir, 297 cli_args.alltests) 298 exec_result = exec_tests(linux, exec_request) 299 parse_request = KunitParseRequest(cli_args.raw_output, | 275 cli_args.make_options) 276 result = run_tests(linux, request) 277 if result.status != KunitStatus.SUCCESS: 278 sys.exit(1) 279 elif cli_args.subcommand == 'config': 280 if cli_args.build_dir: 281 if not os.path.exists(cli_args.build_dir): 282 os.mkdir(cli_args.build_dir) --- 28 unchanged lines hidden (view full) --- 311 if not linux: 312 linux = kunit_kernel.LinuxSourceTree() 313 314 exec_request = KunitExecRequest(cli_args.timeout, 315 cli_args.build_dir, 316 cli_args.alltests) 317 exec_result = exec_tests(linux, exec_request) 318 parse_request = KunitParseRequest(cli_args.raw_output, |
300 exec_result.result) | 319 exec_result.result, 320 cli_args.build_dir, 321 cli_args.json) |
301 result = parse_tests(parse_request) 302 kunit_parser.print_with_timestamp(( 303 'Elapsed time: %.3fs\n') % ( 304 exec_result.elapsed_time)) 305 if result.status != KunitStatus.SUCCESS: 306 sys.exit(1) 307 elif cli_args.subcommand == 'parse': 308 if cli_args.file == None: 309 kunit_output = sys.stdin 310 else: 311 with open(cli_args.file, 'r') as f: 312 kunit_output = f.read().splitlines() 313 request = KunitParseRequest(cli_args.raw_output, | 322 result = parse_tests(parse_request) 323 kunit_parser.print_with_timestamp(( 324 'Elapsed time: %.3fs\n') % ( 325 exec_result.elapsed_time)) 326 if result.status != KunitStatus.SUCCESS: 327 sys.exit(1) 328 elif cli_args.subcommand == 'parse': 329 if cli_args.file == None: 330 kunit_output = sys.stdin 331 else: 332 with open(cli_args.file, 'r') as f: 333 kunit_output = f.read().splitlines() 334 request = KunitParseRequest(cli_args.raw_output, |
314 kunit_output) | 335 kunit_output, 336 cli_args.build_dir, 337 cli_args.json) |
315 result = parse_tests(request) 316 if result.status != KunitStatus.SUCCESS: 317 sys.exit(1) 318 else: 319 parser.print_help() 320 321if __name__ == '__main__': 322 main(sys.argv[1:]) | 338 result = parse_tests(request) 339 if result.status != KunitStatus.SUCCESS: 340 sys.exit(1) 341 else: 342 parser.print_help() 343 344if __name__ == '__main__': 345 main(sys.argv[1:]) |