mirror of
https://github.com/chatmail/core.git
synced 2026-05-02 04:46:29 +03:00
refactor preconfigure handling to not break deltabot's usage of deltachat's test fixtures and
relax timestamp comparisons
This commit is contained in:
@@ -46,7 +46,6 @@ class Account(object):
|
|||||||
)
|
)
|
||||||
|
|
||||||
hook = hookspec.Global._get_plugin_manager().hook
|
hook = hookspec.Global._get_plugin_manager().hook
|
||||||
hook.account_init(account=self)
|
|
||||||
|
|
||||||
self._threads = iothreads.IOThreads(self)
|
self._threads = iothreads.IOThreads(self)
|
||||||
self._hook_event_queue = queue.Queue()
|
self._hook_event_queue = queue.Queue()
|
||||||
@@ -61,6 +60,7 @@ class Account(object):
|
|||||||
raise ValueError("Could not dc_open: {}".format(db_path))
|
raise ValueError("Could not dc_open: {}".format(db_path))
|
||||||
self._configkeys = self.get_config("sys.config_keys").split()
|
self._configkeys = self.get_config("sys.config_keys").split()
|
||||||
atexit.register(self.shutdown)
|
atexit.register(self.shutdown)
|
||||||
|
hook.account_init(account=self)
|
||||||
|
|
||||||
@hookspec.account_hookimpl
|
@hookspec.account_hookimpl
|
||||||
def process_ffi_event(self, ffi_event):
|
def process_ffi_event(self, ffi_event):
|
||||||
@@ -519,11 +519,11 @@ class Account(object):
|
|||||||
# meta API for start/stop and event based processing
|
# meta API for start/stop and event based processing
|
||||||
#
|
#
|
||||||
|
|
||||||
def add_account_plugin(self, plugin):
|
def add_account_plugin(self, plugin, name=None):
|
||||||
""" add an account plugin which implements one or more of
|
""" add an account plugin which implements one or more of
|
||||||
the :class:`deltachat.hookspec.PerAccount` hooks.
|
the :class:`deltachat.hookspec.PerAccount` hooks.
|
||||||
"""
|
"""
|
||||||
self._pm.register(plugin)
|
self._pm.register(plugin, name=name)
|
||||||
self._pm.check_pending()
|
self._pm.check_pending()
|
||||||
return plugin
|
return plugin
|
||||||
|
|
||||||
|
|||||||
@@ -127,7 +127,37 @@ def session_liveconfig(request):
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def acfactory(pytestconfig, tmpdir, request, session_liveconfig, datadir):
|
def data(request):
|
||||||
|
class Data:
|
||||||
|
def __init__(self):
|
||||||
|
# trying to find test data heuristically
|
||||||
|
# because we are run from a dev-setup with pytest direct,
|
||||||
|
# through tox, and then maybe also from deltachat-binding
|
||||||
|
# users like "deltabot".
|
||||||
|
self.paths = [os.path.normpath(x) for x in [
|
||||||
|
os.path.join(os.path.dirname(request.fspath.strpath), "data"),
|
||||||
|
os.path.join(os.path.dirname(__file__), "..", "..", "..", "test-data")
|
||||||
|
]]
|
||||||
|
|
||||||
|
def get_path(self, bn):
|
||||||
|
""" return path of file or None if it doesn't exist. """
|
||||||
|
for path in self.paths:
|
||||||
|
fn = os.path.join(path, *bn.split("/"))
|
||||||
|
if os.path.exists(fn):
|
||||||
|
return fn
|
||||||
|
print("WARNING: path does not exist: {!r}".format(fn))
|
||||||
|
|
||||||
|
def read_path(self, bn, mode="r"):
|
||||||
|
fn = self.get_path(bn)
|
||||||
|
if fn is not None:
|
||||||
|
with open(fn, mode) as f:
|
||||||
|
return f.read()
|
||||||
|
|
||||||
|
return Data()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def acfactory(pytestconfig, tmpdir, request, session_liveconfig, data):
|
||||||
|
|
||||||
class AccountMaker:
|
class AccountMaker:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@@ -164,11 +194,13 @@ def acfactory(pytestconfig, tmpdir, request, session_liveconfig, datadir):
|
|||||||
# Only set a key if we haven't used it yet for another account.
|
# Only set a key if we haven't used it yet for another account.
|
||||||
if self._generated_keys:
|
if self._generated_keys:
|
||||||
keyname = self._generated_keys.pop(0)
|
keyname = self._generated_keys.pop(0)
|
||||||
fname_pub = "key/{name}-public.asc".format(name=keyname)
|
fname_pub = data.read_path("key/{name}-public.asc".format(name=keyname))
|
||||||
fname_sec = "key/{name}-secret.asc".format(name=keyname)
|
fname_sec = data.read_path("key/{name}-secret.asc".format(name=keyname))
|
||||||
account._preconfigure_keypair(addr,
|
if fname_pub and fname_sec:
|
||||||
datadir.join(fname_pub).read(),
|
account._preconfigure_keypair(addr, fname_pub, fname_sec)
|
||||||
datadir.join(fname_sec).read())
|
return True
|
||||||
|
else:
|
||||||
|
print("WARN: could not use preconfigured keys for {!r}".format(addr))
|
||||||
|
|
||||||
def get_configured_offline_account(self):
|
def get_configured_offline_account(self):
|
||||||
ac = self.get_unconfigured_account()
|
ac = self.get_unconfigured_account()
|
||||||
|
|||||||
@@ -1,33 +1,5 @@
|
|||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
|
|
||||||
import os
|
|
||||||
import pytest
|
|
||||||
import py
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="session")
|
|
||||||
def data():
|
|
||||||
class Data:
|
|
||||||
def __init__(self):
|
|
||||||
self.path = os.path.join(os.path.dirname(__file__), "data")
|
|
||||||
|
|
||||||
def get_path(self, bn):
|
|
||||||
fn = os.path.join(self.path, bn)
|
|
||||||
assert os.path.exists(fn)
|
|
||||||
return fn
|
|
||||||
return Data()
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope='session')
|
|
||||||
def datadir():
|
|
||||||
"""The py.path.local object of the test-data/ directory."""
|
|
||||||
for path in reversed(py.path.local(__file__).parts()):
|
|
||||||
datadir = path.join('test-data')
|
|
||||||
if datadir.isdir():
|
|
||||||
return datadir
|
|
||||||
else:
|
|
||||||
pytest.skip('test-data directory not found')
|
|
||||||
|
|
||||||
|
|
||||||
def wait_configuration_progress(account, min_target, max_target=1001):
|
def wait_configuration_progress(account, min_target, max_target=1001):
|
||||||
min_target = min(min_target, max_target)
|
min_target = min(min_target, max_target)
|
||||||
|
|||||||
1
python/tests/data/key
Symbolic link
1
python/tests/data/key
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../test-data/key
|
||||||
@@ -26,11 +26,12 @@ class TestOfflineAccountBasic:
|
|||||||
ac1 = Account(p.strpath, os_name="solarpunk")
|
ac1 = Account(p.strpath, os_name="solarpunk")
|
||||||
ac1.get_info()
|
ac1.get_info()
|
||||||
|
|
||||||
def test_preconfigure_keypair(self, acfactory, datadir):
|
def test_preconfigure_keypair(self, acfactory, data):
|
||||||
ac = acfactory.get_unconfigured_account()
|
ac = acfactory.get_unconfigured_account()
|
||||||
ac._preconfigure_keypair("alice@example.com",
|
alice_public = data.read_path("key/alice-public.asc")
|
||||||
datadir.join("key/alice-public.asc").read(),
|
alice_secret = data.read_path("key/alice-secret.asc")
|
||||||
datadir.join("key/alice-secret.asc").read())
|
assert alice_public and alice_secret
|
||||||
|
ac._preconfigure_keypair("alice@example.com", alice_public, alice_secret)
|
||||||
|
|
||||||
def test_getinfo(self, acfactory):
|
def test_getinfo(self, acfactory):
|
||||||
ac1 = acfactory.get_unconfigured_account()
|
ac1 = acfactory.get_unconfigured_account()
|
||||||
@@ -827,7 +828,7 @@ class TestOnlineAccount:
|
|||||||
assert msg_in in chat2.get_messages()
|
assert msg_in in chat2.get_messages()
|
||||||
assert chat2.is_deaddrop()
|
assert chat2.is_deaddrop()
|
||||||
assert chat2.count_fresh_messages() == 0
|
assert chat2.count_fresh_messages() == 0
|
||||||
assert msg_in.time_received > msg_in.time_sent
|
assert msg_in.time_received >= msg_out.time_sent
|
||||||
|
|
||||||
lp.sec("create new chat with contact and verify it's proper")
|
lp.sec("create new chat with contact and verify it's proper")
|
||||||
chat2b = ac2.create_chat_by_message(msg_in)
|
chat2b = ac2.create_chat_by_message(msg_in)
|
||||||
|
|||||||
Reference in New Issue
Block a user