1
0
Fork 0
mirror of https://github.com/deltachat/deltachat-core.git synced 2025-10-04 10:19:16 +02:00

added a more general way to configure live test accounts for testing

This commit is contained in:
holger krekel 2018-09-07 19:10:14 +02:00
parent 940f665b54
commit c02abb8a61
5 changed files with 67 additions and 39 deletions

View file

@ -35,14 +35,14 @@ class EventHandler:
class Account: class Account:
def __init__(self, db_path, logcallback=eventprinter, eventhandler=None): def __init__(self, db_path, logcallback=None, eventhandler=None):
self.dc_context = ctx = capi.lib.dc_context_new( self.dc_context = ctx = capi.lib.dc_context_new(
capi.lib.py_dc_callback, capi.lib.py_dc_callback,
capi.ffi.NULL, capi.ffi.NULL) capi.ffi.NULL, capi.ffi.NULL)
if hasattr(db_path, "encode"): if hasattr(db_path, "encode"):
db_path = db_path.encode("utf8") db_path = db_path.encode("utf8")
capi.lib.dc_open(ctx, db_path, capi.ffi.NULL) capi.lib.dc_open(ctx, db_path, capi.ffi.NULL)
self._logcallback = logcallback or (lambda *args: None) self._logcallback = logcallback or eventprinter
if eventhandler is None: if eventhandler is None:
eventhandler = EventHandler(self.dc_context) eventhandler = EventHandler(self.dc_context)
self._eventhandler = eventhandler self._eventhandler = eventhandler

View file

@ -1,19 +1,45 @@
import pytest import pytest
from deltachat import Account
def pytest_addoption(parser): def pytest_addoption(parser):
parser.addoption("--user", action="store", default=None, parser.addoption(
help="user and domain of test account: example user@example.org") "--liveconfig", action="store", default=None,
parser.addoption("--password", action="store", default=None) help="a file with >=2 lines where each line contains NAME=VALUE config settings for one account"
)
_dummy = object()
@pytest.fixture @pytest.fixture
def userpassword(pytestconfig): def acfactory(pytestconfig, tmpdir, request):
user = pytestconfig.getoption("--user") fn = pytestconfig.getoption("--liveconfig")
passwd = pytestconfig.getoption("--password") if not fn:
if user and passwd: pytest.skip("specify a --liveconfig file to run tests with real accounts")
return user, passwd
pytest.skip("specify a test account with --user and --password options") class AccountMaker:
def __init__(self):
self.configlist = []
for line in open(fn):
if line.strip():
d = {}
for part in line.split():
name, value = part.split("=")
d[name] = value
self.configlist.append(d)
self.count = 0
def get_live_account(self, logcallback=None):
configdict = self.configlist.pop(0)
tmpdb = tmpdir.join("testdb%d" % self.count)
ac = Account(tmpdb.strpath, logcallback=logcallback)
ac.set_config(**configdict)
ac.start()
request.addfinalizer(ac.shutdown)
return ac
return AccountMaker()
@pytest.fixture @pytest.fixture

View file

@ -0,0 +1,27 @@
from __future__ import print_function
import re
try:
from queue import Queue
except ImportError:
from Queue import Queue
class TestLive:
def test_basic_configure_login_ok(self, acfactory):
q = Queue()
acfactory.get_live_account(logcallback=q.put)
imap_ok = smtp_ok = False
while not imap_ok or not smtp_ok:
evt_name, data1, data2 = q.get(timeout=5.0)
print(evt_name, data1, data2)
if evt_name == "DC_EVENT_ERROR":
assert 0
if evt_name == "DC_EVENT_INFO":
if re.match("imap-login.*ok.", data2.lower()):
imap_ok = True
if re.match("smtp-login.*ok.", data2.lower()):
smtp_ok = True
def test_message_send_receive(self, acfactory):
pass

View file

@ -1,12 +1,5 @@
from __future__ import print_function from __future__ import print_function
import deltachat
import re
from deltachat import capi from deltachat import capi
try:
from queue import Queue
except ImportError:
from Queue import Queue
def test_empty_context(): def test_empty_context():
@ -16,23 +9,3 @@ def test_empty_context():
def test_event_defines(): def test_event_defines():
assert capi.lib.DC_EVENT_INFO == 100 assert capi.lib.DC_EVENT_INFO == 100
class TestLive:
def test_basic_configure_login_ok(self, request, tmp_db_path, userpassword):
q = Queue()
dc = deltachat.Account(tmp_db_path, logcallback=q.put)
dc.set_config(addr=userpassword[0], mail_pw=userpassword[1])
dc.start()
request.addfinalizer(dc.shutdown)
imap_ok = smtp_ok = False
while not imap_ok or not smtp_ok:
evt_name, data1, data2 = q.get(timeout=5.0)
print(evt_name, data1, data2)
if evt_name == "DC_EVENT_ERROR":
assert 0
if evt_name == "DC_EVENT_INFO":
if re.match("imap-login.*ok.", data2.lower()):
imap_ok = True
if re.match("smtp-login.*ok.", data2.lower()):
smtp_ok = True

View file

@ -10,7 +10,9 @@ envlist =
[testenv] [testenv]
commands = pytest {posargs:tests} commands = pytest {posargs:tests}
usedevelop = True usedevelop = True
deps = pytest deps =
pytest
pdbpp
[testenv:linting] [testenv:linting]
skipsdist = True skipsdist = True