From 7a694257d9b6ea12cd064a9c73ac10a052a1db38 Mon Sep 17 00:00:00 2001 From: "Sijie.Sun" Date: Thu, 25 Sep 2025 08:24:56 +0800 Subject: [PATCH] add test for ipv6 wireguard vpn portal (#1408) --- easytier/src/tests/mod.rs | 32 +++++++++++++++++--------------- easytier/src/tests/three_node.rs | 26 ++++++++++++++++++++------ 2 files changed, 37 insertions(+), 21 deletions(-) diff --git a/easytier/src/tests/mod.rs b/easytier/src/tests/mod.rs index 4c81fad..ee79b54 100644 --- a/easytier/src/tests/mod.rs +++ b/easytier/src/tests/mod.rs @@ -25,7 +25,7 @@ pub fn del_netns(name: &str) { .output(); } -pub fn create_netns(name: &str, ipv4: &str) { +pub fn create_netns(name: &str, ipv4: &str, ipv6: &str) { // create netns let _ = std::process::Command::new("ip") .args(["netns", "add", name]) @@ -76,20 +76,22 @@ pub fn create_netns(name: &str, ipv4: &str) { .output() .unwrap(); - let _ = std::process::Command::new("ip") - .args([ - "netns", - "exec", - name, - "ip", - "addr", - "add", - ipv4, - "dev", - get_guest_veth_name(name), - ]) - .output() - .unwrap(); + for ip in [ipv4, ipv6] { + let _ = std::process::Command::new("ip") + .args([ + "netns", + "exec", + name, + "ip", + "addr", + "add", + ip, + "dev", + get_guest_veth_name(name), + ]) + .output() + .unwrap(); + } } pub fn prepare_bridge(name: &str) { diff --git a/easytier/src/tests/three_node.rs b/easytier/src/tests/three_node.rs index 0b46617..da3af46 100644 --- a/easytier/src/tests/three_node.rs +++ b/easytier/src/tests/three_node.rs @@ -40,10 +40,10 @@ pub fn prepare_linux_namespaces() { del_netns("net_c"); del_netns("net_d"); - create_netns("net_a", "10.1.1.1/24"); - create_netns("net_b", "10.1.1.2/24"); - create_netns("net_c", "10.1.2.3/24"); - create_netns("net_d", "10.1.2.4/24"); + create_netns("net_a", "10.1.1.1/24", "fd11::1/64"); + create_netns("net_b", "10.1.1.2/24", "fd11::2/64"); + create_netns("net_c", "10.1.2.3/24", "fd12::3/64"); + create_netns("net_d", "10.1.2.4/24", "fd12::4/64"); prepare_bridge("br_a"); prepare_bridge("br_b"); @@ -931,10 +931,18 @@ fn run_wireguard_client( } #[cfg(feature = "wireguard")] +#[rstest::rstest] #[tokio::test] #[serial_test::serial] -pub async fn wireguard_vpn_portal() { +pub async fn wireguard_vpn_portal(#[values(true, false)] test_v6: bool) { let mut insts = init_three_node("tcp").await; + + if test_v6 { + ping6_test("net_d", "fd12::3", None).await; + } else { + ping_test("net_d", "10.1.2.3", None).await; + } + let net_ns = NetNS::new(Some("net_d".into())); let _g = net_ns.guard(); insts[2] @@ -946,11 +954,17 @@ pub async fn wireguard_vpn_portal() { }); insts[2].run_vpn_portal().await.unwrap(); + let dst_socket_addr = if test_v6 { + "[fd12::3]:22121".parse().unwrap() + } else { + "10.1.2.3:22121".parse().unwrap() + }; + let net_ns = NetNS::new(Some("net_d".into())); let _g = net_ns.guard(); let wg_cfg = get_wg_config_for_portal(&insts[2].get_global_ctx().get_network_identity()); run_wireguard_client( - "10.1.2.3:22121".parse().unwrap(), + dst_socket_addr, Key::try_from(wg_cfg.my_public_key()).unwrap(), Key::try_from(wg_cfg.peer_secret_key()).unwrap(), vec!["10.14.14.0/24".to_string(), "10.144.144.0/24".to_string()],