diff options
Diffstat (limited to 'tools/testing/kunit/kunit_json.py')
| -rw-r--r-- | tools/testing/kunit/kunit_json.py | 66 | 
1 files changed, 32 insertions, 34 deletions
diff --git a/tools/testing/kunit/kunit_json.py b/tools/testing/kunit/kunit_json.py index 6862671709bc..10ff65689dd8 100644 --- a/tools/testing/kunit/kunit_json.py +++ b/tools/testing/kunit/kunit_json.py @@ -6,60 +6,58 @@  # Copyright (C) 2020, Google LLC.  # Author: Heidi Fahim <heidifahim@google.com> +from dataclasses import dataclass  import json -import os - -import kunit_parser +from typing import Any, Dict  from kunit_parser import Test, TestStatus -from typing import Any, Dict, Optional + +@dataclass +class Metadata: +	"""Stores metadata about this run to include in get_json_result().""" +	arch: str = '' +	def_config: str = '' +	build_dir: str = ''  JsonObj = Dict[str, Any] -def _get_group_json(test: Test, def_config: str, -		build_dir: Optional[str]) -> JsonObj: +_status_map: Dict[TestStatus, str] = { +	TestStatus.SUCCESS: "PASS", +	TestStatus.SKIPPED: "SKIP", +	TestStatus.TEST_CRASHED: "ERROR", +} + +def _get_group_json(test: Test, common_fields: JsonObj) -> JsonObj:  	sub_groups = []  # List[JsonObj]  	test_cases = []  # List[JsonObj]  	for subtest in test.subtests: -		if len(subtest.subtests): -			sub_group = _get_group_json(subtest, def_config, -				build_dir) +		if subtest.subtests: +			sub_group = _get_group_json(subtest, common_fields)  			sub_groups.append(sub_group) -		else: -			test_case = {"name": subtest.name, "status": "FAIL"} -			if subtest.status == TestStatus.SUCCESS: -				test_case["status"] = "PASS" -			elif subtest.status == TestStatus.SKIPPED: -				test_case["status"] = "SKIP" -			elif subtest.status == TestStatus.TEST_CRASHED: -				test_case["status"] = "ERROR" -			test_cases.append(test_case) +			continue +		status = _status_map.get(subtest.status, "FAIL") +		test_cases.append({"name": subtest.name, "status": status})  	test_group = {  		"name": test.name, -		"arch": "UM", -		"defconfig": def_config, -		"build_environment": build_dir,  		"sub_groups": sub_groups,  		"test_cases": test_cases, +	} +	test_group.update(common_fields) +	return test_group + +def get_json_result(test: Test, metadata: Metadata) -> str: +	common_fields = { +		"arch": metadata.arch, +		"defconfig": metadata.def_config, +		"build_environment": metadata.build_dir,  		"lab_name": None,  		"kernel": None,  		"job": None,  		"git_branch": "kselftest",  	} -	return test_group -def get_json_result(test: Test, def_config: str, -		build_dir: Optional[str], json_path: str) -> str: -	test_group = _get_group_json(test, def_config, build_dir) +	test_group = _get_group_json(test, common_fields)  	test_group["name"] = "KUnit Test Group" -	json_obj = json.dumps(test_group, indent=4) -	if json_path != 'stdout': -		with open(json_path, 'w') as result_path: -			result_path.write(json_obj) -		root = __file__.split('tools/testing/kunit/')[0] -		kunit_parser.print_with_timestamp( -			"Test results stored in %s" % -			os.path.join(root, result_path.name)) -	return json_obj +	return json.dumps(test_group, indent=4)  | 
