feat: stabilize multi-region runtime sync and worker orchestration
This commit is contained in:
83
domain-api/tests/test_debug_event_service.py
Normal file
83
domain-api/tests/test_debug_event_service.py
Normal file
@@ -0,0 +1,83 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
from unittest.mock import patch
|
||||
|
||||
from app.services import debug_event_service
|
||||
|
||||
|
||||
class DebugEventServiceTests(unittest.TestCase):
|
||||
def test_ingest_debug_event_requires_configured_shared_token(self) -> None:
|
||||
with patch.object(debug_event_service.settings, "sync_shared_token", ""):
|
||||
ok, message, data = debug_event_service.ingest_debug_event(
|
||||
{
|
||||
"source_region": "mainland",
|
||||
"node_code": "mainland-controller-01",
|
||||
"service": "worker-event",
|
||||
"event_type": "worker_log",
|
||||
"message": "开始检测域名: a.com",
|
||||
"payload": {"job_id": 1, "job_code": "sync-overseas-1"},
|
||||
},
|
||||
shared_token=None,
|
||||
)
|
||||
|
||||
self.assertFalse(ok)
|
||||
self.assertIn("token 未配置", message)
|
||||
self.assertTrue(data["configuration_required"])
|
||||
|
||||
def test_resolve_target_job_for_debug_event_rejects_missing_identity(self) -> None:
|
||||
job, reason = debug_event_service._resolve_target_job_for_debug_event({"domain": "a.com"})
|
||||
|
||||
self.assertIsNone(job)
|
||||
self.assertEqual("missing_job_identity", reason)
|
||||
|
||||
@patch("app.services.debug_event_service._load_detect_job_summary_by_job_code")
|
||||
@patch("app.services.detect_job_service.get_detect_job_summary")
|
||||
@patch("app.services.detect_job_service.get_active_detect_job_summary")
|
||||
def test_resolve_target_job_for_debug_event_prefers_payload_job_id_over_current_active_job(
|
||||
self,
|
||||
mock_get_active_detect_job_summary,
|
||||
mock_get_detect_job_summary,
|
||||
mock_load_detect_job_summary_by_job_code,
|
||||
) -> None:
|
||||
mock_get_active_detect_job_summary.return_value = {
|
||||
"job_id": 12,
|
||||
"job_code": "sync-overseas-12",
|
||||
"current_cycle_token": "cycle-12",
|
||||
}
|
||||
mock_get_detect_job_summary.return_value = {
|
||||
"job_id": 11,
|
||||
"job_code": "sync-overseas-11",
|
||||
"current_cycle_token": "cycle-11",
|
||||
}
|
||||
|
||||
job, reason = debug_event_service._resolve_target_job_for_debug_event(
|
||||
{"job_id": 11, "job_code": "sync-overseas-11", "cycle_token": "cycle-11"}
|
||||
)
|
||||
|
||||
self.assertEqual("matched", reason)
|
||||
self.assertEqual(11, job["job_id"])
|
||||
mock_get_detect_job_summary.assert_called_once_with(11, event_limit=1)
|
||||
mock_load_detect_job_summary_by_job_code.assert_not_called()
|
||||
|
||||
@patch("app.services.detect_job_service.get_active_detect_job_summary")
|
||||
def test_resolve_target_job_for_debug_event_rejects_cycle_mismatch(
|
||||
self,
|
||||
mock_get_active_detect_job_summary,
|
||||
) -> None:
|
||||
mock_get_active_detect_job_summary.return_value = {
|
||||
"job_id": 12,
|
||||
"job_code": "sync-overseas-12",
|
||||
"current_cycle_token": "cycle-current",
|
||||
}
|
||||
|
||||
job, reason = debug_event_service._resolve_target_job_for_debug_event(
|
||||
{"job_id": 12, "job_code": "sync-overseas-12", "cycle_token": "cycle-old"}
|
||||
)
|
||||
|
||||
self.assertIsNone(job)
|
||||
self.assertEqual("cycle_mismatch", reason)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user