From 2ecc7cf1253e5a884d093fc51b4ba35c45a57842 Mon Sep 17 00:00:00 2001 From: Yiannis Marangos Date: Fri, 10 Nov 2023 02:24:47 +0200 Subject: [PATCH] fix: Add `SwarmBuilder::with_quic_config` for `TcpPhase` Related: #4819. Pull-Request: #4821. --- Cargo.lock | 2 +- libp2p/CHANGELOG.md | 5 ++ libp2p/Cargo.toml | 2 +- libp2p/src/builder.rs | 132 +++++++++++++++++++++++++++++++- libp2p/src/builder/phase/tcp.rs | 24 ++++++ 5 files changed, 161 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f1e0c52e6e1..f858c2e53bc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2425,7 +2425,7 @@ checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" [[package]] name = "libp2p" -version = "0.53.0" +version = "0.53.1" dependencies = [ "async-std", "async-trait", diff --git a/libp2p/CHANGELOG.md b/libp2p/CHANGELOG.md index 1c325215778..545e089ae30 100644 --- a/libp2p/CHANGELOG.md +++ b/libp2p/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.53.1 - unreleased + +- Allow `SwarmBuilder::with_quic_config` to be called without `with_tcp` first. + See [PR 4821](https://github.com/libp2p/rust-libp2p/pull/4821). + ## 0.53.0 - Raise MSRV to 1.73. diff --git a/libp2p/Cargo.toml b/libp2p/Cargo.toml index a47f8bfdaa1..6ced40e1dfe 100644 --- a/libp2p/Cargo.toml +++ b/libp2p/Cargo.toml @@ -3,7 +3,7 @@ name = "libp2p" edition = "2021" rust-version = { workspace = true } description = "Peer-to-peer networking library" -version = "0.53.0" +version = "0.53.1" authors = ["Parity Technologies "] license = "MIT" repository = "https://github.com/libp2p/rust-libp2p" diff --git a/libp2p/src/builder.rs b/libp2p/src/builder.rs index f1594df78fa..f492b323efa 100644 --- a/libp2p/src/builder.rs +++ b/libp2p/src/builder.rs @@ -76,7 +76,13 @@ mod tests { use libp2p_swarm::{NetworkBehaviour, Swarm}; #[test] - #[cfg(all(feature = "tokio", feature = "tcp", feature = "tls", feature = "noise"))] + #[cfg(all( + feature = "tokio", + feature = "tcp", + feature = "tls", + feature = "noise", + feature = "yamux", + ))] fn tcp() { let _ = SwarmBuilder::with_new_identity() .with_tokio() @@ -96,7 +102,8 @@ mod tests { feature = "async-std", feature = "tcp", feature = "tls", - feature = "noise" + feature = "noise", + feature = "yamux", ))] fn async_std_tcp() { let _ = SwarmBuilder::with_new_identity() @@ -112,6 +119,50 @@ mod tests { .build(); } + #[test] + #[cfg(all(feature = "tokio", feature = "quic"))] + fn quic() { + let _ = SwarmBuilder::with_new_identity() + .with_tokio() + .with_quic() + .with_behaviour(|_| libp2p_swarm::dummy::Behaviour) + .unwrap() + .build(); + } + + #[test] + #[cfg(all(feature = "async-std", feature = "quic"))] + fn async_std_quic() { + let _ = SwarmBuilder::with_new_identity() + .with_async_std() + .with_quic() + .with_behaviour(|_| libp2p_swarm::dummy::Behaviour) + .unwrap() + .build(); + } + + #[test] + #[cfg(all(feature = "tokio", feature = "quic"))] + fn quic_config() { + let _ = SwarmBuilder::with_new_identity() + .with_tokio() + .with_quic_config(|config| config) + .with_behaviour(|_| libp2p_swarm::dummy::Behaviour) + .unwrap() + .build(); + } + + #[test] + #[cfg(all(feature = "async-std", feature = "quic"))] + fn async_std_quic_config() { + let _ = SwarmBuilder::with_new_identity() + .with_async_std() + .with_quic_config(|config| config) + .with_behaviour(|_| libp2p_swarm::dummy::Behaviour) + .unwrap() + .build(); + } + #[test] #[cfg(all(feature = "tokio", feature = "tcp", feature = "tls", feature = "yamux"))] fn tcp_yamux_mplex() { @@ -162,6 +213,7 @@ mod tests { feature = "tcp", feature = "tls", feature = "noise", + feature = "yamux", feature = "quic" ))] fn tcp_quic() { @@ -179,12 +231,85 @@ mod tests { .build(); } + #[test] + #[cfg(all( + feature = "async-std", + feature = "tcp", + feature = "tls", + feature = "noise", + feature = "yamux", + feature = "quic" + ))] + fn async_std_tcp_quic() { + let _ = SwarmBuilder::with_new_identity() + .with_async_std() + .with_tcp( + Default::default(), + (libp2p_tls::Config::new, libp2p_noise::Config::new), + libp2p_yamux::Config::default, + ) + .unwrap() + .with_quic() + .with_behaviour(|_| libp2p_swarm::dummy::Behaviour) + .unwrap() + .build(); + } + + #[test] + #[cfg(all( + feature = "tokio", + feature = "tcp", + feature = "tls", + feature = "noise", + feature = "yamux", + feature = "quic" + ))] + fn tcp_quic_config() { + let _ = SwarmBuilder::with_new_identity() + .with_tokio() + .with_tcp( + Default::default(), + (libp2p_tls::Config::new, libp2p_noise::Config::new), + libp2p_yamux::Config::default, + ) + .unwrap() + .with_quic_config(|config| config) + .with_behaviour(|_| libp2p_swarm::dummy::Behaviour) + .unwrap() + .build(); + } + + #[test] + #[cfg(all( + feature = "async-std", + feature = "tcp", + feature = "tls", + feature = "noise", + feature = "yamux", + feature = "quic" + ))] + fn async_std_tcp_quic_config() { + let _ = SwarmBuilder::with_new_identity() + .with_async_std() + .with_tcp( + Default::default(), + (libp2p_tls::Config::new, libp2p_noise::Config::new), + libp2p_yamux::Config::default, + ) + .unwrap() + .with_quic_config(|config| config) + .with_behaviour(|_| libp2p_swarm::dummy::Behaviour) + .unwrap() + .build(); + } + #[test] #[cfg(all( feature = "tokio", feature = "tcp", feature = "tls", feature = "noise", + feature = "yamux", feature = "relay" ))] fn tcp_relay() { @@ -219,6 +344,7 @@ mod tests { feature = "tcp", feature = "tls", feature = "noise", + feature = "yamux", feature = "dns" ))] async fn tcp_dns() { @@ -266,6 +392,7 @@ mod tests { feature = "tcp", feature = "tls", feature = "noise", + feature = "yamux", feature = "dns", feature = "websocket", ))] @@ -295,6 +422,7 @@ mod tests { feature = "tcp", feature = "tls", feature = "noise", + feature = "yamux", feature = "quic", feature = "dns", feature = "relay", diff --git a/libp2p/src/builder/phase/tcp.rs b/libp2p/src/builder/phase/tcp.rs index 5db7315d472..4b7cf29b3d2 100644 --- a/libp2p/src/builder/phase/tcp.rs +++ b/libp2p/src/builder/phase/tcp.rs @@ -135,6 +135,30 @@ impl SwarmBuilder { self.without_tcp().with_quic() } } +#[cfg(all(not(target_arch = "wasm32"), feature = "quic", feature = "async-std"))] +impl SwarmBuilder { + pub fn with_quic_config( + self, + constructor: impl FnOnce(libp2p_quic::Config) -> libp2p_quic::Config, + ) -> SwarmBuilder< + super::provider::AsyncStd, + OtherTransportPhase, + > { + self.without_tcp().with_quic_config(constructor) + } +} +#[cfg(all(not(target_arch = "wasm32"), feature = "quic", feature = "tokio"))] +impl SwarmBuilder { + pub fn with_quic_config( + self, + constructor: impl FnOnce(libp2p_quic::Config) -> libp2p_quic::Config, + ) -> SwarmBuilder< + super::provider::Tokio, + OtherTransportPhase, + > { + self.without_tcp().with_quic_config(constructor) + } +} impl SwarmBuilder { pub fn with_other_transport< Muxer: libp2p_core::muxing::StreamMuxer + Send + 'static,