From 21025fa7f43b5078143926c20e144cd225f12d3d Mon Sep 17 00:00:00 2001 From: iequidoo Date: Sun, 21 Dec 2025 06:57:18 -0300 Subject: [PATCH] test: Synchronization of new transport as primary between devices This reproduces the bug when a new transport doesn't become primary on the 2nd device because I/O isn't restarted when a new transport is added from a sync message, so INBOX from the new transport isn't fetched. --- .../tests/test_multitransport.py | 23 +++++++++++++++++++ src/transport.rs | 1 + 2 files changed, 24 insertions(+) diff --git a/deltachat-rpc-client/tests/test_multitransport.py b/deltachat-rpc-client/tests/test_multitransport.py index 47f951824d..bd7875c877 100644 --- a/deltachat-rpc-client/tests/test_multitransport.py +++ b/deltachat-rpc-client/tests/test_multitransport.py @@ -207,6 +207,29 @@ def test_transport_synchronization(acfactory, log) -> None: assert ac1_clone.wait_for_incoming_msg().get_snapshot().text == "Hello!" +def test_transport_sync_new_as_primary(acfactory, log) -> None: + """Test synchronization of new transport as primary between devices.""" + ac1 = acfactory.get_online_account() + ac1_clone = ac1.clone() + ac1_clone.bring_online() + + qr = acfactory.get_account_qr() + + ac1.add_transport_from_qr(qr) + ac1_transports = ac1.list_transports() + assert len(ac1_transports) == 2 + [transport1, transport2] = ac1_transports + ac1_clone.wait_for_event(EventType.TRANSPORTS_MODIFIED) + assert len(ac1_clone.list_transports()) == 2 + assert ac1_clone.get_config("configured_addr") == transport1["addr"] + + log.section("ac1 changes the primary transport") + ac1.set_config("configured_addr", transport2["addr"]) + + ac1_clone.wait_for_event(EventType.TRANSPORTS_MODIFIED) + assert ac1_clone.get_config("configured_addr") == transport2["addr"] + + def test_recognize_self_address(acfactory) -> None: alice, bob = acfactory.get_online_accounts(2) diff --git a/src/transport.rs b/src/transport.rs index a5c05874e3..171b1256d8 100644 --- a/src/transport.rs +++ b/src/transport.rs @@ -753,6 +753,7 @@ pub(crate) async fn sync_transports( .await?; context.emit_event(EventType::TransportsModified); + // context.scheduler.restart(context).await; Ok(()) }