Skip to content

Commit 26b9d82

Browse files
author
Petr Vesely
committed
[UR] List available tests and track crashes
1 parent 790384e commit 26b9d82

File tree

1 file changed

+26
-7
lines changed

1 file changed

+26
-7
lines changed

scripts/ctest_parser.py

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,14 @@ def summarize_results(results):
2525
total_passed = len(results['Passed'])
2626
total_skipped = len(results['Skipped'])
2727
total_failed = len(results['Failed'])
28+
total_crashed = total - (total_passed + total_skipped + total_failed)
2829

2930
pass_rate_incl_skipped = percent(total_passed, total)
3031
pass_rate_excl_skipped = percent(total_passed, total - total_skipped)
3132

3233
skipped_rate = percent(total_skipped, total)
3334
failed_rate = percent(total_failed, total)
35+
crash_rate = percent(total_crashed, total)
3436

3537
ljust_param = len(str(total))
3638

@@ -40,18 +42,20 @@ def summarize_results(results):
4042
Passed [{str(total_passed).ljust(ljust_param)}] ({pass_rate_incl_skipped}%) - ({pass_rate_excl_skipped}% with skipped tests excluded)
4143
Skipped [{str(total_skipped).ljust(ljust_param)}] ({skipped_rate}%)
4244
Failed [{str(total_failed).ljust(ljust_param)}] ({failed_rate}%)
45+
Crashed [{str(total_crashed).ljust(ljust_param)}] ({crash_rate}%)
4346
"""
4447
)
4548

4649
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}
4851
for _, result in results.items():
49-
if result is None:
52+
if result['actual'] is None:
5053
parsed_results['Success'] = False
54+
parsed_results['Total'] += result['expected']['tests']
5155
continue
5256

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'):
5559
for test in testsuite.get('testsuite'):
5660
test_name = f"{testsuite['name']}.{test['name']}"
5761
test_time = test['time']
@@ -63,14 +67,29 @@ def parse_results(results):
6367
parsed_results['Passed'][test_name] = {'time': test_time}
6468
return parsed_results
6569

66-
6770
def run(args):
6871
results = {}
6972

7073
tmp_results_file = f"{args.ctest_path}/{TMP_RESULTS_FILE}"
7174
env = os.environ.copy()
7275
env['GTEST_OUTPUT'] = f"json:{tmp_results_file}"
7376

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+
7493
for suite in CTS_TEST_SUITES:
7594
ctest_path = f"{args.ctest_path}/test/conformance/{suite}"
7695
process = Popen(['ctest',ctest_path], env=env, cwd=ctest_path,
@@ -81,10 +100,10 @@ def run(args):
81100
try:
82101
with open(tmp_results_file, 'r') as results_file:
83102
json_data = json.load(results_file)
84-
results[suite] = json_data
103+
results[suite]['actual'] = json_data
85104
os.remove(tmp_results_file)
86105
except FileNotFoundError:
87-
results[suite] = None
106+
results[suite]['actual'] = None
88107
print('\033[91m' + f"Conformance test suite '{suite}' : likely crashed!" + '\033[0m')
89108

90109
return results

0 commit comments

Comments
 (0)