Skip to content

Commit 85ea65d

Browse files
authored
chore: upgrade to iroh, iroh-gossip, and iroh-blobs v0.32.0 (#33)
## Description Release prep! Upgrade `iroh`, `iroh-gossip`, and `iroh-blobs` dependencies. Remove `quinn` dependency.
1 parent 7c4c871 commit 85ea65d

File tree

9 files changed

+481
-366
lines changed

9 files changed

+481
-366
lines changed

Cargo.lock

Lines changed: 418 additions & 317 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@ futures-buffered = "0.2.4"
3535
futures-lite = "2.3.0"
3636
futures-util = { version = "0.3.25" }
3737
hex = "0.4"
38-
iroh-base = { version = "0.31", features = ["ticket"] }
39-
iroh-blobs = { version = "0.31" }
40-
iroh-gossip = { version = "0.31", optional = true, features = ["net"] }
38+
iroh-base = { version = "0.32", features = ["ticket"] }
39+
iroh-blobs = { version = "0.32" }
40+
iroh-gossip = { version = "0.32", optional = true, features = ["net"] }
4141
iroh-metrics = { version = "0.31", default-features = false }
42-
iroh = { version = "0.31", optional = true }
42+
iroh = { version = "0.32", optional = true }
4343
num_enum = "0.7"
4444
postcard = { version = "1", default-features = false, features = ["alloc", "use-std", "experimental-derive"] }
4545
rand = "0.8.5"
@@ -58,8 +58,8 @@ tracing = "0.1"
5858

5959
# rpc
6060
nested_enum_utils = { version = "0.1.0", optional = true }
61-
quic-rpc = { version = "0.17", optional = true }
62-
quic-rpc-derive = { version = "0.17", optional = true }
61+
quic-rpc = { version = "0.18", optional = true }
62+
quic-rpc-derive = { version = "0.18", optional = true }
6363
serde-error = { version = "0.1.3", optional = true }
6464
portable-atomic = { version = "1.9.0", optional = true }
6565

@@ -73,11 +73,11 @@ colored = { version = "2.1", optional = true }
7373
shellexpand = { version = "3.1", optional = true }
7474

7575
[dev-dependencies]
76-
iroh-test = "0.31"
7776
rand_chacha = "0.3.1"
7877
tokio = { version = "1", features = ["sync", "macros"] }
7978
proptest = "1.2.0"
8079
tempfile = "3.4"
80+
tracing-test = "0.2.5"
8181
test-strategy = "0.4"
8282
tracing-subscriber = { version = "0.3.18", features = ["env-filter"] }
8383
parking_lot = "0.12.3"

README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,7 @@ async fn main() -> anyhow::Result<()> {
5959
let builder = Router::builder(endpoint);
6060

6161
// build the blobs protocol
62-
let local_pool = LocalPool::default();
63-
let blobs = Blobs::memory().build(local_pool.handle(), builder.endpoint());
62+
let blobs = Blobs::memory().build(builder.endpoint());
6463

6564
// build the gossip protocol
6665
let gossip = Gossip::builder().spawn(builder.endpoint().clone()).await?;

src/net.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std::{
55
time::{Duration, Instant},
66
};
77

8-
use iroh::{endpoint::get_remote_node_id, Endpoint, NodeAddr, PublicKey};
8+
use iroh::{Endpoint, NodeAddr, PublicKey};
99
#[cfg(feature = "metrics")]
1010
use iroh_metrics::inc;
1111
use serde::{Deserialize, Serialize};
@@ -115,7 +115,7 @@ where
115115
{
116116
let t_start = Instant::now();
117117
let connection = connecting.await.map_err(AcceptError::connect)?;
118-
let peer = get_remote_node_id(&connection).map_err(AcceptError::connect)?;
118+
let peer = connection.remote_node_id().map_err(AcceptError::connect)?;
119119
let (mut send_stream, mut recv_stream) = connection
120120
.accept_bi()
121121
.await

src/net/codec.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,7 @@ mod tests {
297297
use iroh::SecretKey;
298298
use iroh_blobs::Hash;
299299
use rand_core::{CryptoRngCore, SeedableRng};
300+
use tracing_test::traced_test;
300301

301302
use super::*;
302303
use crate::{
@@ -419,16 +420,16 @@ mod tests {
419420
}
420421

421422
#[tokio::test]
423+
#[traced_test]
422424
async fn test_sync_many_authors_memory() -> Result<()> {
423-
let _guard = iroh_test::logging::setup();
424425
let alice_store = store::Store::memory();
425426
let bob_store = store::Store::memory();
426427
test_sync_many_authors(alice_store, bob_store).await
427428
}
428429

429430
#[tokio::test]
431+
#[traced_test]
430432
async fn test_sync_many_authors_fs() -> Result<()> {
431-
let _guard = iroh_test::logging::setup();
432433
let tmpdir = tempfile::tempdir()?;
433434
let alice_store = store::fs::Store::persistent(tmpdir.path().join("a.db"))?;
434435
let bob_store = store::fs::Store::persistent(tmpdir.path().join("b.db"))?;
@@ -612,16 +613,16 @@ mod tests {
612613
}
613614

614615
#[tokio::test]
616+
#[traced_test]
615617
async fn test_sync_timestamps_memory() -> Result<()> {
616-
let _guard = iroh_test::logging::setup();
617618
let alice_store = store::Store::memory();
618619
let bob_store = store::Store::memory();
619620
test_sync_timestamps(alice_store, bob_store).await
620621
}
621622

622623
#[tokio::test]
624+
#[traced_test]
623625
async fn test_sync_timestamps_fs() -> Result<()> {
624-
let _guard = iroh_test::logging::setup();
625626
let tmpdir = tempfile::tempdir()?;
626627
let alice_store = store::fs::Store::persistent(tmpdir.path().join("a.db"))?;
627628
let bob_store = store::fs::Store::persistent(tmpdir.path().join("b.db"))?;

src/ticket.rs

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ impl std::str::FromStr for DocTicket {
6565
mod tests {
6666
use std::str::FromStr;
6767

68+
use anyhow::{ensure, Context, Result};
6869
use iroh::PublicKey;
69-
use iroh_test::{assert_eq_hex, hexdump::parse_hexdump};
7070

7171
use super::*;
7272
use crate::NamespaceId;
@@ -106,6 +106,34 @@ mod tests {
106106
00 # no relay url
107107
00 # no direct addresses
108108
").unwrap();
109-
assert_eq_hex!(base32, expected);
109+
assert_eq!(base32, expected);
110+
}
111+
112+
/// Parses a commented multi line hexdump into a vector of bytes.
113+
///
114+
/// This is useful to write wire level protocol tests.
115+
pub fn parse_hexdump(s: &str) -> Result<Vec<u8>> {
116+
let mut result = Vec::new();
117+
118+
for (line_number, line) in s.lines().enumerate() {
119+
let data_part = line.split('#').next().unwrap_or("");
120+
let cleaned: String = data_part.chars().filter(|c| !c.is_whitespace()).collect();
121+
122+
ensure!(
123+
cleaned.len() % 2 == 0,
124+
"Non-even number of hex chars detected on line {}.",
125+
line_number + 1
126+
);
127+
128+
for i in (0..cleaned.len()).step_by(2) {
129+
let byte_str = &cleaned[i..i + 2];
130+
let byte = u8::from_str_radix(byte_str, 16)
131+
.with_context(|| format!("Invalid hex data on line {}.", line_number + 1))?;
132+
133+
result.push(byte);
134+
}
135+
}
136+
137+
Ok(result)
110138
}
111139
}

tests/client.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@ use iroh_docs::store::Query;
99
use rand::RngCore;
1010
use testresult::TestResult;
1111
use tokio::io::AsyncWriteExt;
12+
use tracing_test::traced_test;
1213
use util::Node;
1314

1415
mod util;
1516

1617
/// Test that closing a doc does not close other instances.
1718
#[tokio::test]
19+
#[traced_test]
1820
async fn test_doc_close() -> Result<()> {
19-
let _guard = iroh_test::logging::setup();
20-
2121
let node = Node::memory().spawn().await?;
2222
let author = node.authors().default().await?;
2323
// open doc two times
@@ -38,9 +38,8 @@ async fn test_doc_close() -> Result<()> {
3838
}
3939

4040
#[tokio::test]
41+
#[traced_test]
4142
async fn test_doc_import_export() -> TestResult<()> {
42-
let _guard = iroh_test::logging::setup();
43-
4443
let node = Node::memory().spawn().await?;
4544

4645
// create temp file
@@ -156,9 +155,8 @@ async fn test_default_author_memory() -> Result<()> {
156155
}
157156

158157
#[tokio::test]
158+
#[traced_test]
159159
async fn test_default_author_persist() -> TestResult<()> {
160-
let _guard = iroh_test::logging::setup();
161-
162160
let iroh_root_dir = tempfile::TempDir::new()?;
163161
let iroh_root = iroh_root_dir.path();
164162

tests/sync.rs

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use iroh_docs::{
2222
};
2323
use rand::{CryptoRng, Rng, SeedableRng};
2424
use tracing::{debug, error_span, info, Instrument};
25-
use tracing_subscriber::{prelude::*, EnvFilter};
25+
use tracing_test::traced_test;
2626
mod util;
2727
use util::{Builder, Node};
2828

@@ -73,8 +73,8 @@ macro_rules! match_event {
7373

7474
/// This tests the simplest scenario: A node connects to another node, and performs sync.
7575
#[tokio::test]
76+
#[traced_test]
7677
async fn sync_simple() -> Result<()> {
77-
setup_logging();
7878
let mut rng = test_rng(b"sync_simple");
7979
let nodes = spawn_nodes(2, &mut rng).await?;
8080
let clients = nodes.iter().map(|node| node.client()).collect::<Vec<_>>();
@@ -133,9 +133,9 @@ async fn sync_simple() -> Result<()> {
133133

134134
/// Test subscribing to replica events (without sync)
135135
#[tokio::test]
136+
#[traced_test]
136137
async fn sync_subscribe_no_sync() -> Result<()> {
137138
let mut rng = test_rng(b"sync_subscribe");
138-
setup_logging();
139139
let node = spawn_node(0, &mut rng).await?;
140140
let client = node.client();
141141
let doc = client.docs().create().await?;
@@ -152,12 +152,12 @@ async fn sync_subscribe_no_sync() -> Result<()> {
152152
}
153153

154154
#[tokio::test]
155+
#[traced_test]
155156
async fn sync_gossip_bulk() -> Result<()> {
156157
let n_entries: usize = std::env::var("N_ENTRIES")
157158
.map(|x| x.parse().expect("N_ENTRIES must be a number"))
158159
.unwrap_or(100);
159160
let mut rng = test_rng(b"sync_gossip_bulk");
160-
setup_logging();
161161

162162
let nodes = spawn_nodes(2, &mut rng).await?;
163163
let clients = nodes.iter().map(|node| node.client()).collect::<Vec<_>>();
@@ -242,10 +242,10 @@ async fn sync_gossip_bulk() -> Result<()> {
242242

243243
/// This tests basic sync and gossip with 3 peers.
244244
#[tokio::test]
245+
#[traced_test]
245246
#[ignore = "flaky"]
246247
async fn sync_full_basic() -> testresult::TestResult<()> {
247248
let mut rng = test_rng(b"sync_full_basic");
248-
setup_logging();
249249
let mut nodes = spawn_nodes(2, &mut rng).await?;
250250
let mut clients = nodes
251251
.iter()
@@ -424,9 +424,9 @@ async fn sync_full_basic() -> testresult::TestResult<()> {
424424
}
425425

426426
#[tokio::test]
427+
#[traced_test]
427428
async fn sync_open_close() -> Result<()> {
428429
let mut rng = test_rng(b"sync_subscribe_stop_close");
429-
setup_logging();
430430
let node = spawn_node(0, &mut rng).await?;
431431
let client = node.client();
432432

@@ -448,9 +448,9 @@ async fn sync_open_close() -> Result<()> {
448448
}
449449

450450
#[tokio::test]
451+
#[traced_test]
451452
async fn sync_subscribe_stop_close() -> Result<()> {
452453
let mut rng = test_rng(b"sync_subscribe_stop_close");
453-
setup_logging();
454454
let node = spawn_node(0, &mut rng).await?;
455455
let client = node.client();
456456

@@ -487,9 +487,9 @@ async fn sync_subscribe_stop_close() -> Result<()> {
487487
}
488488

489489
#[tokio::test]
490+
#[traced_test]
490491
#[cfg(feature = "test-utils")]
491492
async fn test_sync_via_relay() -> Result<()> {
492-
let _guard = iroh_test::logging::setup();
493493
let (relay_map, _relay_url, _guard) = iroh::test_utils::run_relay_server().await?;
494494

495495
let node1 = Node::memory()
@@ -581,11 +581,11 @@ async fn test_sync_via_relay() -> Result<()> {
581581
}
582582

583583
#[tokio::test]
584+
#[traced_test]
584585
#[cfg(feature = "test-utils")]
585586
#[ignore = "flaky"]
586587
async fn sync_restart_node() -> Result<()> {
587588
let mut rng = test_rng(b"sync_restart_node");
588-
setup_logging();
589589
let (relay_map, _relay_url, _guard) = iroh::test_utils::run_relay_server().await?;
590590

591591
let discovery_server = iroh::test_utils::DnsPkarrServer::run().await?;
@@ -752,7 +752,6 @@ async fn test_download_policies() -> Result<()> {
752752
const EXPECTED_B_DOWNLOADED: usize = 3;
753753

754754
let mut rng = test_rng(b"sync_download_policies");
755-
setup_logging();
756755
let nodes = spawn_nodes(2, &mut rng).await?;
757756
let clients = nodes.iter().map(|node| node.client()).collect::<Vec<_>>();
758757

@@ -860,9 +859,9 @@ async fn test_download_policies() -> Result<()> {
860859

861860
/// Test sync between many nodes with propagation through sync reports.
862861
#[tokio::test(flavor = "multi_thread")]
862+
#[traced_test]
863863
#[ignore = "flaky"]
864864
async fn sync_big() -> Result<()> {
865-
setup_logging();
866865
let mut rng = test_rng(b"sync_big");
867866
let n_nodes = std::env::var("NODES")
868867
.map(|v| v.parse().expect("NODES must be a number"))
@@ -982,6 +981,7 @@ async fn sync_big() -> Result<()> {
982981
}
983982

984983
#[tokio::test]
984+
#[traced_test]
985985
#[cfg(feature = "test-utils")]
986986
async fn test_list_docs_stream() -> testresult::TestResult<()> {
987987
let node = Node::memory()
@@ -1156,6 +1156,7 @@ impl PartialEq<ExpectedEntry> for (Entry, Bytes) {
11561156
}
11571157

11581158
#[tokio::test]
1159+
#[traced_test]
11591160
async fn doc_delete() -> Result<()> {
11601161
let node = Node::memory()
11611162
.gc_interval(Some(Duration::from_millis(100)))
@@ -1185,9 +1186,9 @@ async fn doc_delete() -> Result<()> {
11851186
}
11861187

11871188
#[tokio::test]
1189+
#[traced_test]
11881190
async fn sync_drop_doc() -> Result<()> {
11891191
let mut rng = test_rng(b"sync_drop_doc");
1190-
setup_logging();
11911192
let node = spawn_node(0, &mut rng).await?;
11921193
let client = node.client();
11931194

@@ -1241,14 +1242,6 @@ async fn get_latest(
12411242
Ok(content.to_vec())
12421243
}
12431244

1244-
fn setup_logging() {
1245-
tracing_subscriber::registry()
1246-
.with(tracing_subscriber::fmt::layer().with_writer(std::io::stderr))
1247-
.with(EnvFilter::from_default_env())
1248-
.try_init()
1249-
.ok();
1250-
}
1251-
12521245
async fn next<T: std::fmt::Debug>(mut stream: impl Stream<Item = Result<T>> + Unpin) -> T {
12531246
let event = stream
12541247
.next()

0 commit comments

Comments
 (0)