Skip to content

Commit 38649de

Browse files
committed
fix: align minitest suite's madmail assertions with v2's real IMAP/log behavior
test_delivery_port_blocked: Updated journal grep pattern to current values. test_hide_senders_ip_address: imap_tools.MailBox.fetch() uses UID SEARCH, implement workaround with raw imaplib sequence-range FETCH ("1:*"); allows us to drop imaplib import.
1 parent d5f2b6f commit 38649de

1 file changed

Lines changed: 19 additions & 8 deletions

File tree

‎src/relay_minitest/test_relay.py‎

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1+
import email
12
import imaplib
23
import ipaddress
34
import smtplib
45
import ssl
56
from email.mime.text import MIMEText
67

7-
import imap_tools
88
import pytest
99
import requests
1010

@@ -75,8 +75,11 @@ def test_delivery_port_blocked(
7575
relayadmin2.block_port(443)
7676
relayadmin2.block_port(80)
7777
chat.send_text("should not arrive")
78-
# Postfix logs "status=deferred", madmail logs "delivery attempt failed".
79-
lines = relayadmin.wait_for_journal_match("deferred|delivery attempt failed")
78+
# Postfix logs "status=deferred"; madmail logs one of three phrasings
79+
# depending on retry state (see chatmail-delivery/src/queue/worker.rs).
80+
lines = relayadmin.wait_for_journal_match(
81+
"deferred|outbound delivery (failed, requeued|permanent failure|exceeded max_tries)"
82+
)
8083
lp.indent(lines.splitlines()[-1])
8184

8285
def test_one_on_one_http_only(self, cmfactory, cmfactory2, relayadmin2, lp):
@@ -115,11 +118,19 @@ def test_hide_senders_ip_address(cmfactory, ssl_context):
115118
addr = user2.get_config("addr")
116119
host = addr.split("@")[1].strip("[]")
117120
pw = user2.get_config("mail_pw")
118-
mailbox = imap_tools.MailBox(host, ssl_context=ssl_context)
119-
mailbox.login(addr, pw)
120-
msgs = list(mailbox.fetch(mark_seen=False))
121-
assert msgs, "expected at least one message"
122-
assert public_ip not in msgs[0].obj.as_string()
121+
122+
# madmail's IMAP server doesn't implement SEARCH/UID SEARCH (only FETCH,
123+
# UID FETCH/STORE/MOVE/COPY, see chatmail-imap/src/session.rs), so
124+
# fetch by sequence range instead.
125+
imap = imaplib.IMAP4_SSL(host, ssl_context=ssl_context)
126+
imap.login(addr, pw)
127+
imap.select("INBOX")
128+
typ, data = imap.fetch("1:*", "(BODY.PEEK[])")
129+
assert typ == "OK"
130+
raw_messages = [item[1] for item in data if isinstance(item, tuple)]
131+
assert raw_messages, "expected at least one message"
132+
msg = email.message_from_bytes(raw_messages[-1])
133+
assert public_ip not in msg.as_string()
123134

124135

125136
def test_unencrypted_rejection(cmsetup, lp):

0 commit comments

Comments
 (0)