memgraph/tests/apollo_runs.py
Matej Ferencevic cf648a8453 Optimize Apollo build process
Reviewers: buda, teon.banek

Reviewed By: teon.banek

Subscribers: pullbot

Differential Revision: https://phabricator.memgraph.io/D1394
2018-05-16 14:52:27 +02:00

70 lines
2.2 KiB
Python
Executable File

#!/usr/bin/env python3
import json
import os
import re
import subprocess
# paths
SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
WORKSPACE_DIR = os.path.normpath(os.path.join(SCRIPT_DIR, "..", ".."))
TESTS_DIR_REL = os.path.join("..", "build_debug", "tests")
TESTS_DIR = os.path.normpath(os.path.join(SCRIPT_DIR, TESTS_DIR_REL))
# generation mode
mode = "release"
if os.environ.get("PROJECT", "") == "mg-master-diff":
mode = "diff"
# ctest tests
ctest_output = subprocess.run(["ctest", "-N"], cwd=TESTS_DIR, check=True,
stdout=subprocess.PIPE).stdout.decode("utf-8")
tests = []
# test ordering: first unit, then concurrent, then everything else
CTEST_ORDER = {"unit": 0, "concurrent": 1}
CTEST_DELIMITER = "__"
for row in ctest_output.split("\n"):
# Filter rows only containing tests.
if not re.match("^\s*Test\s+#", row): continue
test_name = row.split(":")[1].strip()
name = test_name.replace("memgraph" + CTEST_DELIMITER, "")
path = os.path.join(TESTS_DIR_REL, name.replace(CTEST_DELIMITER, "/", 1))
order = CTEST_ORDER.get(name.split(CTEST_DELIMITER)[0], len(CTEST_ORDER))
tests.append((order, name, path))
tests.sort()
runs = []
for test in tests:
order, name, path = test
dirname, basename = os.path.split(path)
files = [basename]
# skip benchmark tests on diffs
if name.startswith("benchmark") and mode == "diff":
continue
# larger timeout for benchmark and concurrent tests
prefix = ""
if name.startswith("benchmark") or name.startswith("concurrent"):
prefix = "TIMEOUT=600 "
outfile_paths = []
if name.startswith("unit"):
dirname = dirname.replace("/build_debug/", "/build_coverage/")
curdir_abs = os.path.normpath(os.path.join(SCRIPT_DIR, dirname))
curdir_rel = os.path.relpath(curdir_abs, WORKSPACE_DIR)
outfile_paths.append("\./" + curdir_rel.replace(".", "\\.") + "/default\\.profraw")
elif name.startswith("benchmark"):
dirname = dirname.replace("/build_debug/", "/build_release/")
runs.append({
"name": name,
"cd": dirname,
"commands": prefix + "./" + basename,
"infiles": files,
"outfile_paths": outfile_paths,
})
print(json.dumps(runs, indent=4, sort_keys=True))