@@ -25,12 +25,14 @@ def summarize_results(results):
25
25
total_passed = len (results ['Passed' ])
26
26
total_skipped = len (results ['Skipped' ])
27
27
total_failed = len (results ['Failed' ])
28
+ total_crashed = total - (total_passed + total_skipped + total_failed )
28
29
29
30
pass_rate_incl_skipped = percent (total_passed , total )
30
31
pass_rate_excl_skipped = percent (total_passed , total - total_skipped )
31
32
32
33
skipped_rate = percent (total_skipped , total )
33
34
failed_rate = percent (total_failed , total )
35
+ crash_rate = percent (total_crashed , total )
34
36
35
37
ljust_param = len (str (total ))
36
38
@@ -40,18 +42,20 @@ def summarize_results(results):
40
42
Passed [{ str (total_passed ).ljust (ljust_param )} ] ({ pass_rate_incl_skipped } %) - ({ pass_rate_excl_skipped } % with skipped tests excluded)
41
43
Skipped [{ str (total_skipped ).ljust (ljust_param )} ] ({ skipped_rate } %)
42
44
Failed [{ str (total_failed ).ljust (ljust_param )} ] ({ failed_rate } %)
45
+ Crashed [{ str (total_crashed ).ljust (ljust_param )} ] ({ crash_rate } %)
43
46
"""
44
47
)
45
48
46
49
def parse_results (results ):
47
- parsed_results = {"Passed" : {}, "Skipped" :{}, "Failed" : {}, 'Total' :0 , 'Success' :True }
50
+ parsed_results = {"Passed" : {}, "Skipped" :{}, "Failed" : {}, 'Crashed' : {}, ' Total' :0 , 'Success' :True }
48
51
for _ , result in results .items ():
49
- if result is None :
52
+ if result [ 'actual' ] is None :
50
53
parsed_results ['Success' ] = False
54
+ parsed_results ['Total' ] += result ['expected' ]['tests' ]
51
55
continue
52
56
53
- parsed_results ['Total' ] += result ['tests' ]
54
- for testsuite in result .get ('testsuites' ):
57
+ parsed_results ['Total' ] += result ['actual' ][ ' tests' ]
58
+ for testsuite in result [ 'actual' ] .get ('testsuites' ):
55
59
for test in testsuite .get ('testsuite' ):
56
60
test_name = f"{ testsuite ['name' ]} .{ test ['name' ]} "
57
61
test_time = test ['time' ]
@@ -63,14 +67,29 @@ def parse_results(results):
63
67
parsed_results ['Passed' ][test_name ] = {'time' : test_time }
64
68
return parsed_results
65
69
66
-
67
70
def run (args ):
68
71
results = {}
69
72
70
73
tmp_results_file = f"{ args .ctest_path } /{ TMP_RESULTS_FILE } "
71
74
env = os .environ .copy ()
72
75
env ['GTEST_OUTPUT' ] = f"json:{ tmp_results_file } "
73
76
77
+ ## try and list all the available tests
78
+ for suite in CTS_TEST_SUITES :
79
+ results [suite ] = {}
80
+ test_executable = f"{ args .ctest_path } /bin/test-{ suite } "
81
+ process = Popen ([test_executable , "--gtest_list_tests" ], env = env ,
82
+ stdout = DEVNULL if args .quiet else None ,
83
+ stderr = DEVNULL if args .quiet else None )
84
+ process .wait ()
85
+ try :
86
+ with open (tmp_results_file ,'r' ) as test_list :
87
+ all_tests = json .load (test_list )
88
+ results [suite ]['expected' ] = all_tests
89
+ os .remove (tmp_results_file )
90
+ except FileNotFoundError :
91
+ print (f"Could not discover tests for { suite } " )
92
+
74
93
for suite in CTS_TEST_SUITES :
75
94
ctest_path = f"{ args .ctest_path } /test/conformance/{ suite } "
76
95
process = Popen (['ctest' ,ctest_path ], env = env , cwd = ctest_path ,
@@ -81,10 +100,10 @@ def run(args):
81
100
try :
82
101
with open (tmp_results_file , 'r' ) as results_file :
83
102
json_data = json .load (results_file )
84
- results [suite ] = json_data
103
+ results [suite ][ 'actual' ] = json_data
85
104
os .remove (tmp_results_file )
86
105
except FileNotFoundError :
87
- results [suite ] = None
106
+ results [suite ][ 'actual' ] = None
88
107
print ('\033 [91m' + f"Conformance test suite '{ suite } ' : likely crashed!" + '\033 [0m' )
89
108
90
109
return results
0 commit comments