Diagnose stalled TLSRPT delivery runs

This commit is contained in:
Mario Fetka
2026-07-28 20:42:22 +02:00
parent 3fcdf95ec1
commit 8cc254d1f2
+27 -4
View File
@@ -196,6 +196,14 @@ def request_worker() -> None:
raise SMTP29Error(f"worker request failed: {output}")
def scheduler_state() -> object:
output = testtool("scheduler-list")
try:
return json.loads(output)
except json.JSONDecodeError:
return output
def wait_until(function, description: str):
deadline = time.monotonic() + TIMEOUT
last = None
@@ -500,12 +508,23 @@ def perform_test() -> None:
record(event(yesterday, delivery_domain, policy))
record(event(yesterday, delivery_domain, policy, success=False))
prepare(today, now, signing_domain)
initial_delivery = matching_delivery(delivery_domain)
if not initial_delivery:
raise SMTP29Error(
"prepared TLSRPT delivery is not pending: "
f"{next_delivery(int(time.time()) + 172800)!r}")
request_worker()
mail_raw = wait_until(
lambda: captured_report(smtp_capture, delivery_domain),
"TLSRPT mail delivery",
)
try:
mail_raw = wait_until(
lambda: captured_report(smtp_capture, delivery_domain),
"TLSRPT mail delivery",
)
except SMTP29Error as error:
raise SMTP29Error(
f"{error}; pending="
f"{next_delivery(int(time.time()) + 172800)!r}; "
f"scheduler={scheduler_state()!r}") from error
https_raw = wait_until(
lambda: (
https_capture.snapshot()[0]
@@ -656,6 +675,10 @@ def perform_test() -> None:
discard_delivery(value, "interrupted SMTP-29 test fixture")
except Exception:
pass
try:
purge_stale_fixture_deliveries()
except Exception:
pass
if configuration_changed:
try:
replace_configuration("smtp", original_smtp)