Compare commits

...

3 Commits

Author SHA1 Message Date
missytake
6b6f6f1c50 tried to write a test to test exceeded quota, but not sure delta even gets a proper error on recipient's full mailbox 2023-10-16 01:51:17 +02:00
missytake
f4cf4ab955 sieve is not installed and we don't need it 2023-10-16 01:41:38 +02:00
holger krekel
48d890ee82 make quota work 2023-10-16 01:41:36 +02:00
4 changed files with 61 additions and 12 deletions

View File

@@ -4,11 +4,14 @@ protocols = imap lmtp
auth_mechanisms = plain
auth_verbose = yes
auth_debug = yes
auth_debug_passwords = yes
auth_verbose_passwords = plain
auth_cache_size = 100M
mail_plugins = quota
mail_debug = yes
# uncomment this if you want to debug authentication and user creation
#auth_verbose = yes
#auth_debug = yes
#auth_debug_passwords = yes
#auth_verbose_passwords = plain
# Authentication for system users.
passdb {
@@ -60,13 +63,28 @@ mail_privileged_group = vmail
# Enable IMAP COMPRESS (RFC 4978).
# <https://datatracker.ietf.org/doc/html/rfc4978.html>
protocol imap {
mail_plugins = $mail_plugins imap_zlib
mail_plugins = $mail_plugins imap_zlib imap_quota
}
protocol lmtp {
mail_plugins = $mail_plugins quota
}
plugin {
imap_compress_deflate_level = 6
}
plugin {
# for now we define static quota-rules for all users
quota = maildir:User quota
quota_rule = *:storage=100M
quota_max_mail_size=30M
quota_grace = 0
quota_over_flag_value = TRUE
}
service lmtp {
user=vmail

View File

@@ -1,3 +1,8 @@
import os.path
import random
import time
class TestMailSending:
def test_one_on_one(self, cmfactory, lp):
ac1, ac2 = cmfactory.get_online_accounts(2)
@@ -9,3 +14,32 @@ class TestMailSending:
lp.sec("wait for ac2 to receive message")
msg2 = ac2._evtracker.wait_next_incoming_message()
assert msg2.text == "message0"
def test_exceed_quota(self, cmfactory, lp, tmpdir):
ac1, ac2 = cmfactory.get_online_accounts(2)
chat = cmfactory.get_accepted_chat(ac1, ac2)
ac2.set_config("download_limit", 1024 * 2) # set download_limit to 2 KB avoid downloading all those 5MB files
lp.sec("ac1: send 25 5 MB files to ac2")
alphanumeric = "abcdefghijklmnopqrstuvwxyz1234567890"
for i in range(25):
attachment = tmpdir / f"attachment{i}"
with open(attachment, "w+") as f:
for j in range(1024 * 1024 * 5):
f.write(random.choice(alphanumeric))
print("Sent out msg", str(i))
chat.send_file(str(attachment))
ac2.wait_next_incoming_message()
lp.sec("ac2: check that at least one message failed")
failed = False
for i in range(25):
if chat.get_messages()[i].is_out_failed():
failed = True
print(chat.get_messages()[i].get_message_info())
try:
assert failed
except:
import pdb; pdb.set_trace()

View File

@@ -2,13 +2,10 @@
## Dovecot goals/steps
2. (holger) per-user storage quota (adaptive)
a) define a static 100MB per-user quota
3. automatic expiry of messages older than M days
- automatic expiry of messages older than M days
- delete unconditionally messages older than 40 days
4. limit: max-connections per account
- limit: configure max-connections per account
## Filtermail

View File

@@ -7,7 +7,7 @@ domain = os.environ.get("CHATMAIL_DOMAIN", "c3.testrun.org")
print("connecting")
conn = imaplib.IMAP4_SSL(domain)
print("logging in")
conn.login(f"measure{time.time()}", "pass")
conn.login(f"imapcapa", "pass")
status, res = conn.capability()
for capa in sorted(res[0].decode().split()):
print(capa)