73 lines · 1.9 KB · Python
RawDownload
# SPDX-License-Identifier: GPL-2.0## Generates JSON from KUnit results according to# KernelCI spec: https://github.com/kernelci/kernelci-doc/wiki/Test-API## Copyright (C) 2020, Google LLC.# Author: Heidi Fahim <heidifahim@google.com> from dataclasses import dataclassimport jsonfrom typing import Any, Dict from kunit_parser import Test, TestStatus @dataclassclass Metadata:	"""Stores metadata about this run to include in get_json_result()."""	arch: str = ''	def_config: str = ''	build_dir: str = '' JsonObj = Dict[str, Any] _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 subtest.subtests:			sub_group = _get_group_json(subtest, common_fields)			sub_groups.append(sub_group)			continue		status = _status_map.get(subtest.status, "FAIL")		test_cases.append({"name": subtest.name, "status": status}) 	test_counts = test.counts	counts_json = {		"tests": test_counts.total(),		"passed": test_counts.passed,		"failed": test_counts.failed,		"crashed": test_counts.crashed,		"skipped": test_counts.skipped,		"errors": test_counts.errors,	}	test_group = {		"name": test.name,		"sub_groups": sub_groups,		"test_cases": test_cases,		"misc": counts_json	}	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",	} 	test_group = _get_group_json(test, common_fields)	test_group["name"] = "KUnit Test Group"	return json.dumps(test_group, indent=4)