From 2114e3a9600793ecbef874ac5a881ca757785ad8 Mon Sep 17 00:00:00 2001 From: Thomas Eizinger Date: Tue, 11 Apr 2023 23:06:55 +0200 Subject: [PATCH] Simplify deflate tests --- Cargo.lock | 96 +++++++++++++++++++++++++++++--- transports/deflate/Cargo.toml | 3 +- transports/deflate/tests/test.rs | 80 +++++++++----------------- 3 files changed, 115 insertions(+), 64 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0520add0c5c..658b922b9ac 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -631,6 +631,12 @@ dependencies = [ "serde", ] +[[package]] +name = "cache-padded" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" + [[package]] name = "cast" version = "0.3.0" @@ -785,7 +791,7 @@ dependencies = [ "anstyle", "bitflags", "clap_lex 0.4.1", - "strsim", + "strsim 0.10.0", ] [[package]] @@ -1126,14 +1132,38 @@ dependencies = [ "zeroize", ] +[[package]] +name = "darling" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" +dependencies = [ + "darling_core 0.10.2", + "darling_macro 0.10.2", +] + [[package]] name = "darling" version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0dd3cd20dc6b5a876612a6e5accfe7f3dd883db6d07acfbf14c128f61550dfa" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.14.2", + "darling_macro 0.14.2", +] + +[[package]] +name = "darling_core" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.9.3", + "syn 1.0.109", ] [[package]] @@ -1146,7 +1176,18 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "strsim", + "strsim 0.10.0", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" +dependencies = [ + "darling_core 0.10.2", + "quote", "syn 1.0.109", ] @@ -1156,7 +1197,7 @@ version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e" dependencies = [ - "darling_core", + "darling_core 0.14.2", "quote", "syn 1.0.109", ] @@ -1253,7 +1294,7 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4" dependencies = [ - "darling", + "darling 0.14.2", "proc-macro2", "quote", "syn 1.0.109", @@ -1646,6 +1687,19 @@ dependencies = [ "slab", ] +[[package]] +name = "futures_ringbuf" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b905098b5519bd63b2a1f9f4615198b0e38a473ce201ffdbd4dea6eb63087ddc" +dependencies = [ + "futures", + "log", + "log-derive", + "ringbuf", + "rustc_version", +] + [[package]] name = "generic-array" version = "0.14.6" @@ -2384,11 +2438,10 @@ dependencies = [ name = "libp2p-deflate" version = "0.39.0" dependencies = [ - "async-std", "flate2", "futures", + "futures_ringbuf", "libp2p-core", - "libp2p-tcp", "quickcheck-ext", "rand 0.8.5", ] @@ -3123,6 +3176,18 @@ dependencies = [ "value-bag", ] +[[package]] +name = "log-derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a42526bb432bcd1b43571d5f163984effa25409a29f1a3242a54d0577d55bcf" +dependencies = [ + "darling 0.10.2", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "lru" version = "0.10.0" @@ -4163,6 +4228,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "ringbuf" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f65af18d50f789e74aaf23bbb3f65dcd22a3cb6e029b5bced149f6bd57c5c2a2" +dependencies = [ + "cache-padded", +] + [[package]] name = "rmp" version = "0.8.11" @@ -4629,6 +4703,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "strsim" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" + [[package]] name = "strsim" version = "0.10.0" diff --git a/transports/deflate/Cargo.toml b/transports/deflate/Cargo.toml index 59f25c88dfe..32c64e65c27 100644 --- a/transports/deflate/Cargo.toml +++ b/transports/deflate/Cargo.toml @@ -16,10 +16,9 @@ libp2p-core = { version = "0.39.0", path = "../../core" } flate2 = "1.0" [dev-dependencies] -async-std = "1.6.2" -libp2p-tcp = { path = "../tcp", features = ["async-io"] } quickcheck = { package = "quickcheck-ext", path = "../../misc/quickcheck-ext" } rand = "0.8" +futures_ringbuf = "0.3.1" # Passing arguments to the docsrs builder in order to properly document cfg's. # More information: https://docs.rs/about/builds#cross-compiling diff --git a/transports/deflate/tests/test.rs b/transports/deflate/tests/test.rs index c0fdd9dcdfc..b5fbe39ad53 100644 --- a/transports/deflate/tests/test.rs +++ b/transports/deflate/tests/test.rs @@ -18,10 +18,9 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -use futures::{future, prelude::*}; -use libp2p_core::{transport::Transport, upgrade}; +use futures::prelude::*; +use libp2p_core::OutboundUpgrade; use libp2p_deflate::DeflateConfig; -use libp2p_tcp as tcp; use quickcheck::{QuickCheck, TestResult}; use rand::RngCore; @@ -31,7 +30,7 @@ fn deflate() { if message.is_empty() { return TestResult::discard(); } - async_std::task::block_on(run(message)); + futures::executor::block_on(run(message)); TestResult::passed() } QuickCheck::new().quickcheck(prop as fn(Vec) -> TestResult) @@ -41,68 +40,41 @@ fn deflate() { fn lot_of_data() { let mut v = vec![0; 2 * 1024 * 1024]; rand::thread_rng().fill_bytes(&mut v); - async_std::task::block_on(run(v)) + futures::executor::block_on(run(v)); } async fn run(message1: Vec) { - let new_transport = || { - tcp::async_io::Transport::default() - .and_then(|conn, endpoint| { - upgrade::apply( - conn, - DeflateConfig::default(), - endpoint, - upgrade::Version::V1, - ) - }) - .boxed() - }; - let mut listener_transport = new_transport(); - listener_transport - .listen_on("/ip4/0.0.0.0/tcp/0".parse().expect("multiaddr")) - .expect("listener"); - - let listen_addr = listener_transport - .next() - .await - .expect("some event") - .into_new_address() - .expect("new address"); + let (server, client) = futures_ringbuf::Endpoint::pair(100, 100); let message2 = message1.clone(); - let listener_task = async_std::task::spawn(async move { - let mut conn = listener_transport - .filter(|e| future::ready(e.is_upgrade())) - .next() + let client_task = async move { + let mut client = DeflateConfig::default() + .upgrade_outbound(client, b"") .await - .expect("some event") - .into_incoming() - .expect("upgrade") - .0 - .await - .expect("connection"); + .unwrap(); let mut buf = vec![0; message2.len()]; - conn.read_exact(&mut buf).await.expect("read_exact"); + client.read_exact(&mut buf).await.expect("read_exact"); assert_eq!(&buf[..], &message2[..]); - conn.write_all(&message2).await.expect("write_all"); - conn.close().await.expect("close") - }); + client.write_all(&message2).await.expect("write_all"); + client.close().await.expect("close") + }; - let mut dialer_transport = new_transport(); - let mut conn = dialer_transport - .dial(listen_addr) - .expect("dialer") - .await - .expect("connection"); - conn.write_all(&message1).await.expect("write_all"); - conn.close().await.expect("close"); + let server_task = async move { + let mut server = DeflateConfig::default() + .upgrade_outbound(server, b"") + .await + .unwrap(); + + server.write_all(&message1).await.expect("write_all"); + server.close().await.expect("close"); - let mut buf = Vec::new(); - conn.read_to_end(&mut buf).await.expect("read_to_end"); - assert_eq!(&buf[..], &message1[..]); + let mut buf = Vec::new(); + server.read_to_end(&mut buf).await.expect("read_to_end"); + assert_eq!(&buf[..], &message1[..]); + }; - listener_task.await + futures::future::join(server_task, client_task).await; }