From 744594a484eae457827c31f55b0bfdba27a41b7a Mon Sep 17 00:00:00 2001 From: grumbach Date: Mon, 27 Apr 2026 12:30:26 +0900 Subject: [PATCH 1/2] fix(tests): disable IPv6 in e2e testnet to fix Windows/macOS CI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The e2e test harness creates loopback-only nodes on 127.0.0.1 but left `ipv6` at its default (true), which makes saorsa-core try to bind a dual-stack v6 socket on top. On Windows GitHub Actions runners and some macOS runners that bind fails outright, producing: Failed to create node 0: Transport error: Setup failed: Failed to create dual-stack network nodes: Failed to create transport Two e2e tests visibly broke on the merged v0.11.0 RC: test replication::test_verification_with_paid_list_check ... FAILED test security_attacks::test_attack_proof_too_large ... FAILED (These tests run later in the suite, after the dual-stack failure fans out to subsequent node creations.) Fix: pin `ipv6(false)` in `CoreNodeConfig::builder()` for the test testnet. Loopback-only tests don't need v6 — the existing `SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), port)` already locks the bind to v4 anyway. Matching change is already present in ant-client's `tests/support/mod.rs` (line 246). --- tests/e2e/testnet.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/e2e/testnet.rs b/tests/e2e/testnet.rs index a452fdd..7ca5073 100644 --- a/tests/e2e/testnet.rs +++ b/tests/e2e/testnet.rs @@ -1145,8 +1145,14 @@ impl TestNetwork { // Build configuration for saorsa-core P2PNode (saorsa-core is an external crate). // .local(true) auto-enables allow_loopback for test nodes on 127.0.0.1. + // .ipv6(false) keeps the bind on 127.0.0.1 only; Windows GitHub + // Actions runners (and some macOS runners) can't bind a dual-stack + // v6 socket and the whole testnet startup fails with + // "Failed to create dual-stack network nodes: Failed to create transport". + // Loopback-only tests don't need v6. let mut core_config = CoreNodeConfig::builder() .port(node.port) + .ipv6(false) .local(true) .connection_timeout(Duration::from_secs(TEST_CORE_CONNECTION_TIMEOUT_SECS)) .max_message_size(MAX_REPLICATION_MESSAGE_SIZE.max(MAX_WIRE_MESSAGE_SIZE)) From cb03df584a02aabaede0180cecbc79d929dbb37a Mon Sep 17 00:00:00 2001 From: grumbach Date: Mon, 27 Apr 2026 12:35:00 +0900 Subject: [PATCH 2/2] fix(tests): also disable IPv6 in live_testnet harness Same dual-stack bind issue as e2e/testnet.rs. Currently the tests in live_testnet.rs are #[ignore]'d pending a dht_put/dht_get rewrite for saorsa-core >= 0.16, so this doesn't fix anything observable today. Apply the fix preventatively so the bug doesn't resurface when those tests are revived. --- tests/e2e/live_testnet.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/e2e/live_testnet.rs b/tests/e2e/live_testnet.rs index 6978235..1b8d119 100644 --- a/tests/e2e/live_testnet.rs +++ b/tests/e2e/live_testnet.rs @@ -38,6 +38,7 @@ async fn create_testnet_client() -> P2PNode { println!("Connecting to testnet via: {bootstrap_addrs:?}"); let mut config = CoreNodeConfig::builder() + .ipv6(false) .local(true) .build() .expect("Failed to create config");