diff options
Diffstat (limited to 'tools/testing/kunit/kunit.py')
| -rwxr-xr-x | tools/testing/kunit/kunit.py | 70 | 
1 files changed, 65 insertions, 5 deletions
diff --git a/tools/testing/kunit/kunit.py b/tools/testing/kunit/kunit.py index 3905c43369c3..bc74088c458a 100755 --- a/tools/testing/kunit/kunit.py +++ b/tools/testing/kunit/kunit.py @@ -55,8 +55,12 @@ class KunitExecRequest(KunitParseRequest):  	build_dir: str  	timeout: int  	filter_glob: str +	filter: str +	filter_action: Optional[str]  	kernel_args: Optional[List[str]]  	run_isolated: Optional[str] +	list_tests: bool +	list_tests_attr: bool  @dataclass  class KunitRequest(KunitExecRequest, KunitBuildRequest): @@ -102,19 +106,41 @@ def config_and_build_tests(linux: kunit_kernel.LinuxSourceTree,  def _list_tests(linux: kunit_kernel.LinuxSourceTree, request: KunitExecRequest) -> List[str]:  	args = ['kunit.action=list'] + +	if request.kernel_args: +		args.extend(request.kernel_args) + +	output = linux.run_kernel(args=args, +			   timeout=request.timeout, +			   filter_glob=request.filter_glob, +			   filter=request.filter, +			   filter_action=request.filter_action, +			   build_dir=request.build_dir) +	lines = kunit_parser.extract_tap_lines(output) +	# Hack! Drop the dummy TAP version header that the executor prints out. +	lines.pop() + +	# Filter out any extraneous non-test output that might have gotten mixed in. +	return [l for l in output if re.match(r'^[^\s.]+\.[^\s.]+$', l)] + +def _list_tests_attr(linux: kunit_kernel.LinuxSourceTree, request: KunitExecRequest) -> Iterable[str]: +	args = ['kunit.action=list_attr'] +  	if request.kernel_args:  		args.extend(request.kernel_args)  	output = linux.run_kernel(args=args,  			   timeout=request.timeout,  			   filter_glob=request.filter_glob, +			   filter=request.filter, +			   filter_action=request.filter_action,  			   build_dir=request.build_dir)  	lines = kunit_parser.extract_tap_lines(output)  	# Hack! Drop the dummy TAP version header that the executor prints out.  	lines.pop()  	# Filter out any extraneous non-test output that might have gotten mixed in. -	return [l for l in lines if re.match(r'^[^\s.]+\.[^\s.]+$', l)] +	return lines  def _suites_from_test_list(tests: List[str]) -> List[str]:  	"""Extracts all the suites from an ordered list of tests.""" @@ -128,10 +154,18 @@ def _suites_from_test_list(tests: List[str]) -> List[str]:  			suites.append(suite)  	return suites - -  def exec_tests(linux: kunit_kernel.LinuxSourceTree, request: KunitExecRequest) -> KunitResult:  	filter_globs = [request.filter_glob] +	if request.list_tests: +		output = _list_tests(linux, request) +		for line in output: +			print(line.rstrip()) +		return KunitResult(status=KunitStatus.SUCCESS, elapsed_time=0.0) +	if request.list_tests_attr: +		attr_output = _list_tests_attr(linux, request) +		for line in attr_output: +			print(line.rstrip()) +		return KunitResult(status=KunitStatus.SUCCESS, elapsed_time=0.0)  	if request.run_isolated:  		tests = _list_tests(linux, request)  		if request.run_isolated == 'test': @@ -155,6 +189,8 @@ def exec_tests(linux: kunit_kernel.LinuxSourceTree, request: KunitExecRequest) -  			args=request.kernel_args,  			timeout=request.timeout,  			filter_glob=filter_glob, +			filter=request.filter, +			filter_action=request.filter_action,  			build_dir=request.build_dir)  		_, test_result = parse_tests(request, metadata, run_result) @@ -341,6 +377,16 @@ def add_exec_opts(parser: argparse.ArgumentParser) -> None:  			    nargs='?',  			    default='',  			    metavar='filter_glob') +	parser.add_argument('--filter', +			    help='Filter KUnit tests with attributes, ' +			    'e.g. module=example or speed>slow', +			    type=str, +				default='') +	parser.add_argument('--filter_action', +			    help='If set to skip, filtered tests will be skipped, ' +				'e.g. --filter_action=skip. Otherwise they will not run.', +			    type=str, +				choices=['skip'])  	parser.add_argument('--kernel_args',  			    help='Kernel command-line parameters. Maybe be repeated',  			     action='append', metavar='') @@ -350,6 +396,12 @@ def add_exec_opts(parser: argparse.ArgumentParser) -> None:  			    'what ran before it.',  			    type=str,  			    choices=['suite', 'test']) +	parser.add_argument('--list_tests', help='If set, list all tests that will be ' +			    'run.', +			    action='store_true') +	parser.add_argument('--list_tests_attr', help='If set, list all tests and test ' +			    'attributes.', +			    action='store_true')  def add_parse_opts(parser: argparse.ArgumentParser) -> None:  	parser.add_argument('--raw_output', help='If set don\'t parse output from kernel. ' @@ -398,8 +450,12 @@ def run_handler(cli_args: argparse.Namespace) -> None:  					json=cli_args.json,  					timeout=cli_args.timeout,  					filter_glob=cli_args.filter_glob, +					filter=cli_args.filter, +					filter_action=cli_args.filter_action,  					kernel_args=cli_args.kernel_args, -					run_isolated=cli_args.run_isolated) +					run_isolated=cli_args.run_isolated, +					list_tests=cli_args.list_tests, +					list_tests_attr=cli_args.list_tests_attr)  	result = run_tests(linux, request)  	if result.status != KunitStatus.SUCCESS:  		sys.exit(1) @@ -441,8 +497,12 @@ def exec_handler(cli_args: argparse.Namespace) -> None:  					json=cli_args.json,  					timeout=cli_args.timeout,  					filter_glob=cli_args.filter_glob, +					filter=cli_args.filter, +					filter_action=cli_args.filter_action,  					kernel_args=cli_args.kernel_args, -					run_isolated=cli_args.run_isolated) +					run_isolated=cli_args.run_isolated, +					list_tests=cli_args.list_tests, +					list_tests_attr=cli_args.list_tests_attr)  	result = exec_tests(linux, exec_request)  	stdout.print_with_timestamp((  		'Elapsed time: %.3fs\n') % (result.elapsed_time))  |