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:
parent
940f665b54
commit
c02abb8a61
5 changed files with 67 additions and 39 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
27
python/tests/test_account.py
Normal file
27
python/tests/test_account.py
Normal 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
|
|
@ -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
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue