From fa24dd17de08d1765343e5153629729d8a8f3e98 Mon Sep 17 00:00:00 2001 From: holger krekel Date: Wed, 26 Aug 2026 18:00:37 +0200 Subject: [PATCH] test: cleanup and allow a repo-root level "pytest -n6" to succeed. the fixtures from chatmaild and cmdeploy test plugins were clashing, and the "rpc" fixture was shadowed by deltachat-rpc-client. We could change the way plugins load but it's also useful to have disambiguated fixture names as we are often working across the code bases. also removes a few unused historic fluff. --- chatmaild/src/chatmaild/tests/plugin.py | 10 +++++----- chatmaild/src/chatmaild/tests/test_config.py | 4 ++-- chatmaild/src/chatmaild/tests/test_doveauth.py | 16 ++++++++-------- chatmaild/src/chatmaild/tests/test_newmail.py | 2 +- cmdeploy/pyproject.toml | 1 - .../src/cmdeploy/tests/online/test_0_qr.py | 8 ++++---- cmdeploy/src/cmdeploy/tests/plugin.py | 18 ++++++++---------- cmdeploy/src/cmdeploy/tests/pytest.ini | 2 -- 8 files changed, 28 insertions(+), 33 deletions(-) delete mode 100644 cmdeploy/src/cmdeploy/tests/pytest.ini diff --git a/chatmaild/src/chatmaild/tests/plugin.py b/chatmaild/src/chatmaild/tests/plugin.py index 2b60e453..eb4eb294 100644 --- a/chatmaild/src/chatmaild/tests/plugin.py +++ b/chatmaild/src/chatmaild/tests/plugin.py @@ -41,22 +41,22 @@ def ipv4_config(make_config): @pytest.fixture -def maildomain(example_config): +def example_maildomain(example_config): return example_config.mail_domain @pytest.fixture -def testaddr(maildomain): - return f"user.name@{maildomain}" +def testaddr(example_maildomain): + return f"user.name@{example_maildomain}" @pytest.fixture -def gencreds(maildomain): +def example_gencreds(example_maildomain): count = itertools.count() next(count) def gen(domain=None): - domain = domain if domain else maildomain + domain = domain if domain else example_maildomain while 1: num = next(count) alphanumeric = "abcdefghijklmnopqrstuvwxyz1234567890" diff --git a/chatmaild/src/chatmaild/tests/test_config.py b/chatmaild/src/chatmaild/tests/test_config.py index 8d9ce4c6..d8cac644 100644 --- a/chatmaild/src/chatmaild/tests/test_config.py +++ b/chatmaild/src/chatmaild/tests/test_config.py @@ -30,9 +30,9 @@ def test_read_config_ipv4(ipv4_config): assert ipv4_config.mail_domain == "[1.3.3.7]" -def test_read_config_basic_using_defaults(tmp_path, maildomain): +def test_read_config_basic_using_defaults(tmp_path, example_maildomain): inipath = tmp_path.joinpath("chatmail.ini") - inipath.write_text(f"[params]\nmail_domain = {maildomain}") + inipath.write_text(f"[params]\nmail_domain = {example_maildomain}") example_config = read_config(inipath) assert example_config.max_user_send_per_minute == 60 assert example_config.filtermail_smtp_port_incoming == 10081 diff --git a/chatmaild/src/chatmaild/tests/test_doveauth.py b/chatmaild/src/chatmaild/tests/test_doveauth.py index 2fa079c3..c2057196 100644 --- a/chatmaild/src/chatmaild/tests/test_doveauth.py +++ b/chatmaild/src/chatmaild/tests/test_doveauth.py @@ -19,8 +19,8 @@ def dictproxy(example_config): return AuthDictProxy(config=example_config) -def test_basic(dictproxy, gencreds): - addr, password = gencreds() +def test_basic(dictproxy, example_gencreds): + addr, password = example_gencreds() dictproxy.lookup_passdb(addr, password) data = dictproxy.lookup_userdb(addr) assert data @@ -107,7 +107,7 @@ def test_handle_dovecot_protocol_user_not_exists(example_config): assert wfile.getvalue() == b"N\n" -def test_handle_dovecot_protocol_iterate(gencreds, example_config): +def test_handle_dovecot_protocol_iterate(example_config): dictproxy = AuthDictProxy(config=example_config) dictproxy.lookup_passdb("asdf00000@chat.example.org", "q9mr3faue") dictproxy.lookup_passdb("asdf11111@chat.example.org", "q9mr3faue") @@ -174,14 +174,14 @@ def test_concurrent_creation_same_account(dictproxy): assert len(passwords_seen) == 1 -def test_50_concurrent_lookups_different_accounts(gencreds, dictproxy): +def test_50_concurrent_lookups_different_accounts(example_gencreds, dictproxy): num_threads = 50 req_per_thread = 5 results = queue.Queue() def lookup(): for i in range(req_per_thread): - addr, password = gencreds() + addr, password = example_gencreds() try: dictproxy.lookup_passdb(addr, password) except Exception: @@ -205,14 +205,14 @@ def test_50_concurrent_lookups_different_accounts(gencreds, dictproxy): def test_insufficient_resources_block_creation_not_existing_logins( - dictproxy, gencreds, monkeypatch + dictproxy, example_gencreds, monkeypatch ): - addr, password = gencreds() + addr, password = example_gencreds() assert dictproxy.lookup_passdb(addr, password) monkeypatch.setattr( chatmaild.doveauth, "has_sufficient_resources", lambda config: False ) - newaddr, newpassword = gencreds() + newaddr, newpassword = example_gencreds() assert not dictproxy.lookup_passdb(newaddr, newpassword) assert dictproxy.lookup_passdb(addr, password) diff --git a/chatmaild/src/chatmaild/tests/test_newmail.py b/chatmaild/src/chatmaild/tests/test_newmail.py index f7046ca3..852717f4 100644 --- a/chatmaild/src/chatmaild/tests/test_newmail.py +++ b/chatmaild/src/chatmaild/tests/test_newmail.py @@ -48,7 +48,7 @@ def test_create_dclogin_url_ipv4(ipv4_config): assert addr in url -def test_print_new_account(capsys, monkeypatch, maildomain, tmpdir, example_config): +def test_print_new_account(capsys, monkeypatch, tmpdir, example_config): monkeypatch.setattr(chatmaild.newemail, "CONFIG_PATH", str(example_config._inipath)) print_new_account() out, err = capsys.readouterr() diff --git a/cmdeploy/pyproject.toml b/cmdeploy/pyproject.toml index 1ddd4323..0934fb34 100644 --- a/cmdeploy/pyproject.toml +++ b/cmdeploy/pyproject.toml @@ -28,7 +28,6 @@ dependencies = [ cmdeploy = "cmdeploy.cmdeploy:main" [project.entry-points.pytest11] -"chatmaild.testplugin" = "chatmaild.tests.plugin" "cmdeploy.testplugin" = "cmdeploy.tests.plugin" [tool.pytest.ini_options] diff --git a/cmdeploy/src/cmdeploy/tests/online/test_0_qr.py b/cmdeploy/src/cmdeploy/tests/online/test_0_qr.py index b916e696..06a5e1ae 100644 --- a/cmdeploy/src/cmdeploy/tests/online/test_0_qr.py +++ b/cmdeploy/src/cmdeploy/tests/online/test_0_qr.py @@ -20,17 +20,17 @@ def test_fastcgi_working(maildomain, chatmail_config): @pytest.mark.filterwarnings("ignore::urllib3.exceptions.InsecureRequestWarning") -def test_newemail_configure(maildomain, rpc, chatmail_config): +def test_newemail_configure(maildomain, cmrpc, chatmail_config): """Test configuring accounts by scanning a QR code works.""" url = f"DCACCOUNT:https://{maildomain}/new" for i in range(3): - account_id = rpc.add_account() + account_id = cmrpc.add_account() if chatmail_config.tls_cert_mode == "self": # deltachat core's rustls rejects self-signed HTTPS certs during # set_config_from_qr, so fetch credentials via requests instead res = requests.post(f"https://{maildomain}/new", verify=False) data = res.json() - rpc.add_or_update_transport(account_id, { + cmrpc.add_or_update_transport(account_id, { "addr": data["email"], "password": data["password"], "imapServer": maildomain, @@ -38,4 +38,4 @@ def test_newemail_configure(maildomain, rpc, chatmail_config): "certificateChecks": "acceptInvalidCertificates", }) else: - rpc.add_transport_from_qr(account_id, url) + cmrpc.add_transport_from_qr(account_id, url) diff --git a/cmdeploy/src/cmdeploy/tests/plugin.py b/cmdeploy/src/cmdeploy/tests/plugin.py index 09b13043..e2350284 100644 --- a/cmdeploy/src/cmdeploy/tests/plugin.py +++ b/cmdeploy/src/cmdeploy/tests/plugin.py @@ -18,14 +18,8 @@ def format_mail_domain(raw_domain: str) -> str: return raw_domain -conftestdir = Path(__file__).parent - - def pytest_configure(config): config._benchresults = {} - config.addinivalue_line( - "markers", "slow: mark test to require --slow option to run" - ) def _get_chatmail_config(): @@ -377,8 +371,12 @@ class ChatmailACFactory: @pytest.fixture(scope="session") -def rpc(tmp_path_factory): - """Start a deltachat-rpc-server process for the test session.""" +def cmrpc(tmp_path_factory): + """Start a deltachat-rpc-server process for the test session. + + Not named "rpc": the deltachat-rpc-client pytest plugin registers a + function-scoped fixture under that name and would shadow this one. + """ # NB: accounts_dir must NOT already exist as directory -- # core-rust only creates accounts.toml if the dir doesn't exist yet. @@ -390,10 +388,10 @@ def rpc(tmp_path_factory): @pytest.fixture -def cmfactory(rpc, gencreds, maildomain, chatmail_config): +def cmfactory(cmrpc, gencreds, maildomain, chatmail_config): """Return a ChatmailACFactory for creating online Delta Chat accounts.""" return ChatmailACFactory( - rpc=rpc, + rpc=cmrpc, maildomain=maildomain, gencreds=gencreds, chatmail_config=chatmail_config, diff --git a/cmdeploy/src/cmdeploy/tests/pytest.ini b/cmdeploy/src/cmdeploy/tests/pytest.ini deleted file mode 100644 index b096b773..00000000 --- a/cmdeploy/src/cmdeploy/tests/pytest.ini +++ /dev/null @@ -1,2 +0,0 @@ -[pytest] -addopts = -vrsx --strict-markers