test(ariadne): cover provisioning retry helpers
This commit is contained in:
parent
01ccdd3fcb
commit
40c1a3652b
@ -113,10 +113,7 @@ class _ProvisioningTaskMixin:
|
|||||||
detail_lower = detail.lower()
|
detail_lower = detail.lower()
|
||||||
match = re.match(r"^http\s+(\d{3})", detail_lower)
|
match = re.match(r"^http\s+(\d{3})", detail_lower)
|
||||||
if match:
|
if match:
|
||||||
try:
|
code = int(match.group(1))
|
||||||
code = int(match.group(1))
|
|
||||||
except ValueError:
|
|
||||||
code = 0
|
|
||||||
if code in _RETRYABLE_HTTP_CODES:
|
if code in _RETRYABLE_HTTP_CODES:
|
||||||
return True
|
return True
|
||||||
return any(token in detail_lower for token in _RETRYABLE_TOKENS)
|
return any(token in detail_lower for token in _RETRYABLE_TOKENS)
|
||||||
|
|||||||
@ -138,12 +138,35 @@ def test_provisioning_task_helpers() -> None:
|
|||||||
|
|
||||||
def test_provisioning_retryable_detail_detection() -> None:
|
def test_provisioning_retryable_detail_detection() -> None:
|
||||||
manager = prov.ProvisioningManager(DummyDB({}, locked=True), DummyStorage())
|
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("timeout") is True
|
||||||
assert manager._is_retryable_detail("http 503: service unavailable") 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("mailbox not ready") is True
|
||||||
assert manager._is_retryable_detail("invalid credentials") is False
|
assert manager._is_retryable_detail("invalid credentials") is False
|
||||||
|
assert manager._retryable_detail("") == "retryable: temporary failure"
|
||||||
assert manager._retryable_detail("timeout").startswith("retryable:")
|
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:
|
def test_provisioning_ensure_task_rows_empty() -> None:
|
||||||
manager = prov.ProvisioningManager(DummyDB({}), DummyStorage())
|
manager = prov.ProvisioningManager(DummyDB({}), DummyStorage())
|
||||||
manager._ensure_task_rows(DummyConn({}, locked=True), "REQ", [])
|
manager._ensure_task_rows(DummyConn({}, locked=True), "REQ", [])
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user