2020-08-11 14:27:56 -07:00
# 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>
import json
import os
import kunit_parser
2021-10-11 14:50:37 -07:00
from kunit_parser import Test , TestResult , TestStatus
from typing import Any , Dict , Optional
JsonObj = Dict [ str , Any ]
def _get_group_json ( test : Test , def_config : str ,
build_dir : Optional [ str ] ) - > 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 )
sub_groups . append ( sub_group )
else :
test_case = { " name " : subtest . name , " status " : " FAIL " }
if subtest . status == TestStatus . SUCCESS :
2020-08-11 14:27:56 -07:00
test_case [ " status " ] = " PASS "
2021-10-08 16:24:21 -07:00
elif subtest . status == TestStatus . SKIPPED :
test_case [ " status " ] = " SKIP "
2021-10-11 14:50:37 -07:00
elif subtest . status == TestStatus . TEST_CRASHED :
2020-08-11 14:27:56 -07:00
test_case [ " status " ] = " ERROR "
test_cases . append ( test_case )
2021-10-11 14:50:37 -07:00
2020-08-11 14:27:56 -07:00
test_group = {
2021-10-11 14:50:37 -07:00
" name " : test . name ,
2020-08-11 14:27:56 -07:00
" arch " : " UM " ,
" defconfig " : def_config ,
" build_environment " : build_dir ,
" sub_groups " : sub_groups ,
2021-10-11 14:50:37 -07:00
" test_cases " : test_cases ,
2020-08-11 14:27:56 -07:00
" lab_name " : None ,
" kernel " : None ,
" job " : None ,
" git_branch " : " kselftest " ,
}
2021-10-11 14:50:37 -07:00
return test_group
def get_json_result ( test_result : TestResult , def_config : str ,
build_dir : Optional [ str ] , json_path : str ) - > str :
test_group = _get_group_json ( test_result . test , def_config , build_dir )
test_group [ " name " ] = " KUnit Test Group "
2020-08-11 14:27:56 -07:00
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