77 lines
2.7 KiB
Python
Raw Normal View History

import pickle, datetime, os, tempfile, subprocess, zipfile, importlib.util
from extra.hcqfuzz.spec import TestSpec
from tinygrad.helpers import getenv
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
TEST_DIR = os.path.join(BASE_DIR, "tests")
REPORTS_DIR = os.path.join(BASE_DIR, "reports")
def collect_tests():
run_files = getenv("RUN_FILES", "").split(",")
skip_tests = getenv("SKIP_FILES", "").split(",")
tests = []
for filename in os.listdir(TEST_DIR):
if filename.endswith(".py") and not filename.startswith("__"):
if run_files and filename[:-3] not in run_files: continue
if skip_tests and filename[:-3] in skip_tests: continue
filepath = os.path.join(TEST_DIR, filename)
module_name = f"tests.{filename[:-3]}"
module = importlib.import_module(module_name)
for attr_name in dir(module):
attr = getattr(module, attr_name)
if isinstance(attr, type) and issubclass(attr, TestSpec) and attr is not TestSpec:
tests.append(attr())
return tests
def on_start_run(dev, test):
os.makedirs(REPORTS_DIR, exist_ok=True)
pickle.dump((dev, test), open(f"{REPORTS_DIR}/last_launch.pkl", "wb"))
def create_report(dev, test, result, stdout, stderr):
os.makedirs(REPORTS_DIR, exist_ok=True)
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
report_name = f"{timestamp}_{test.name()}_report"
report_path = os.path.join(REPORTS_DIR, report_name)
os.makedirs(report_path, exist_ok=False)
pickle_path = os.path.join(report_path, "repro.pkl")
with open(pickle_path, "wb") as f: pickle.dump((dev, test), f)
stdout_path = os.path.join(report_path, "stdout.txt")
with open(stdout_path, "w") as f: f.write(stdout)
stderr_path = os.path.join(report_path, "stderr.txt")
with open(stderr_path, "w") as f: f.write(stderr)
dmesg_path = os.path.join(report_path, "dmesg.txt")
dmesg_output = subprocess.check_output(["sudo", "dmesg", "--ctime", "--color=never"], text=True)
with open(dmesg_path, "w") as f: f.write(dmesg_output)
summary_path = os.path.join(report_path, "summary.txt")
with open(summary_path, "w") as f:
f.write(f"Test: {test.name()}\n")
f.write(f"Dev params: {vars(dev)}\n")
f.write(f"Test params: {vars(test)}\n")
f.write(f"Exit Code: {result}\n")
print(f"Crash report saved to {report_path}")
_log_file = None
def init_log():
global _log_file
os.makedirs(REPORTS_DIR, exist_ok=True)
ts = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
name = f"log_{ts}.log"
_log_file = open(f"{REPORTS_DIR}/{name}", "a", buffering=1)
def log(msg="", end="\n", flush=False):
global _log_file
_log_file.write(msg.replace("\r", "\n") + end)
if flush: _log_file.flush()
print(msg + " " * 60, end=end, flush=flush)