mirror of
https://github.com/chatmail/relay.git
synced 2026-05-20 21:08:03 +00:00
Compare commits
5 Commits
better-onl
...
simple-per
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0bea4fad3f | ||
|
|
446bb3483b | ||
|
|
cb5c5de154 | ||
|
|
6be51aa4df | ||
|
|
f76ddf0e22 |
@@ -27,6 +27,9 @@ chatmail-pyinfra
|
|||||||
pyproject.toml
|
pyproject.toml
|
||||||
chatmail/__init__ ...
|
chatmail/__init__ ...
|
||||||
|
|
||||||
|
# tests against the deployed system
|
||||||
|
tests/test_online_test.py
|
||||||
|
|
||||||
# doveauth tool used by dovecot's auth mechanism on the host system
|
# doveauth tool used by dovecot's auth mechanism on the host system
|
||||||
doveauth
|
doveauth
|
||||||
README.md
|
README.md
|
||||||
@@ -41,18 +44,12 @@ filtermail
|
|||||||
pyproject.toml
|
pyproject.toml
|
||||||
....
|
....
|
||||||
|
|
||||||
# online tests (after deploy)
|
|
||||||
|
|
||||||
online-tests # runnable via pytest
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# scripts for setup/development/deployment
|
# scripts for setup/development/deployment
|
||||||
|
|
||||||
scripts/
|
scripts/
|
||||||
init.sh # create venv/other perequires
|
init.sh # create venv/other perequires
|
||||||
deploy.sh # run pyinfra based deploy of everything
|
deploy.sh # run pyinfra based deploy of everything
|
||||||
test.sh # run all local and online tests
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
28
chatmail-pyinfra/tests/test_online_login.py
Normal file
28
chatmail-pyinfra/tests/test_online_login.py
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
import pytest
|
||||||
|
import imaplib
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def conn():
|
||||||
|
return connect("c1.testrun.org")
|
||||||
|
|
||||||
|
|
||||||
|
def login(conn, user, password):
|
||||||
|
print("trying to login", user, password)
|
||||||
|
conn.login(user, password)
|
||||||
|
|
||||||
|
|
||||||
|
def connect(host):
|
||||||
|
print(f"connecting to {host}")
|
||||||
|
conn = imaplib.IMAP4_SSL(host)
|
||||||
|
return conn
|
||||||
|
|
||||||
|
|
||||||
|
def test_login_ok(conn):
|
||||||
|
login(conn, "link2xt@c1.testrun.org", "Ahyei6ie")
|
||||||
|
|
||||||
|
|
||||||
|
def test_login_fail(conn):
|
||||||
|
with pytest.raises(imaplib.IMAP4.error) as excinfo:
|
||||||
|
login(conn, "link2xt@c1.testrun.org", "qweqwe")
|
||||||
|
assert "AUTHENTICATIONFAILED" in str(excinfo)
|
||||||
@@ -1,101 +0,0 @@
|
|||||||
import os
|
|
||||||
import io
|
|
||||||
import imaplib
|
|
||||||
import smtplib
|
|
||||||
import itertools
|
|
||||||
import pytest
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def maildomain():
|
|
||||||
return os.environ.get("CHATMAIL_DOMAIN", "c1.testrun.org")
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def imap(maildomain):
|
|
||||||
return ImapConn(maildomain)
|
|
||||||
|
|
||||||
|
|
||||||
class ImapConn:
|
|
||||||
def __init__(self, host):
|
|
||||||
self.host = host
|
|
||||||
|
|
||||||
def connect(self):
|
|
||||||
print(f"imap-connect {self.host}")
|
|
||||||
self.conn = imaplib.IMAP4_SSL(self.host)
|
|
||||||
|
|
||||||
def login(self, user, password):
|
|
||||||
print(f"imap-login {user!r} {password!r}")
|
|
||||||
self.conn.login(user, password)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def smtp(maildomain):
|
|
||||||
return SmtpConn(maildomain)
|
|
||||||
|
|
||||||
|
|
||||||
class SmtpConn:
|
|
||||||
def __init__(self, host):
|
|
||||||
self.host = host
|
|
||||||
|
|
||||||
def connect(self):
|
|
||||||
print(f"smtp-connect {self.host}")
|
|
||||||
self.conn = smtplib.SMTP_SSL(self.host)
|
|
||||||
|
|
||||||
def login(self, user, password):
|
|
||||||
print(f"smtp-login {user!r} {password!r}")
|
|
||||||
self.conn.login(user, password)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def gencreds(maildomain):
|
|
||||||
count = itertools.count()
|
|
||||||
|
|
||||||
def gen():
|
|
||||||
while 1:
|
|
||||||
num = next(count)
|
|
||||||
yield f"user{num}@{maildomain}", f"password{num}"
|
|
||||||
|
|
||||||
return lambda: next(gen())
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Delta Chat testplugin re-use
|
|
||||||
# use the cmfactory fixture to get chatmail instance accounts
|
|
||||||
#
|
|
||||||
|
|
||||||
class ChatmailTestProcess:
|
|
||||||
"""Provider for chatmail instance accounts as used by deltachat.testplugin.acfactory """
|
|
||||||
def __init__(self, pytestconfig, maildomain, gencreds):
|
|
||||||
self.pytestconfig = pytestconfig
|
|
||||||
self.maildomain = maildomain
|
|
||||||
self.gencreds = gencreds
|
|
||||||
self._addr2files = {}
|
|
||||||
|
|
||||||
def get_liveconfig_producer(self):
|
|
||||||
while 1:
|
|
||||||
user, password = self.gencreds()
|
|
||||||
config = {"addr": user, "mail_pw": password}
|
|
||||||
yield config
|
|
||||||
|
|
||||||
def cache_maybe_retrieve_configured_db_files(self, cache_addr, db_target_path):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def cache_maybe_store_configured_db_files(self, acc):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def cmfactory(request, maildomain, gencreds, tmpdir, data):
|
|
||||||
# cloned from deltachat.testplugin.amfactory
|
|
||||||
pytest.importorskip("deltachat")
|
|
||||||
from deltachat.testplugin import ACFactory
|
|
||||||
testproc = ChatmailTestProcess(request.config, maildomain, gencreds)
|
|
||||||
am = ACFactory(request=request, tmpdir=tmpdir, testprocess=testproc, data=data)
|
|
||||||
yield am
|
|
||||||
if hasattr(request.node, "rep_call") and request.node.rep_call.failed:
|
|
||||||
if testprocess.pytestconfig.getoption("--extra-info"):
|
|
||||||
logfile = io.StringIO()
|
|
||||||
am.dump_imap_summary(logfile=logfile)
|
|
||||||
print(logfile.getvalue())
|
|
||||||
# request.node.add_report_section("call", "imap-server-state", s)
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
class TestMailSending:
|
|
||||||
def test_one_on_one(self, cmfactory, lp):
|
|
||||||
ac1, ac2 = cmfactory.get_online_accounts(2)
|
|
||||||
chat = cmfactory.get_accepted_chat(ac1, ac2)
|
|
||||||
|
|
||||||
lp.sec("ac1: prepare and send text message to ac2")
|
|
||||||
msg1 = chat.send_text("message0")
|
|
||||||
|
|
||||||
lp.sec("wait for ac2 to receive message")
|
|
||||||
msg2 = ac2._evtracker.wait_next_incoming_message()
|
|
||||||
assert msg2.text == "message0"
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
import pytest
|
|
||||||
import imaplib
|
|
||||||
import smtplib
|
|
||||||
|
|
||||||
|
|
||||||
class TestDovecot:
|
|
||||||
def test_login_ok(self, imap, gencreds):
|
|
||||||
user, password = gencreds()
|
|
||||||
imap.connect()
|
|
||||||
imap.login(user, password)
|
|
||||||
# verify it works on another connection
|
|
||||||
imap.connect()
|
|
||||||
imap.login(user, password)
|
|
||||||
|
|
||||||
def test_login_fail(self, imap, gencreds):
|
|
||||||
user, password = gencreds()
|
|
||||||
imap.connect()
|
|
||||||
imap.login(user, password)
|
|
||||||
imap.connect()
|
|
||||||
with pytest.raises(imaplib.IMAP4.error) as excinfo:
|
|
||||||
imap.login(user, password + "wrong")
|
|
||||||
assert "AUTHENTICATIONFAILED" in str(excinfo)
|
|
||||||
|
|
||||||
|
|
||||||
class TestPostfix:
|
|
||||||
def test_login_ok(self, smtp, gencreds):
|
|
||||||
user, password = gencreds()
|
|
||||||
smtp.connect()
|
|
||||||
smtp.login(user, password)
|
|
||||||
# verify it works on another connection
|
|
||||||
smtp.connect()
|
|
||||||
smtp.login(user, password)
|
|
||||||
|
|
||||||
def test_login_fail(self, smtp, gencreds):
|
|
||||||
user, password = gencreds()
|
|
||||||
smtp.connect()
|
|
||||||
smtp.login(user, password)
|
|
||||||
smtp.connect()
|
|
||||||
with pytest.raises(smtplib.SMTPAuthenticationError) as excinfo:
|
|
||||||
smtp.login(user, password + "wrong")
|
|
||||||
assert excinfo.value.smtp_code == 535
|
|
||||||
assert "authentication failed" in str(excinfo)
|
|
||||||
@@ -3,10 +3,6 @@ python3 -m venv chatmail-pyinfra/venv
|
|||||||
chatmail-pyinfra/venv/bin/pip install pyinfra pytest
|
chatmail-pyinfra/venv/bin/pip install pyinfra pytest
|
||||||
chatmail-pyinfra/venv/bin/pip install -e chatmail-pyinfra
|
chatmail-pyinfra/venv/bin/pip install -e chatmail-pyinfra
|
||||||
chatmail-pyinfra/venv/bin/pip install -e doveauth
|
chatmail-pyinfra/venv/bin/pip install -e doveauth
|
||||||
|
|
||||||
python3 -m venv doveauth/venv
|
python3 -m venv doveauth/venv
|
||||||
doveauth/venv/bin/pip install pytest build
|
doveauth/venv/bin/pip install pytest build
|
||||||
doveauth/venv/bin/pip install -e doveauth
|
doveauth/venv/bin/pip install -e doveauth
|
||||||
|
|
||||||
python3 -m venv online-tests/venv
|
|
||||||
online-tests/venv/bin/pip install pytest pytest-timeout pdbpp deltachat
|
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
#!/bin/bash
|
#!/bin/sh
|
||||||
pushd doveauth/src/doveauth
|
chatmail-pyinfra/venv/bin/pytest chatmail-pyinfra/tests
|
||||||
|
cd doveauth/src/doveauth
|
||||||
../../venv/bin/pytest
|
../../venv/bin/pytest
|
||||||
popd
|
|
||||||
|
|
||||||
online-tests/venv/bin/pytest online-tests/ -vrx --durations=5
|
|
||||||
|
|||||||
Reference in New Issue
Block a user