Diagnose stalled TLSRPT delivery runs
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user