This commit is contained in:
@@ -115,3 +115,56 @@ def test_dispatch_dedupes_repeated_event(monkeypatch):
|
||||
assert second["deduped"] is True
|
||||
assert second["sent"] == 0
|
||||
assert len(sent) == 1
|
||||
|
||||
|
||||
def test_replay_failed_deliveries_removes_successful_records(tmp_path, monkeypatch):
|
||||
import services.event_router as event_router
|
||||
|
||||
queue_path = tmp_path / "failed.jsonl"
|
||||
queue_path.write_text(
|
||||
json.dumps({
|
||||
"ts": "2026-04-29T00:00:00",
|
||||
"reason": "telegram_delivery_failed",
|
||||
"tier": "L1",
|
||||
"event_key": "Scheduler.Test:test",
|
||||
"event": {"title": "舊告警", "summary": "需要回放"},
|
||||
"message": "queued message",
|
||||
"errors": ["HTTP 500"],
|
||||
}, ensure_ascii=False) + "\n",
|
||||
encoding="utf-8",
|
||||
)
|
||||
monkeypatch.setattr(event_router, "_QUEUE_PATH", str(queue_path))
|
||||
sent = []
|
||||
monkeypatch.setattr(
|
||||
event_router,
|
||||
"send_telegram_with_result",
|
||||
lambda message, **kwargs: sent.append(message) or {"ok": True, "sent": 1, "failed": 0, "chat_ids": [123], "errors": []},
|
||||
)
|
||||
|
||||
result = event_router.replay_failed_deliveries(limit=10)
|
||||
|
||||
assert result == {"attempted": 1, "sent": 1, "failed": 0, "dropped": 0}
|
||||
assert sent == ["queued message"]
|
||||
assert not queue_path.exists()
|
||||
|
||||
|
||||
def test_replay_failed_deliveries_keeps_failed_records(tmp_path, monkeypatch):
|
||||
import services.event_router as event_router
|
||||
|
||||
queue_path = tmp_path / "failed.jsonl"
|
||||
queue_path.write_text(
|
||||
json.dumps({"event_key": "Scheduler.Test:test", "event": {"title": "舊告警"}, "message": "queued"}) + "\n",
|
||||
encoding="utf-8",
|
||||
)
|
||||
monkeypatch.setattr(event_router, "_QUEUE_PATH", str(queue_path))
|
||||
monkeypatch.setattr(
|
||||
event_router,
|
||||
"send_telegram_with_result",
|
||||
lambda *args, **kwargs: {"ok": False, "sent": 0, "failed": 1, "chat_ids": [123], "errors": ["HTTP 500"]},
|
||||
)
|
||||
|
||||
result = event_router.replay_failed_deliveries(limit=10)
|
||||
|
||||
assert result["attempted"] == 1
|
||||
assert result["failed"] == 1
|
||||
assert "last_replay_error" in queue_path.read_text(encoding="utf-8")
|
||||
|
||||
Reference in New Issue
Block a user