From 40c1a3652b423462e8ef0daa49f28cff10cda36a Mon Sep 17 00:00:00 2001 From: codex Date: Tue, 21 Apr 2026 03:18:08 -0300 Subject: [PATCH] test(ariadne): cover provisioning retry helpers --- ariadne/manager/provisioning_tasks.py | 5 +--- .../manager/test_provisioning_run_loop.py | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/ariadne/manager/provisioning_tasks.py b/ariadne/manager/provisioning_tasks.py index fb16cf2..724110d 100644 --- a/ariadne/manager/provisioning_tasks.py +++ b/ariadne/manager/provisioning_tasks.py @@ -113,10 +113,7 @@ class _ProvisioningTaskMixin: detail_lower = detail.lower() match = re.match(r"^http\s+(\d{3})", detail_lower) if match: - try: - code = int(match.group(1)) - except ValueError: - code = 0 + code = int(match.group(1)) if code in _RETRYABLE_HTTP_CODES: return True return any(token in detail_lower for token in _RETRYABLE_TOKENS) diff --git a/tests/unit/manager/test_provisioning_run_loop.py b/tests/unit/manager/test_provisioning_run_loop.py index 0fba876..753af82 100644 --- a/tests/unit/manager/test_provisioning_run_loop.py +++ b/tests/unit/manager/test_provisioning_run_loop.py @@ -138,12 +138,35 @@ def test_provisioning_task_helpers() -> None: def test_provisioning_retryable_detail_detection() -> None: manager = prov.ProvisioningManager(DummyDB({}, locked=True), DummyStorage()) + assert manager._is_retryable_detail("") is False assert manager._is_retryable_detail("timeout") is True assert manager._is_retryable_detail("http 503: service unavailable") is True assert manager._is_retryable_detail("mailbox not ready") is True assert manager._is_retryable_detail("invalid credentials") is False + assert manager._retryable_detail("") == "retryable: temporary failure" assert manager._retryable_detail("timeout").startswith("retryable:") +def test_provisioning_retry_at_parsing_and_due_state() -> None: + manager = prov.ProvisioningManager(DummyDB({}, locked=True), DummyStorage()) + assert manager._parse_retry_at("") is None + assert manager._parse_retry_at("not a retry") is None + assert manager._parse_retry_at("rate limited until not-a-date") is None + assert manager._parse_retry_at("rate limited until 2099-01-01T00:00:00+0000").tzinfo is not None + + class Conn: + def __init__(self, row): + self.row = row + + def execute(self, *_args, **_kwargs): + return types.SimpleNamespace(fetchone=lambda: self.row) + + assert manager._vaultwarden_retry_due(Conn({"status": "ok", "detail": ""}), "REQ") is True + assert manager._vaultwarden_retry_due(Conn({"status": "pending", "detail": "not a retry"}), "REQ") is True + future = "rate limited until 2099-01-01T00:00:00Z" + assert manager._vaultwarden_retry_due(Conn({"status": "pending", "detail": future}), "REQ") is False + past = "rate limited until 2000-01-01T00:00:00Z" + assert manager._vaultwarden_retry_due(Conn({"status": "pending", "detail": past}), "REQ") is True + def test_provisioning_ensure_task_rows_empty() -> None: manager = prov.ProvisioningManager(DummyDB({}), DummyStorage()) manager._ensure_task_rows(DummyConn({}, locked=True), "REQ", [])