brintos

brintos / linux-shallow public Read only

0
0
Text · 1.6 KiB · 10ff656 Raw
64 lines · python
1# SPDX-License-Identifier: GPL-2.02#3# Generates JSON from KUnit results according to4# KernelCI spec: https://github.com/kernelci/kernelci-doc/wiki/Test-API5#6# Copyright (C) 2020, Google LLC.7# Author: Heidi Fahim <heidifahim@google.com>8 9from dataclasses import dataclass10import json11from typing import Any, Dict12 13from kunit_parser import Test, TestStatus14 15@dataclass16class Metadata:17	"""Stores metadata about this run to include in get_json_result()."""18	arch: str = ''19	def_config: str = ''20	build_dir: str = ''21 22JsonObj = Dict[str, Any]23 24_status_map: Dict[TestStatus, str] = {25	TestStatus.SUCCESS: "PASS",26	TestStatus.SKIPPED: "SKIP",27	TestStatus.TEST_CRASHED: "ERROR",28}29 30def _get_group_json(test: Test, common_fields: JsonObj) -> JsonObj:31	sub_groups = []  # List[JsonObj]32	test_cases = []  # List[JsonObj]33 34	for subtest in test.subtests:35		if subtest.subtests:36			sub_group = _get_group_json(subtest, common_fields)37			sub_groups.append(sub_group)38			continue39		status = _status_map.get(subtest.status, "FAIL")40		test_cases.append({"name": subtest.name, "status": status})41 42	test_group = {43		"name": test.name,44		"sub_groups": sub_groups,45		"test_cases": test_cases,46	}47	test_group.update(common_fields)48	return test_group49 50def get_json_result(test: Test, metadata: Metadata) -> str:51	common_fields = {52		"arch": metadata.arch,53		"defconfig": metadata.def_config,54		"build_environment": metadata.build_dir,55		"lab_name": None,56		"kernel": None,57		"job": None,58		"git_branch": "kselftest",59	}60 61	test_group = _get_group_json(test, common_fields)62	test_group["name"] = "KUnit Test Group"63	return json.dumps(test_group, indent=4)64