carrot efee1712aa
KerryGoldModel, AGNOS12.3, ButtonMode3, autoDetectLFA2, (#181)
* fix.. speed_limit error...

* draw tpms settings.

* fix.. traffic light stopping only..

* fix.. waze cam

* fix.. waze...

* add setting (Enable comma connect )

* auto detect LFA2

* fix.. cruisespeed1

* vff2 driving model.

* fix..

* agnos 12.3

* fix..

* ff

* ff

* test

* ff

* fix.. drawTurnInfo..

* Update drive_helpers.py

* fix..

support eng  voice

eng sounds

fix settings... english

fix.. mph..

fix.. roadlimit speed bug..

* new vff model.. 250608

* fix soundd..

* fix safe exit speed..

* fix.. sounds.

* fix.. radar timeStep..

* KerryGold model

* Update drive_helpers.py

* fix.. model.

* fix..

* fix..

* Revert "fix.."

This reverts commit b09ec459afb855c533d47fd7e8a1a6b1a09466e7.

* Revert "fix.."

This reverts commit 290bec6b83a4554ca232d531a911edccf94a2156.

* fix esim

* add more acc table. 10kph

* kg update..

* fix cruisebutton mode3

* test atc..cond.

* fix.. canfd

* fix.. angle control limit
2025-06-13 15:59:36 +09:00

73 lines
2.2 KiB
Python

import os, random, subprocess, shlex, datetime, time, signal
from extra.hcqfuzz.tools import create_report, on_start_run, collect_tests, init_log, log
from extra.hcqfuzz.spec import AMSpec
def run_test(dev, test):
on_start_run(dev, test)
dev_env = dev.get_exec_state()
test_env, cmd, timeout = test.get_exec_state()
env = {**dev_env, **test_env}
if isinstance(cmd, str): cmd = shlex.split(cmd)
assert isinstance(cmd, list), "cmd must be list or str"
if env is None: env = os.environ.copy()
else:
env = {k: str(v) for k, v in env.items()}
env = {**os.environ, **env}
start_ts = datetime.datetime.now()
t0 = time.perf_counter()
log(f"[{start_ts:%Y-%m-%d %H:%M:%S}] running: {test.name()}: {' '.join(cmd)}", end="", flush=True)
proc = subprocess.Popen(cmd, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
try:
stdout, stderr = proc.communicate(timeout=timeout)
ret = proc.returncode
except KeyboardInterrupt:
print("\nExiting...", flush=True)
proc.send_signal(signal.SIGINT)
try: stdout, stderr = proc.communicate(timeout=5)
except subprocess.TimeoutExpired:
proc.kill()
stdout, stderr = proc.communicate()
raise
except subprocess.TimeoutExpired:
cur_time = datetime.datetime.now()
log(f"\r[{cur_time:%Y-%m-%d %H:%M:%S}] {test.name()} send SIGKILL", end="", flush=True)
proc.kill()
stdout, stderr = proc.communicate()
ret = -9
finish_time = datetime.datetime.now()
elapsed = time.perf_counter() - t0
if ret != 0:
log(f"\r[{finish_time:%Y-%m-%d %H:%M:%S}] {test.name()} failed with {ret} after {elapsed:.1f}s", flush=True)
create_report(dev, test, ret, stdout, stderr)
else:
log(f"\r[{finish_time:%Y-%m-%d %H:%M:%S}] {test.name()} exited {ret} after {elapsed:.1f}s", flush=True)
if __name__ == "__main__":
init_log()
device_name = "AM"
dev = AMSpec()
start_seed = os.environ.get("SEED", 3332)
random.seed(start_seed)
log(f"Starting with seed {start_seed}")
test_set = collect_tests()
log(f"Found {len(test_set)} tests:")
for test in test_set: log(f" - {test.name()}")
while True:
seed = random.randint(0, 2**31)
test = random.choice(test_set)
dev.prepare(seed)
test.prepare(dev, seed)
run_test(dev, test)