1*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun# 3*4882a593Smuzhiyun# Generates JSON from KUnit results according to 4*4882a593Smuzhiyun# KernelCI spec: https://github.com/kernelci/kernelci-doc/wiki/Test-API 5*4882a593Smuzhiyun# 6*4882a593Smuzhiyun# Copyright (C) 2020, Google LLC. 7*4882a593Smuzhiyun# Author: Heidi Fahim <heidifahim@google.com> 8*4882a593Smuzhiyun 9*4882a593Smuzhiyunimport json 10*4882a593Smuzhiyunimport os 11*4882a593Smuzhiyun 12*4882a593Smuzhiyunimport kunit_parser 13*4882a593Smuzhiyun 14*4882a593Smuzhiyunfrom kunit_parser import TestStatus 15*4882a593Smuzhiyun 16*4882a593Smuzhiyundef get_json_result(test_result, def_config, build_dir, json_path): 17*4882a593Smuzhiyun sub_groups = [] 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun # Each test suite is mapped to a KernelCI sub_group 20*4882a593Smuzhiyun for test_suite in test_result.suites: 21*4882a593Smuzhiyun sub_group = { 22*4882a593Smuzhiyun "name": test_suite.name, 23*4882a593Smuzhiyun "arch": "UM", 24*4882a593Smuzhiyun "defconfig": def_config, 25*4882a593Smuzhiyun "build_environment": build_dir, 26*4882a593Smuzhiyun "test_cases": [], 27*4882a593Smuzhiyun "lab_name": None, 28*4882a593Smuzhiyun "kernel": None, 29*4882a593Smuzhiyun "job": None, 30*4882a593Smuzhiyun "git_branch": "kselftest", 31*4882a593Smuzhiyun } 32*4882a593Smuzhiyun test_cases = [] 33*4882a593Smuzhiyun # TODO: Add attachments attribute in test_case with detailed 34*4882a593Smuzhiyun # failure message, see https://api.kernelci.org/schema-test-case.html#get 35*4882a593Smuzhiyun for case in test_suite.cases: 36*4882a593Smuzhiyun test_case = {"name": case.name, "status": "FAIL"} 37*4882a593Smuzhiyun if case.status == TestStatus.SUCCESS: 38*4882a593Smuzhiyun test_case["status"] = "PASS" 39*4882a593Smuzhiyun elif case.status == TestStatus.TEST_CRASHED: 40*4882a593Smuzhiyun test_case["status"] = "ERROR" 41*4882a593Smuzhiyun test_cases.append(test_case) 42*4882a593Smuzhiyun sub_group["test_cases"] = test_cases 43*4882a593Smuzhiyun sub_groups.append(sub_group) 44*4882a593Smuzhiyun test_group = { 45*4882a593Smuzhiyun "name": "KUnit Test Group", 46*4882a593Smuzhiyun "arch": "UM", 47*4882a593Smuzhiyun "defconfig": def_config, 48*4882a593Smuzhiyun "build_environment": build_dir, 49*4882a593Smuzhiyun "sub_groups": sub_groups, 50*4882a593Smuzhiyun "lab_name": None, 51*4882a593Smuzhiyun "kernel": None, 52*4882a593Smuzhiyun "job": None, 53*4882a593Smuzhiyun "git_branch": "kselftest", 54*4882a593Smuzhiyun } 55*4882a593Smuzhiyun json_obj = json.dumps(test_group, indent=4) 56*4882a593Smuzhiyun if json_path != 'stdout': 57*4882a593Smuzhiyun with open(json_path, 'w') as result_path: 58*4882a593Smuzhiyun result_path.write(json_obj) 59*4882a593Smuzhiyun root = __file__.split('tools/testing/kunit/')[0] 60*4882a593Smuzhiyun kunit_parser.print_with_timestamp( 61*4882a593Smuzhiyun "Test results stored in %s" % 62*4882a593Smuzhiyun os.path.join(root, result_path.name)) 63*4882a593Smuzhiyun return json_obj 64