feat: stabilize multi-region runtime sync and worker orchestration
This commit is contained in:
65
domain-api/tests/test_detect_run_service.py
Normal file
65
domain-api/tests/test_detect_run_service.py
Normal file
@@ -0,0 +1,65 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
from unittest.mock import patch
|
||||
|
||||
import app.services.detect_run_service as detect_run_service
|
||||
|
||||
|
||||
class _TraceLock:
|
||||
def __init__(self, order: list[str]) -> None:
|
||||
self.order = order
|
||||
|
||||
def __enter__(self):
|
||||
self.order.append("enter")
|
||||
return self
|
||||
|
||||
def __exit__(self, exc_type, exc, tb):
|
||||
self.order.append("exit")
|
||||
return False
|
||||
|
||||
|
||||
class DetectRunServiceTests(unittest.TestCase):
|
||||
def test_create_detect_run_snapshot_acquires_lock_before_loading_records(self) -> None:
|
||||
order: list[str] = []
|
||||
|
||||
with patch.object(detect_run_service, "_DETECT_RUNS_LOCK", _TraceLock(order)):
|
||||
with patch.object(detect_run_service, "_load", side_effect=lambda: order.append("load") or []):
|
||||
with patch.object(detect_run_service, "_capture_worker_logs", return_value=[]):
|
||||
with patch.object(detect_run_service, "_save", side_effect=lambda records: order.append("save")):
|
||||
record = detect_run_service.create_detect_run_snapshot(
|
||||
"start",
|
||||
{"latest_start_time": "2026-04-23 15:00:00", "running": True},
|
||||
{"running": 1},
|
||||
{"thread_count": 1000},
|
||||
)
|
||||
|
||||
self.assertEqual("enter", order[0])
|
||||
self.assertIn("load", order)
|
||||
self.assertIn("save", order)
|
||||
self.assertEqual("exit", order[-1])
|
||||
self.assertEqual("starting", record["status"])
|
||||
|
||||
def test_sync_detect_runs_acquires_lock_before_mutating_records(self) -> None:
|
||||
order: list[str] = []
|
||||
|
||||
with patch.object(detect_run_service, "_DETECT_RUNS_LOCK", _TraceLock(order)):
|
||||
with patch.object(detect_run_service, "_load", side_effect=lambda: order.append("load") or []):
|
||||
with patch.object(detect_run_service, "_capture_worker_logs", return_value=[]):
|
||||
with patch.object(detect_run_service, "_save", side_effect=lambda records: order.append("save")):
|
||||
records = detect_run_service.sync_detect_runs(
|
||||
{"running": True, "detecting": True, "latest_start_time": "2026-04-23 15:00:00"},
|
||||
{"running": 1, "pending": 0},
|
||||
{"thread_count": 1000},
|
||||
active_job={"status": "running", "items_running": 1},
|
||||
)
|
||||
|
||||
self.assertEqual("enter", order[0])
|
||||
self.assertIn("load", order)
|
||||
self.assertIn("save", order)
|
||||
self.assertEqual("exit", order[-1])
|
||||
self.assertEqual("running", records[0]["status"])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user