| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- # One-off: P3-M3 regression - executor point_id passthrough + claim check.
- import json
- import os
- import sys
- import tempfile
- _SCRIPTS = os.path.dirname(os.path.abspath(__file__))
- sys.path.insert(0, _SCRIPTS)
- import task_executor as te # noqa: E402
- # force local-file mode (no web calls)
- te.requests = None
- tmp = tempfile.mkdtemp()
- captured = {}
- def make_task(tid, params):
- path = os.path.join(tmp, tid + "_task.json")
- with open(path, "w", encoding="utf-8") as f:
- json.dump({"task_id": tid, "task_name": "m3", "parameters": params}, f)
- return {"task_id": tid, "_local_file": path, "parameters": params}
- # ---------------- 1) point_id passthrough (claim succeeds) ----------------
- ex = te.TaskExecutor(task_dir=tmp, enable_mock=True)
- ex.dispatch_task = lambda tid: True # claim ok
- ex.on_complete = lambda tid, res, met: captured.setdefault(tid, res)
- task = make_task("t1", [{"airgap_mm": 1.0, "current_a": 10.0, "point_id": 7},
- {"airgap_mm": 2.0, "current_a": 5.0, "point_id": 8}])
- ex.execute_task(task)
- res1 = captured.get("t1")
- assert res1 and len(res1) == 2, res1
- for r in res1:
- assert r["status"] == "OK", r
- assert r["point_id"] in (7, 8), r
- assert r["params"].get("point_id") == r["point_id"], r
- print("[1] point_id passthrough OK:", [(r["point_id"], r["status"]) for r in res1])
- # ---------------- 2) FAILED point keeps point_id ----------------
- captured2 = {}
- def _boom(params, idx):
- raise RuntimeError("simulation failed")
- ex2 = te.TaskExecutor(task_dir=tmp, enable_mock=True)
- ex2.dispatch_task = lambda tid: True
- ex2._run_simulation_point = _boom
- ex2.on_complete = lambda tid, res, met: captured2.setdefault(tid, res)
- task2 = make_task("t2", [{"airgap_mm": 1.0, "point_id": 42}])
- ex2.execute_task(task2)
- r2 = captured2["t2"][0]
- assert r2["status"] == "FAILED", r2
- assert r2["point_id"] == 42, r2
- print("[2] FAILED point keeps point_id OK:", r2["point_id"], r2["status"])
- # ---------------- 3) claim rejected -> task skipped ----------------
- captured3 = {}
- ex3 = te.TaskExecutor(task_dir=tmp, enable_mock=True)
- ex3.dispatch_task = lambda tid: False # already claimed by another instance
- ex3.on_complete = lambda tid, res, met: captured3.setdefault(tid, res)
- task3 = make_task("t3", [{"airgap_mm": 1.0, "point_id": 99}])
- ex3.execute_task(task3)
- assert "t3" not in captured3, "claimed task must be skipped"
- print("[3] claim-rejected task skipped OK")
- # ---------------- 4) unique executor ids ----------------
- a = te.TaskExecutor(task_dir=tmp)
- b = te.TaskExecutor(task_dir=tmp)
- c = te.TaskExecutor(task_dir=tmp, executor_id="motorcad-executor-9")
- assert a.executor_id != b.executor_id, (a.executor_id, b.executor_id)
- assert c.executor_id == "motorcad-executor-9"
- print("[4] unique executor ids OK:", a.executor_id, "|", b.executor_id, "|", c.executor_id)
- print("\nALL P3-M3 EXECUTOR TESTS PASSED")
|