diff --git a/tests/chatmaild/test_filtermail.py b/tests/chatmaild/test_filtermail.py index 1f3b6ea4..41c8333c 100644 --- a/tests/chatmaild/test_filtermail.py +++ b/tests/chatmaild/test_filtermail.py @@ -1,329 +1,47 @@ from chatmaild.filtermail import check_encrypted, check_DATA, SendRateLimiter -from email.parser import BytesParser -from email import policy import pytest -def test_reject_forged_from(): - def makemail(from_addr): - return BytesParser(policy=policy.default).parsebytes( - "\r\n".join( - [ - f"From: <{from_addr}", - "To: ", - "Date: Sun, 15 Oct 2023 16:41:44 +0000", - "Message-ID: ", - "References: ", - "Chat-Version: 1.0", - "MIME-Version: 1.0", - "Content-Type: text/plain; charset=utf-8; format=flowed; delsp=no", - "", - "Hi!", - "", - "", - ] - ).encode() - ) - +def test_reject_forged_from(mailgen): class envelope: mail_from = "bob@c3.testrun.org" rcpt_tos = ["somebody@c3.testrun.org"] # test that the filter lets good mail through - envelope.content = makemail(envelope.mail_from).as_bytes() + envelope.content = mailgen.get_mail_data( + "plain.eml", from_addr=envelope.mail_from + ).as_bytes() assert not check_DATA(envelope=envelope) # test that the filter rejects forged mail - envelope.content = makemail("forged@c3.testrun.org").as_bytes() + envelope.content = mailgen.get_mail_data( + "plain.eml", from_addr="forged@c3.testrun.org" + ).as_bytes() error = check_DATA(envelope=envelope) assert "500" in error -def test_filtermail(): - def check_encrypted_bstr(content): - message = BytesParser(policy=policy.default).parsebytes(content) - return check_encrypted(message) - - assert not check_encrypted_bstr(b"foo") - - assert not check_encrypted_bstr( - "\r\n".join( - [ - "Subject: =?utf-8?q?Message_from_foobar=40c2=2Etestrun=2Eorg?=", - "Chat-Disposition-Notification-To: foobar@c2.testrun.org", - "Chat-User-Avatar: 0", - "From: ", - "To: ", - "Date: Sun, 15 Oct 2023 16:41:44 +0000", - "Message-ID: ", - "References: ", - "Chat-Version: 1.0", - "Autocrypt: addr=foobar@c2.testrun.org; prefer-encrypt=mutual;", - "\tkeydata=xjMEZSrw3hYJKwYBBAHaRw8BAQdAiEKNQFU28c6qsx4vo/JHdt73RXdjMOmByf/XsGiJ7m", - "\tnNFzxmb29iYXJAYzIudGVzdHJ1bi5vcmc+wosEEBYIADMCGQEFAmUq8N4CGwMECwkIBwYVCAkKCwID", - "\tFgIBFiEEGil0OvTIa6RngmCLUYNnEa9leJAACgkQUYNnEa9leJCX3gEAhm0MehE5byBBU1avPczr/I", - "\tHjNLht7Qf6++mAhlJmtDcA/0C8VYJhsUpmiDjuZaMDWNv4FO2BJG6LH7gSm6n7ClMJzjgEZSrw3hIK", - "\tKwYBBAGXVQEFAQEHQAxGG/QW0owCfMp1A+vXEMwgzWcBpNFr58kX2eXuPpM6AwEIB8J4BBgWCAAgBQ", - "\tJlKvDeAhsMFiEEGil0OvTIa6RngmCLUYNnEa9leJAACgkQUYNnEa9leJDg1gEAwLf8KDoAAKyYgjyI", - "\tvYvO9VEgBni1C4Xx1VjcaEmlDK8BALoFuUCK+enw76TtDcAUKhlhUiM6SDRExkS4Nskp/BcK", - "MIME-Version: 1.0", - "Content-Type: text/plain; charset=utf-8; format=flowed; delsp=no", - "", - "Hi!", - "", - "", - ] - ).encode() - ) - - assert not check_encrypted_bstr( - "\r\n".join( - [ - "Subject: =?utf-8?q?Message_from_foobar=40c2=2Etestrun=2Eorg?=", - "Chat-Disposition-Notification-To: foobar@c2.testrun.org", - "Chat-User-Avatar: 0", - "From: ", - "To: ", - "Date: Sun, 15 Oct 2023 16:41:44 +0000", - "Message-ID: ", - "References: ", - "Chat-Version: 1.0", - "Autocrypt: addr=foobar@c2.testrun.org; prefer-encrypt=mutual;", - "\tkeydata=xjMEZSrw3hYJKwYBBAHaRw8BAQdAiEKNQFU28c6qsx4vo/JHdt73RXdjMOmByf/XsGiJ7m", - "\tnNFzxmb29iYXJAYzIudGVzdHJ1bi5vcmc+wosEEBYIADMCGQEFAmUq8N4CGwMECwkIBwYVCAkKCwID", - "\tFgIBFiEEGil0OvTIa6RngmCLUYNnEa9leJAACgkQUYNnEa9leJCX3gEAhm0MehE5byBBU1avPczr/I", - "\tHjNLht7Qf6++mAhlJmtDcA/0C8VYJhsUpmiDjuZaMDWNv4FO2BJG6LH7gSm6n7ClMJzjgEZSrw3hIK", - "\tKwYBBAGXVQEFAQEHQAxGG/QW0owCfMp1A+vXEMwgzWcBpNFr58kX2eXuPpM6AwEIB8J4BBgWCAAgBQ", - "\tJlKvDeAhsMFiEEGil0OvTIa6RngmCLUYNnEa9leJAACgkQUYNnEa9leJDg1gEAwLf8KDoAAKyYgjyI", - "\tvYvO9VEgBni1C4Xx1VjcaEmlDK8BALoFuUCK+enw76TtDcAUKhlhUiM6SDRExkS4Nskp/BcK", - "MIME-Version: 1.0", - "Content-Type: text/plain; charset=utf-8; format=flowed; delsp=no", - "", - "Hi!", - "", - "", - ] - ).encode() - ) +def test_filtermail_no_encryption_detection(mailgen): + msg = mailgen.get_mail_data("plain.eml") + assert not check_encrypted(msg) # https://xkcd.com/1181/ - assert not check_encrypted_bstr( - "\r\n".join( - [ - "Subject: =?utf-8?q?Message_from_foobar=40c2=2Etestrun=2Eorg?=", - "Chat-Disposition-Notification-To: foobar@c2.testrun.org", - "Chat-User-Avatar: 0", - "From: ", - "To: ", - "Date: Sun, 15 Oct 2023 16:41:44 +0000", - "Message-ID: ", - "References: ", - "Chat-Version: 1.0", - "Autocrypt: addr=foobar@c2.testrun.org; prefer-encrypt=mutual;", - "\tkeydata=xjMEZSrw3hYJKwYBBAHaRw8BAQdAiEKNQFU28c6qsx4vo/JHdt73RXdjMOmByf/XsGiJ7m", - "\tnNFzxmb29iYXJAYzIudGVzdHJ1bi5vcmc+wosEEBYIADMCGQEFAmUq8N4CGwMECwkIBwYVCAkKCwID", - "\tFgIBFiEEGil0OvTIa6RngmCLUYNnEa9leJAACgkQUYNnEa9leJCX3gEAhm0MehE5byBBU1avPczr/I", - "\tHjNLht7Qf6++mAhlJmtDcA/0C8VYJhsUpmiDjuZaMDWNv4FO2BJG6LH7gSm6n7ClMJzjgEZSrw3hIK", - "\tKwYBBAGXVQEFAQEHQAxGG/QW0owCfMp1A+vXEMwgzWcBpNFr58kX2eXuPpM6AwEIB8J4BBgWCAAgBQ", - "\tJlKvDeAhsMFiEEGil0OvTIa6RngmCLUYNnEa9leJAACgkQUYNnEa9leJDg1gEAwLf8KDoAAKyYgjyI", - "\tvYvO9VEgBni1C4Xx1VjcaEmlDK8BALoFuUCK+enw76TtDcAUKhlhUiM6SDRExkS4Nskp/BcK", - "MIME-Version: 1.0", - "Content-Type: text/plain; charset=utf-8; format=flowed; delsp=no", - "", - "-----BEGIN PGP MESSAGE-----", - "Hi!", - "-----END PGP MESSAGE-----", - "", - "", - ] - ).encode() - ) + msg = mailgen.get_mail_data("fake-encrypted.eml") + assert not check_encrypted(msg) - assert check_encrypted_bstr( - "\r\n".join( - [ - "Subject: ...", - "From: ", - "To: ", - "Date: Sun, 15 Oct 2023 16:43:21 +0000", - "Message-ID: ", - "In-Reply-To: ", - "References: ", - "\t", - "Chat-Version: 1.0", - "Autocrypt: addr=barbaz@c2.testrun.org; prefer-encrypt=mutual;", - "\tkeydata=xjMEZSwWjhYJKwYBBAHaRw8BAQdAQBEhqeJh0GueHB6kF/DUQqYCxARNBVokg/AzT+7LqH", - "\trNFzxiYXJiYXpAYzIudGVzdHJ1bi5vcmc+wosEEBYIADMCGQEFAmUsFo4CGwMECwkIBwYVCAkKCwID", - "\tFgIBFiEEFTfUNvVnY3b9F7yHnmme1PfUhX8ACgkQnmme1PfUhX9A4AEAnHWHp49eBCMHK5t66gYPiW", - "\tXQuB1mwUjzGfYWB+0RXUoA/0xcQ3FbUNlGKW7Blp6eMFfViv6Mv2d3kNSXACB6nmcMzjgEZSwWjhIK", - "\tKwYBBAGXVQEFAQEHQBpY5L2M1XHo0uxf8SX1wNLBp/OVvidoWHQF2Jz+kJsUAwEIB8J4BBgWCAAgBQ", - "\tJlLBaOAhsMFiEEFTfUNvVnY3b9F7yHnmme1PfUhX8ACgkQnmme1PfUhX/INgEA37AJaNvruYsJVanP", - "\tIXnYw4CKd55UAwl8Zcy+M2diAbkA/0fHHcGV4r78hpbbL1Os52DPOdqYQRauIeJUeG+G6bQO", - "MIME-Version: 1.0", - 'Content-Type: multipart/encrypted; protocol="application/pgp-encrypted";', - '\tboundary="YFrteb74qSXmggbOxZL9dRnhymywAi"', - "", - "", - "--YFrteb74qSXmggbOxZL9dRnhymywAi", - "Content-Description: PGP/MIME version identification", - "Content-Type: application/pgp-encrypted", - "", - "Version: 1", - "", - "", - "--YFrteb74qSXmggbOxZL9dRnhymywAi", - "Content-Description: OpenPGP encrypted message", - 'Content-Disposition: inline; filename="encrypted.asc";', - 'Content-Type: application/octet-stream; name="encrypted.asc"', - "", - "-----BEGIN PGP MESSAGE-----", - "", - "wU4DhW3gBZ/VvCYSAQdA8bMs2spwbKdGjVsL1ByPkNrqD7frpB73maeL6I6SzDYg", - "O5G53tv339RdKq3WRcCtEEvxjHlUx2XNwXzC04BpmfvBTgNfPUyLDzjXnxIBB0Ae", - "8ymwGvXMCCimHXN0Dg8Ui62KOi03h0UgheoHWovJSCDF4CKre/xtFr3nL7lq/PKI", - "JsjVNz7/RK9FSXF6WwfONtLCyQGEuVAsB/KXfCBEyfKhaMwGHvhujRidGW5uV1no", - "lMGl3ODmo29Lgeu2uSE7EpJRZoe6hU6ddmBkqxax61ZtkaFlGFFpdo2K8balNNdz", - "ZsJ/9mmI9x3oOJ4/l1nhQbUO9ADbs7gJhFdV5Qkp30b5fCI7bU+aoe1ccBbLe/WM", - "YUty1PqcuQT7XjA+XmYuL261tvW8pBetT+i33/E2d8PzzYt2IuK9qeevyS+yxdwA", - "kfwejFWzzsUlJaDxs1x4XOxkMgSj+jo+g12dFOb7fyClsAnq23iDb8AuaT/BScAI", - "+lO+gher69+6LmM7VGHLG5k762J1jTaQCaKt1s8TAWV99Eo4491vL6fyvk3l/Cfg", - "RXSwiWFgj19Pn0Rq7CD9v22UE2vdUMBTcV4aw79mClk1YQ23jbF0y5DCjPdJ62Zo", - "tskBgFt3NoWV80jZ76zIBLrrjLwCCll8JjJtFwSkt2GX5RFBsVa4A8IDht9RtEk7", - "rrHgbSZQfkauEi/mH3/6CDZoLqSHudUZ7d4MaJwun1TkFYGe2ORwGJd4OBj3oGJp", - "H8YBwCpk///L/fKjX0Gg3M8nrpM4wrRFhPKidAgO/kcm25X4+ZHlVkWBTCt5RWKI", - "fHh6oLDZCqCfcgMkE1KKmwfIHaUkhq5BPRigwy6i5dh1DM4+1UCLh3dxzVbqE9b9", - "61NB19nXdRtDA2sOUnj9ve6m/wEPyCb6/zBQZqvCBYb1/AjdXpUrFT+DbpfyxaXN", - "XfhDVb5mNqNM/IVj0V5fvTc6vOfYbzQtPm10H+FdWWfb+rJRfyC3MA2w2IqstFe3", - "w3bu2iE6CQvSqRvge+ZqLKt/NqYwOURiUmpuklbl3kPJ97+mfKWoiqk8Iz1VY+bb", - "NMUC7aoGv+jcoj+WS6PYO8N6BeRVUUB3ZJSf8nzjgxm1/BcM+UD3BPrlhT11ODRs", - "baifGbprMWwt3dhb8cQgRT8GPdpO1OsDkzL6iikMjLHWWiA99GV6ruiHsIPw6boW", - "A6/uSOskbDHOROotKmddGTBd0iiHXAoQsJFt1ZjUkt6EHrgWs+GAvrvKpXs1mrz8", - "uj3GwEFrHS+Xuf2UDgpszYT3hI2cL/kUtGakVR7m7vVMZqXBUbZdGAEb1PZNPwsI", - "E4aMK02+EVB+tSN4Fzj99N2YD0inVYt+oPjr2tHhUS6aSGBNS/48Ki47DOg4Sxkn", - "lkOWnEbCD+XTnbDd", - "=agR5", - "-----END PGP MESSAGE-----", - "", - "", - "--YFrteb74qSXmggbOxZL9dRnhymywAi--", - "", - "", - ] - ).encode() - ) - assert not check_encrypted_bstr( - "\r\n".join( - [ - "Subject: Buy Penis Enlargement at www.malicious-domain.com", - "From: ", - "To: ", - "Date: Sun, 15 Oct 2023 16:43:21 +0000", - "Message-ID: ", - "In-Reply-To: ", - "References: ", - "\t", - "Chat-Version: 1.0", - "Autocrypt: addr=barbaz@c2.testrun.org; prefer-encrypt=mutual;", - "\tkeydata=xjMEZSwWjhYJKwYBBAHaRw8BAQdAQBEhqeJh0GueHB6kF/DUQqYCxARNBVokg/AzT+7LqH", - "\trNFzxiYXJiYXpAYzIudGVzdHJ1bi5vcmc+wosEEBYIADMCGQEFAmUsFo4CGwMECwkIBwYVCAkKCwID", - "\tFgIBFiEEFTfUNvVnY3b9F7yHnmme1PfUhX8ACgkQnmme1PfUhX9A4AEAnHWHp49eBCMHK5t66gYPiW", - "\tXQuB1mwUjzGfYWB+0RXUoA/0xcQ3FbUNlGKW7Blp6eMFfViv6Mv2d3kNSXACB6nmcMzjgEZSwWjhIK", - "\tKwYBBAGXVQEFAQEHQBpY5L2M1XHo0uxf8SX1wNLBp/OVvidoWHQF2Jz+kJsUAwEIB8J4BBgWCAAgBQ", - "\tJlLBaOAhsMFiEEFTfUNvVnY3b9F7yHnmme1PfUhX8ACgkQnmme1PfUhX/INgEA37AJaNvruYsJVanP", - "\tIXnYw4CKd55UAwl8Zcy+M2diAbkA/0fHHcGV4r78hpbbL1Os52DPOdqYQRauIeJUeG+G6bQO", - "MIME-Version: 1.0", - 'Content-Type: multipart/encrypted; protocol="application/pgp-encrypted";', - '\tboundary="YFrteb74qSXmggbOxZL9dRnhymywAi"', - "", - "", - "--YFrteb74qSXmggbOxZL9dRnhymywAi", - "Content-Description: PGP/MIME version identification", - "Content-Type: application/pgp-encrypted", - "", - "Version: 1", - "", - "", - "--YFrteb74qSXmggbOxZL9dRnhymywAi", - "Content-Description: OpenPGP encrypted message", - 'Content-Disposition: inline; filename="encrypted.asc";', - 'Content-Type: application/octet-stream; name="encrypted.asc"', - "", - "-----BEGIN PGP MESSAGE-----", - "", - "wU4DhW3gBZ/VvCYSAQdA8bMs2spwbKdGjVsL1ByPkNrqD7frpB73maeL6I6SzDYg", - "O5G53tv339RdKq3WRcCtEEvxjHlUx2XNwXzC04BpmfvBTgNfPUyLDzjXnxIBB0Ae", - "8ymwGvXMCCimHXN0Dg8Ui62KOi03h0UgheoHWovJSCDF4CKre/xtFr3nL7lq/PKI", - "JsjVNz7/RK9FSXF6WwfONtLCyQGEuVAsB/KXfCBEyfKhaMwGHvhujRidGW5uV1no", - "lMGl3ODmo29Lgeu2uSE7EpJRZoe6hU6ddmBkqxax61ZtkaFlGFFpdo2K8balNNdz", - "ZsJ/9mmI9x3oOJ4/l1nhQbUO9ADbs7gJhFdV5Qkp30b5fCI7bU+aoe1ccBbLe/WM", - "YUty1PqcuQT7XjA+XmYuL261tvW8pBetT+i33/E2d8PzzYt2IuK9qeevyS+yxdwA", - "kfwejFWzzsUlJaDxs1x4XOxkMgSj+jo+g12dFOb7fyClsAnq23iDb8AuaT/BScAI", - "+lO+gher69+6LmM7VGHLG5k762J1jTaQCaKt1s8TAWV99Eo4491vL6fyvk3l/Cfg", - "RXSwiWFgj19Pn0Rq7CD9v22UE2vdUMBTcV4aw79mClk1YQ23jbF0y5DCjPdJ62Zo", - "tskBgFt3NoWV80jZ76zIBLrrjLwCCll8JjJtFwSkt2GX5RFBsVa4A8IDht9RtEk7", - "rrHgbSZQfkauEi/mH3/6CDZoLqSHudUZ7d4MaJwun1TkFYGe2ORwGJd4OBj3oGJp", - "H8YBwCpk///L/fKjX0Gg3M8nrpM4wrRFhPKidAgO/kcm25X4+ZHlVkWBTCt5RWKI", - "fHh6oLDZCqCfcgMkE1KKmwfIHaUkhq5BPRigwy6i5dh1DM4+1UCLh3dxzVbqE9b9", - "61NB19nXdRtDA2sOUnj9ve6m/wEPyCb6/zBQZqvCBYb1/AjdXpUrFT+DbpfyxaXN", - "XfhDVb5mNqNM/IVj0V5fvTc6vOfYbzQtPm10H+FdWWfb+rJRfyC3MA2w2IqstFe3", - "w3bu2iE6CQvSqRvge+ZqLKt/NqYwOURiUmpuklbl3kPJ97+mfKWoiqk8Iz1VY+bb", - "NMUC7aoGv+jcoj+WS6PYO8N6BeRVUUB3ZJSf8nzjgxm1/BcM+UD3BPrlhT11ODRs", - "baifGbprMWwt3dhb8cQgRT8GPdpO1OsDkzL6iikMjLHWWiA99GV6ruiHsIPw6boW", - "A6/uSOskbDHOROotKmddGTBd0iiHXAoQsJFt1ZjUkt6EHrgWs+GAvrvKpXs1mrz8", - "uj3GwEFrHS+Xuf2UDgpszYT3hI2cL/kUtGakVR7m7vVMZqXBUbZdGAEb1PZNPwsI", - "E4aMK02+EVB+tSN4Fzj99N2YD0inVYt+oPjr2tHhUS6aSGBNS/48Ki47DOg4Sxkn", - "lkOWnEbCD+XTnbDd", - "=agR5", - "-----END PGP MESSAGE-----", - "", - "", - "--YFrteb74qSXmggbOxZL9dRnhymywAi--", - "", - "", - ] - ).encode() - ) +def test_filtermail_encryption_detection(mailgen): + msg = mailgen.get_mail_data("encrypted.eml") + assert check_encrypted(msg) - assert not check_encrypted_bstr( - "\r\n".join( - [ - "Subject: Message opened", - "From: ", - "To: ", - "Date: Sun, 15 Oct 2023 16:43:25 +0000", - "Message-ID: ", - "Auto-Submitted: auto-replied", - "Chat-Version: 1.0", - "MIME-Version: 1.0", - "Content-Type: multipart/report; report-type=disposition-notification;", - '\tboundary="Gl92xgZjOShJ5PGHntqYkoo2OK2Dvi"', - "", - "", - "--Gl92xgZjOShJ5PGHntqYkoo2OK2Dvi", - "Content-Type: text/plain; charset=utf-8; format=flowed; delsp=no", - "", - 'The "Hi!" message you sent was displayed on the screen of the recipient.', - "", - "This is no guarantee the content was read.", - "", - "", - "--Gl92xgZjOShJ5PGHntqYkoo2OK2Dvi", - "Content-Type: message/disposition-notification", - "", - "Reporting-UA: Delta Chat 1.124.1", - "Original-Recipient: rfc822;barbaz@c2.testrun.org", - "Final-Recipient: rfc822;barbaz@c2.testrun.org", - "Original-Message-ID: ", - "Disposition: manual-action/MDN-sent-automatically; displayed", - "", - "", - "--Gl92xgZjOShJ5PGHntqYkoo2OK2Dvi--", - "", - "", - ] - ).encode() - ) + # if the subject is not "..." it is not considered ac-encrypted + msg.replace_header("Subject", "Click this link") + assert not check_encrypted(msg) + + +def test_filtermail_mdn_is_not_encrypted(mailgen): + msg = mailgen.get_mail_data("mdn.eml") + assert not check_encrypted(msg) def test_send_rate_limiter(): diff --git a/tests/conftest.py b/tests/conftest.py index 5aac7fe5..d1886353 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -6,6 +6,8 @@ import subprocess import imaplib import smtplib import itertools +from email.parser import BytesParser +from email import policy from pathlib import Path from math import ceil import pytest @@ -90,7 +92,7 @@ def pytest_terminal_summary(terminalreporter): return tr.section("benchmark results") - float_names = 'median min max'.split() + float_names = "median min max".split() width = max(map(len, float_names)) def fcol(parts): @@ -285,13 +287,19 @@ class Remote: @pytest.fixture -def mailgen(request): +def mailgen(request, gencreds): datadir = conftestdir.joinpath("mail-data") class Mailgen: - def get_encrypted(self, from_addr, to_addr): - data = datadir.joinpath("encrypted.eml").read_text() - return data.format(from_addr=from_addr, to_addr=to_addr) + def get_mail_data(self, name, parsed=True, from_addr=None): + if from_addr is None: + from_addr = gencreds()[0] + to_addr = gencreds()[0] + data = datadir.joinpath(name).read_text() + text = data.format(from_addr=from_addr, to_addr=to_addr) + if parsed: + return BytesParser(policy=policy.default).parsebytes(text.encode()) + return text return Mailgen() diff --git a/tests/mail-data/fake-encrypted.eml b/tests/mail-data/fake-encrypted.eml new file mode 100644 index 00000000..74cdf233 --- /dev/null +++ b/tests/mail-data/fake-encrypted.eml @@ -0,0 +1,25 @@ +Subject: =?utf-8?q?Message_from_foobar=40c2=2Etestrun=2Eorg?= +Chat-Disposition-Notification-To: foobar@c2.testrun.org +Chat-User-Avatar: 0 +From: <{from_addr}> +To: <{to_addr}> +Date: Sun, 15 Oct 2023 16:41:44 +0000 +Message-ID: +References: +Chat-Version: 1.0 +Autocrypt: addr={from_addr}; prefer-encrypt=mutual; + keydata=xjMEZSrw3hYJKwYBBAHaRw8BAQdAiEKNQFU28c6qsx4vo/JHdt73RXdjMOmByf/XsGiJ7m + nNFzxmb29iYXJAYzIudGVzdHJ1bi5vcmc+wosEEBYIADMCGQEFAmUq8N4CGwMECwkIBwYVCAkKCwID + FgIBFiEEGil0OvTIa6RngmCLUYNnEa9leJAACgkQUYNnEa9leJCX3gEAhm0MehE5byBBU1avPczr/I + HjNLht7Qf6++mAhlJmtDcA/0C8VYJhsUpmiDjuZaMDWNv4FO2BJG6LH7gSm6n7ClMJzjgEZSrw3hIK + KwYBBAGXVQEFAQEHQAxGG/QW0owCfMp1A+vXEMwgzWcBpNFr58kX2eXuPpM6AwEIB8J4BBgWCAAgBQ + JlKvDeAhsMFiEEGil0OvTIa6RngmCLUYNnEa9leJAACgkQUYNnEa9leJDg1gEAwLf8KDoAAKyYgjyI + vYvO9VEgBni1C4Xx1VjcaEmlDK8BALoFuUCK+enw76TtDcAUKhlhUiM6SDRExkS4Nskp/BcK +MIME-Version: 1.0 +Content-Type: text/plain; charset=utf-8; format=flowed; delsp=no + +-----BEGIN PGP MESSAGE----- +Hi! +-----END PGP MESSAGE----- + + diff --git a/tests/mail-data/plain.eml b/tests/mail-data/plain.eml new file mode 100644 index 00000000..69867b80 --- /dev/null +++ b/tests/mail-data/plain.eml @@ -0,0 +1,23 @@ +Subject: =?utf-8?q?Message_from_foobar=40c2=2Etestrun=2Eorg?= +Chat-Disposition-Notification-To: foobar@c2.testrun.org +Chat-User-Avatar: 0 +From: <{from_addr}> +To: <{to_addr}> +Date: Sun, 15 Oct 2023 16:41:44 +0000 +Message-ID: +References: +Chat-Version: 1.0 +Autocrypt: addr=foobar@c2.testrun.org; prefer-encrypt=mutual; + keydata=xjMEZSrw3hYJKwYBBAHaRw8BAQdAiEKNQFU28c6qsx4vo/JHdt73RXdjMOmByf/XsGiJ7m + nNFzxmb29iYXJAYzIudGVzdHJ1bi5vcmc+wosEEBYIADMCGQEFAmUq8N4CGwMECwkIBwYVCAkKCwID + FgIBFiEEGil0OvTIa6RngmCLUYNnEa9leJAACgkQUYNnEa9leJCX3gEAhm0MehE5byBBU1avPczr/I + HjNLht7Qf6++mAhlJmtDcA/0C8VYJhsUpmiDjuZaMDWNv4FO2BJG6LH7gSm6n7ClMJzjgEZSrw3hIK + KwYBBAGXVQEFAQEHQAxGG/QW0owCfMp1A+vXEMwgzWcBpNFr58kX2eXuPpM6AwEIB8J4BBgWCAAgBQ + JlKvDeAhsMFiEEGil0OvTIa6RngmCLUYNnEa9leJAACgkQUYNnEa9leJDg1gEAwLf8KDoAAKyYgjyI + vYvO9VEgBni1C4Xx1VjcaEmlDK8BALoFuUCK+enw76TtDcAUKhlhUiM6SDRExkS4Nskp/BcK +MIME-Version: 1.0 +Content-Type: text/plain; charset=utf-8; format=flowed; delsp=no + +Hi! + + diff --git a/tests/online/test_1_basic.py b/tests/online/test_1_basic.py index d4edc4c4..1d1e7907 100644 --- a/tests/online/test_1_basic.py +++ b/tests/online/test_1_basic.py @@ -55,6 +55,6 @@ def test_exceed_rate_limit(cmsetup, gencreds, mailgen): pytest.fail(f"rate limit was exceeded too early with msg {i}") outcome = e.recipients[user2.addr] assert outcome[0] == 450 - assert b'4.7.1: Too much mail from' in outcome[1] + assert b"4.7.1: Too much mail from" in outcome[1] return pytest.fail("Rate limit was not exceeded")