mirror of
https://github.com/chatmail/relay.git
synced 2026-05-19 04:18:09 +00:00
test: test concurrent user creation
This commit is contained in:
@@ -9,9 +9,10 @@ import itertools
|
||||
from email.parser import BytesParser
|
||||
from email import policy
|
||||
from pathlib import Path
|
||||
from math import ceil
|
||||
import pytest
|
||||
|
||||
from chatmaild.database import Database
|
||||
|
||||
|
||||
conftestdir = Path(__file__).parent
|
||||
|
||||
@@ -71,7 +72,7 @@ def pytest_report_header():
|
||||
|
||||
@pytest.fixture
|
||||
def benchmark(request):
|
||||
def bench(func, num, name=None):
|
||||
def bench(func, num, name=None, reportfunc=None):
|
||||
if name is None:
|
||||
name = func.__name__
|
||||
durations = []
|
||||
@@ -80,7 +81,7 @@ def benchmark(request):
|
||||
func()
|
||||
durations.append(time.time() - now)
|
||||
durations.sort()
|
||||
request.config._benchresults[name] = durations
|
||||
request.config._benchresults[name] = (reportfunc, durations)
|
||||
|
||||
return bench
|
||||
|
||||
@@ -101,7 +102,9 @@ def pytest_terminal_summary(terminalreporter):
|
||||
headers = f"{'benchmark name': <30} " + fcol(float_names)
|
||||
tr.write_line(headers)
|
||||
tr.write_line("-" * len(headers))
|
||||
for name, durations in results.items():
|
||||
summary_lines = []
|
||||
|
||||
for name, (reportfunc, durations) in results.items():
|
||||
measures = [
|
||||
sorted(durations)[len(durations) // 2],
|
||||
min(durations),
|
||||
@@ -110,13 +113,31 @@ def pytest_terminal_summary(terminalreporter):
|
||||
line = f"{name: <30} "
|
||||
line += fcol(f"{float: 2.2f}" for float in measures)
|
||||
tr.write_line(line)
|
||||
vmedian, vmin, vmax = measures
|
||||
for line in reportfunc(vmin=vmin, vmedian=vmedian, vmax=vmax):
|
||||
summary_lines.append(line)
|
||||
|
||||
if summary_lines:
|
||||
tr.write_line("")
|
||||
tr.section("benchmark summary measures")
|
||||
for line in summary_lines:
|
||||
tr.write_line(line)
|
||||
|
||||
@pytest.fixture
|
||||
def imap(maildomain):
|
||||
return ImapConn(maildomain)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def make_imap_connection(maildomain):
|
||||
def make_imap_connection():
|
||||
conn = ImapConn(maildomain)
|
||||
conn.connect()
|
||||
return conn
|
||||
|
||||
return make_imap_connection
|
||||
|
||||
|
||||
class ImapConn:
|
||||
AuthError = imaplib.IMAP4.error
|
||||
logcmd = "journalctl -f -u dovecot"
|
||||
@@ -157,6 +178,16 @@ def smtp(maildomain):
|
||||
return SmtpConn(maildomain)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def make_smtp_connection(maildomain):
|
||||
def make_smtp_connection():
|
||||
conn = SmtpConn(maildomain)
|
||||
conn.connect()
|
||||
return conn
|
||||
|
||||
return make_smtp_connection
|
||||
|
||||
|
||||
class SmtpConn:
|
||||
AuthError = smtplib.SMTPAuthenticationError
|
||||
logcmd = "journalctl -f -t postfix/smtpd -t postfix/smtp -t postfix/lmtp"
|
||||
@@ -202,6 +233,14 @@ def gencreds(maildomain):
|
||||
return lambda domain=None: next(gen(domain))
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def db(tmpdir):
|
||||
db_path = tmpdir / "passdb.sqlite"
|
||||
print("database path:", db_path)
|
||||
return Database(db_path)
|
||||
|
||||
|
||||
|
||||
#
|
||||
# Delta Chat testplugin re-use
|
||||
# use the cmfactory fixture to get chatmail instance accounts
|
||||
@@ -272,7 +311,7 @@ class Remote:
|
||||
self.sshdomain = sshdomain
|
||||
|
||||
def iter_output(self, logcmd=""):
|
||||
getjournal = f"journalctl -f" if not logcmd else logcmd
|
||||
getjournal = "journalctl -f" if not logcmd else logcmd
|
||||
self.popen = subprocess.Popen(
|
||||
["ssh", f"root@{self.sshdomain}", getjournal],
|
||||
stdout=subprocess.PIPE,
|
||||
|
||||
Reference in New Issue
Block a user