diff --git a/.github/workflows/patchbay.yml b/.github/workflows/patchbay.yml index fb5ff4e3b36..0c33e1cde33 100644 --- a/.github/workflows/patchbay.yml +++ b/.github/workflows/patchbay.yml @@ -31,17 +31,18 @@ jobs: - uses: actions/checkout@v6 - uses: dtolnay/rust-toolchain@stable - uses: mozilla-actions/sccache-action@v0.0.9 - - name: Install cargo-make and cargo-nextest + + - name: Install cargo-nextest uses: taiki-e/install-action@v2 with: - tool: nextest@${{ env.NEXTEST_VERSION }},cargo-make + tool: nextest@${{ env.NEXTEST_VERSION }} - name: Build patchbay tests - run: cargo make patchbay --no-run + run: cargo nextest run -p iroh --test patchbay --profile patchbay --release --no-run - name: Run patchbay tests id: tests - run: cargo make patchbay + run: cargo nextest run -p iroh --test patchbay --profile patchbay --release env: RUST_LOG: ${{ runner.debug && 'trace' || 'debug' }} PATCHBAY_LOG: trace diff --git a/Cargo.lock b/Cargo.lock index 67f6d88e5d7..5a87f4b5055 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3237,10 +3237,11 @@ checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" [[package]] name = "noq" version = "0.17.0" -source = "git+https://github.com/n0-computer/noq?branch=main#b212bbcaccaa82089cc17fb29c4458d113a0cae6" +source = "git+https://github.com/n0-computer/noq?branch=main#7d6093715845f53c26c3a185ac4b4948704d2663" dependencies = [ "bytes", "cfg_aliases", + "derive_more", "noq-proto", "noq-udp", "pin-project-lite", @@ -3257,7 +3258,7 @@ dependencies = [ [[package]] name = "noq-proto" version = "0.16.0" -source = "git+https://github.com/n0-computer/noq?branch=main#b212bbcaccaa82089cc17fb29c4458d113a0cae6" +source = "git+https://github.com/n0-computer/noq?branch=main#7d6093715845f53c26c3a185ac4b4948704d2663" dependencies = [ "aes-gcm", "aws-lc-rs", @@ -3286,7 +3287,7 @@ dependencies = [ [[package]] name = "noq-udp" version = "0.9.0" -source = "git+https://github.com/n0-computer/noq?branch=main#b212bbcaccaa82089cc17fb29c4458d113a0cae6" +source = "git+https://github.com/n0-computer/noq?branch=main#7d6093715845f53c26c3a185ac4b4948704d2663" dependencies = [ "cfg_aliases", "libc", @@ -5487,6 +5488,16 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-serde" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1" +dependencies = [ + "serde", + "tracing-core", +] + [[package]] name = "tracing-subscriber" version = "0.3.22" @@ -5497,6 +5508,8 @@ dependencies = [ "nu-ansi-term", "once_cell", "regex-automata", + "serde", + "serde_json", "sharded-slab", "smallvec", "thread_local", @@ -5504,6 +5517,7 @@ dependencies = [ "tracing", "tracing-core", "tracing-log", + "tracing-serde", ] [[package]] diff --git a/iroh/Cargo.toml b/iroh/Cargo.toml index c46b41e4317..9906fe43098 100644 --- a/iroh/Cargo.toml +++ b/iroh/Cargo.toml @@ -128,6 +128,7 @@ n0-tracing-test = "0.3" clap = { version = "4", features = ["derive"] } tracing-subscriber = { version = "0.3", features = [ "env-filter", + "json", ] } indicatif = { version = "0.18", features = ["tokio"] } parse-size = { version = "1.1.0", features = ['std'] } diff --git a/iroh/tests/patchbay.rs b/iroh/tests/patchbay.rs index f6477582986..dee388fe343 100644 --- a/iroh/tests/patchbay.rs +++ b/iroh/tests/patchbay.rs @@ -31,7 +31,7 @@ use std::time::Duration; use iroh::{TransportAddr, endpoint::Side}; use n0_error::{Result, StackResultExt, StdResultExt}; use n0_tracing_test::traced_test; -use patchbay::{LinkCondition, LinkDirection, LinkLimits, Nat, RouterPreset, TestGuard}; +use patchbay::{IpSupport, LinkCondition, LinkDirection, LinkLimits, Nat, RouterPreset, TestGuard}; use testdir::testdir; use tracing::info; @@ -79,6 +79,7 @@ async fn holepunch_simple() -> Result { .await .context("holepunch to direct")?; info!("connection became direct"); + conn.close(0u32.into(), b"bye!"); Ok(()) }) .run() @@ -97,7 +98,6 @@ async fn holepunch_simple() -> Result { /// uplink switch. #[tokio::test] #[traced_test] -#[ignore = "known to still fail"] async fn switch_uplink_v4() -> Result { let (lab, relay_map, _relay_guard, guard) = lab_with_relay(testdir!()).await?; let nat1 = lab.add_router("nat1").nat(Nat::Home).build().await?; @@ -154,6 +154,7 @@ async fn switch_uplink_v4() -> Result { .await .context("failed at ping_open")?; info!("ping done"); + conn.close(0u32.into(), b"bye!"); Ok(()) }) .run() @@ -171,7 +172,6 @@ async fn switch_uplink_v4() -> Result { /// Currently ignored because this fails in roughly half of runs. #[tokio::test] #[traced_test] -#[ignore = "known to still be flaky"] async fn switch_uplink_v6() -> Result { let (lab, relay_map, _relay_guard, guard) = lab_with_relay(testdir!()).await?; let public = lab @@ -182,6 +182,7 @@ async fn switch_uplink_v6() -> Result { let home = lab .add_router("nat2") .preset(RouterPreset::Home) + .ip_support(IpSupport::V4Only) .build() .await?; let mobile = lab @@ -249,6 +250,7 @@ async fn switch_uplink_v6() -> Result { ping_open(&conn, timeout) .await .context("ping after v6 switch")?; + conn.close(0u32.into(), b"bye!"); Ok(()) }) .run() @@ -322,6 +324,7 @@ async fn change_ifaces() -> Result { info!(addr=?next.remote_addr(), "new direct path established"); ping_open(&conn, timeout).await.context("ping_open")?; + conn.close(0u32.into(), b"bye!"); Ok(()) }) .run() @@ -377,6 +380,7 @@ async fn link_outage_recovery() -> Result { ping_open(&conn, timeout) .await .context("ping_open after direct")?; + conn.close(0u32.into(), b"bye!"); Ok(()) }) .run() @@ -505,6 +509,7 @@ async fn run_degrade_level(impaired_side: Side, level: usize) -> Result Result tracing::event!( - target: "test::_events::ladder_pass", + target: "iroh::_events::test_ladder_pass", tracing::Level::INFO, level, latency_ms = limits.latency_ms, @@ -525,7 +530,7 @@ async fn run_degrade_level(impaired_side: Side, level: usize) -> Result tracing::event!( - target: "test::_events::ladder_fail", + target: "iroh::_events::test_ladder_fail", tracing::Level::WARN, level, latency_ms = limits.latency_ms, @@ -572,7 +577,6 @@ async fn degrade_server_3_terrible() -> Result { #[tokio::test] #[traced_test] -#[ignore = "not yet passing reliably"] async fn degrade_server_4_extreme() -> Result { run_degrade_level(Side::Server, 4).await?.ok(); Ok(()) @@ -580,7 +584,6 @@ async fn degrade_server_4_extreme() -> Result { #[tokio::test] #[traced_test] -#[ignore = "not yet passing reliably"] async fn degrade_server_5_absurd() -> Result { run_degrade_level(Side::Server, 5).await?.ok(); Ok(()) @@ -617,7 +620,6 @@ async fn degrade_client_3_terrible() -> Result { #[tokio::test] #[traced_test] -#[ignore = "not yet passing reliably"] async fn degrade_client_4_extreme() -> Result { run_degrade_level(Side::Client, 4).await?.ok(); Ok(()) @@ -625,7 +627,6 @@ async fn degrade_client_4_extreme() -> Result { #[tokio::test] #[traced_test] -#[ignore = "not yet passing reliably"] async fn degrade_client_5_absurd() -> Result { run_degrade_level(Side::Client, 5).await?.ok(); Ok(()) diff --git a/iroh/tests/patchbay/util.rs b/iroh/tests/patchbay/util.rs index 4502c1c2c80..7e999a8247c 100644 --- a/iroh/tests/patchbay/util.rs +++ b/iroh/tests/patchbay/util.rs @@ -1,4 +1,4 @@ -use std::{future::Future, path::PathBuf, sync::Arc, time::Duration}; +use std::{future::Future, path::PathBuf, time::Duration}; use iroh::{ Endpoint, EndpointAddr, RelayMap, RelayMode, Watcher, @@ -9,7 +9,7 @@ use iroh_metrics::MetricsGroupSet; use n0_error::{Result, StackResultExt, StdResultExt, anyerr, ensure_any}; use n0_future::{boxed::BoxFuture, task::AbortOnDropHandle}; use patchbay::{Device, IpSupport, Lab, LabOpts, OutDir, TestGuard}; -use tokio::sync::{Barrier, oneshot}; +use tokio::sync::oneshot; use tracing::{Instrument, debug, error, error_span, event, info}; use self::relay::run_relay_server; @@ -143,10 +143,7 @@ impl Pair { let (addr_tx, addr_rx) = oneshot::channel(); let relay_map2 = self.relay_map.clone(); - let barrier = Arc::new(Barrier::new(2)); - let barrier2 = barrier.clone(); let server_task = server_device.spawn(|dev| { - let barrier = barrier2; async move { let endpoint = endpoint_builder(&dev, relay_map2).bind().await .context("server endpoint bind")?; @@ -165,8 +162,7 @@ impl Pair { Ok(()) => info!("run function completed successfully"), Err(err)=> error!("run function failed: {err:#}"), } - // Wait until the client run function completed before dropping the endpoint. - barrier.wait().await; + endpoint.close().await; for group in endpoint.metrics().groups() { dev.record_iroh_metrics(group); } @@ -190,9 +186,7 @@ impl Pair { Ok(()) => info!("run function completed successfully"), Err(err)=> error!("run function failed: {err:#}"), } - // Wait until the server run function completed before dropping the endpoint. - barrier.wait().await; - // endpoint.close().await; + endpoint.close().await; for group in endpoint.metrics().groups() { dev.record_iroh_metrics(group); }