mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-05 14:02:21 +00:00
103 lines
3.4 KiB
Python
Executable File
103 lines
3.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import logging
|
|
import argparse
|
|
import csv
|
|
|
|
OK_SIGN = "OK ]"
|
|
FAILED_SIGN = "FAILED ]"
|
|
SEGFAULT = "Segmentation fault"
|
|
SIGNAL = "received signal SIG"
|
|
PASSED = "PASSED"
|
|
|
|
|
|
def get_test_name(line):
|
|
elements = reversed(line.split(" "))
|
|
for element in elements:
|
|
if "(" not in element and ")" not in element:
|
|
return element
|
|
raise Exception("No test name in line '{}'".format(line))
|
|
|
|
|
|
def process_result(result_folder):
|
|
summary = []
|
|
total_counter = 0
|
|
failed_counter = 0
|
|
result_log_path = "{}/test_result.txt".format(result_folder)
|
|
if not os.path.exists(result_log_path):
|
|
logging.info("No output log on path %s", result_log_path)
|
|
return "exception", "No output log", []
|
|
|
|
status = "success"
|
|
description = ""
|
|
passed = False
|
|
with open(result_log_path, "r") as test_result:
|
|
for line in test_result:
|
|
if OK_SIGN in line:
|
|
logging.info("Found ok line: '%s'", line)
|
|
test_name = get_test_name(line.strip())
|
|
logging.info("Test name: '%s'", test_name)
|
|
summary.append((test_name, "OK"))
|
|
total_counter += 1
|
|
elif FAILED_SIGN in line and "listed below" not in line and "ms)" in line:
|
|
logging.info("Found fail line: '%s'", line)
|
|
test_name = get_test_name(line.strip())
|
|
logging.info("Test name: '%s'", test_name)
|
|
summary.append((test_name, "FAIL"))
|
|
total_counter += 1
|
|
failed_counter += 1
|
|
elif SEGFAULT in line:
|
|
logging.info("Found segfault line: '%s'", line)
|
|
status = "failure"
|
|
description += "Segmentation fault. "
|
|
break
|
|
elif SIGNAL in line:
|
|
logging.info("Received signal line: '%s'", line)
|
|
status = "failure"
|
|
description += "Exit on signal. "
|
|
break
|
|
elif PASSED in line:
|
|
logging.info("PASSED record found: '%s'", line)
|
|
passed = True
|
|
|
|
if not passed:
|
|
status = "failure"
|
|
description += "PASSED record not found. "
|
|
|
|
if failed_counter != 0:
|
|
status = "failure"
|
|
|
|
if not description:
|
|
description += "fail: {}, passed: {}".format(
|
|
failed_counter, total_counter - failed_counter
|
|
)
|
|
|
|
return status, description, summary
|
|
|
|
|
|
def write_results(results_file, status_file, results, status):
|
|
with open(results_file, "w") as f:
|
|
out = csv.writer(f, delimiter="\t")
|
|
out.writerows(results)
|
|
with open(status_file, "w") as f:
|
|
out = csv.writer(f, delimiter="\t")
|
|
out.writerow(status)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(message)s")
|
|
parser = argparse.ArgumentParser(
|
|
description="ClickHouse script for parsing results of unit tests"
|
|
)
|
|
parser.add_argument("--in-results-dir", default="/test_output/")
|
|
parser.add_argument("--out-results-file", default="/test_output/test_results.tsv")
|
|
parser.add_argument("--out-status-file", default="/test_output/check_status.tsv")
|
|
args = parser.parse_args()
|
|
|
|
state, description, test_results = process_result(args.in_results_dir)
|
|
logging.info("Result parsed")
|
|
status = (state, description)
|
|
write_results(args.out_results_file, args.out_status_file, test_results, status)
|
|
logging.info("Result written")
|