Skip to content

Transport initialization updates #585

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Dec 9, 2022
Merged
1 change: 0 additions & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion node/src/runner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ pub async fn initialize(
// P2P subsystem
let p2p = manager.add_subsystem(
"p2p",
p2p::make_p2p::<p2p::net::libp2p::Libp2pService>(
p2p::make_p2p(
Arc::clone(&chain_config),
Arc::new(node_config.p2p.into()),
chainstate.clone(),
Expand Down
4 changes: 4 additions & 0 deletions p2p/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ version = "0.1.0"
edition = "2021"
license = "MIT"

[features]
default = []
testing_utils = []

[dependencies]
common = { path = "../common/" }
crypto = { path = "../crypto/" }
Expand Down
2 changes: 1 addition & 1 deletion p2p/backend-test-suite/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ license = "MIT"

[dependencies]
common = { path = "../../common" }
p2p = { path = "../../p2p" }
p2p = { path = "../../p2p", features = ["testing_utils"] }
p2p-test-utils = { path = "../p2p-test-utils" }
logging = { path = "../../logging" }
serialization = { path = "../../serialization" }
Expand Down
11 changes: 8 additions & 3 deletions p2p/backend-test-suite/src/ban.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ use std::{fmt::Debug, sync::Arc};

use tokio::sync::mpsc;

use p2p::testing_utils::TestTransport;
use p2p::{
config::P2pConfig,
error::{P2pError, PublishError},
Expand All @@ -28,7 +29,7 @@ use p2p::{
peer_manager::helpers::connect_services,
sync::BlockSyncManager,
};
use p2p_test_utils::{MakeTestAddress, TestBlockInfo};
use p2p_test_utils::TestBlockInfo;

tests![invalid_pubsub_block, invalid_sync_block,];

Expand All @@ -37,7 +38,7 @@ tests![invalid_pubsub_block, invalid_sync_block,];
// receives a `AdjustPeerScore` event which bans the peer of the second service.
async fn invalid_pubsub_block<A, S>()
where
A: MakeTestAddress<Address = S::Address>,
A: TestTransport<Transport = S::Transport, Address = S::Address>,
S: NetworkingService + Debug + 'static,
S::ConnectivityHandle: ConnectivityService<S>,
S::SyncingMessagingHandle: SyncingMessagingService<S>,
Expand All @@ -49,6 +50,7 @@ where
let handle = p2p_test_utils::start_chainstate(Arc::clone(&chain_config)).await;

let (mut conn1, sync1) = S::start(
A::make_transport(),
A::make_address(),
Arc::clone(&chain_config),
Default::default(),
Expand All @@ -66,6 +68,7 @@ where
);

let (mut conn2, mut sync2) = S::start(
A::make_transport(),
A::make_address(),
Arc::clone(&chain_config),
Arc::clone(&p2p_config),
Expand Down Expand Up @@ -131,7 +134,7 @@ where
// Start two networking services and give an invalid block, verify that `PeerManager` is informed.
async fn invalid_sync_block<A, S>()
where
A: MakeTestAddress<Address = S::Address>,
A: TestTransport<Transport = S::Transport, Address = S::Address>,
S: NetworkingService + Debug + 'static,
S::ConnectivityHandle: ConnectivityService<S>,
S::SyncingMessagingHandle: SyncingMessagingService<S>,
Expand All @@ -142,6 +145,7 @@ where
let handle = p2p_test_utils::start_chainstate(Arc::clone(&chain_config)).await;

let (mut conn1, sync1) = S::start(
A::make_transport(),
A::make_address(),
Arc::clone(&chain_config),
Default::default(),
Expand All @@ -150,6 +154,7 @@ where
.unwrap();

let (mut conn2, _sync2) = S::start(
A::make_transport(),
A::make_address(),
Arc::clone(&chain_config),
Default::default(),
Expand Down
81 changes: 53 additions & 28 deletions p2p/backend-test-suite/src/block_announcement.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ use common::{
};
use serialization::Encode;

use p2p::testing_utils::TestTransport;
use p2p::{
error::{P2pError, PublishError},
message::Announcement,
Expand All @@ -42,7 +43,6 @@ use p2p::{
},
peer_manager::helpers::connect_services,
};
use p2p_test_utils::MakeTestAddress;

tests![
block_announcement,
Expand All @@ -52,20 +52,28 @@ tests![

async fn block_announcement<A, S>()
where
A: MakeTestAddress<Address = S::Address>,
A: TestTransport<Transport = S::Transport, Address = S::Address>,
S: NetworkingService + Debug,
S::SyncingMessagingHandle: SyncingMessagingService<S>,
S::ConnectivityHandle: ConnectivityService<S>,
{
let config = Arc::new(common::chain::config::create_mainnet());
let (mut conn1, mut sync1) =
S::start(A::make_address(), Arc::clone(&config), Default::default())
.await
.unwrap();
let (mut conn2, mut sync2) =
S::start(A::make_address(), Arc::clone(&config), Default::default())
.await
.unwrap();
let (mut conn1, mut sync1) = S::start(
A::make_transport(),
A::make_address(),
Arc::clone(&config),
Default::default(),
)
.await
.unwrap();
let (mut conn2, mut sync2) = S::start(
A::make_transport(),
A::make_address(),
Arc::clone(&config),
Default::default(),
)
.await
.unwrap();

connect_services::<S>(&mut conn1, &mut conn2).await;

Expand Down Expand Up @@ -130,19 +138,28 @@ where

async fn block_announcement_no_subscription<A, S>()
where
A: MakeTestAddress<Address = S::Address>,
A: TestTransport<Transport = S::Transport, Address = S::Address>,
S: NetworkingService + Debug,
S::SyncingMessagingHandle: SyncingMessagingService<S>,
S::ConnectivityHandle: ConnectivityService<S>,
{
let config = Arc::new(common::chain::config::create_mainnet());
let (mut conn1, mut sync1) =
S::start(A::make_address(), Arc::clone(&config), Default::default())
.await
.unwrap();
let (mut conn2, _sync2) = S::start(A::make_address(), Arc::clone(&config), Default::default())
.await
.unwrap();
let (mut conn1, mut sync1) = S::start(
A::make_transport(),
A::make_address(),
Arc::clone(&config),
Default::default(),
)
.await
.unwrap();
let (mut conn2, _sync2) = S::start(
A::make_transport(),
A::make_address(),
Arc::clone(&config),
Default::default(),
)
.await
.unwrap();

connect_services::<S>(&mut conn1, &mut conn2).await;

Expand All @@ -169,21 +186,29 @@ where

async fn block_announcement_too_big_message<A, S>()
where
A: MakeTestAddress<Address = S::Address>,
A: TestTransport<Transport = S::Transport, Address = S::Address>,
S: NetworkingService + Debug,
S::SyncingMessagingHandle: SyncingMessagingService<S>,
S::ConnectivityHandle: ConnectivityService<S>,
{
let config = Arc::new(common::chain::config::create_mainnet());
let (mut conn1, mut sync1) =
S::start(A::make_address(), Arc::clone(&config), Default::default())
.await
.unwrap();

let (mut conn2, mut sync2) =
S::start(A::make_address(), Arc::clone(&config), Default::default())
.await
.unwrap();
let (mut conn1, mut sync1) = S::start(
A::make_transport(),
A::make_address(),
Arc::clone(&config),
Default::default(),
)
.await
.unwrap();

let (mut conn2, mut sync2) = S::start(
A::make_transport(),
A::make_address(),
Arc::clone(&config),
Default::default(),
)
.await
.unwrap();

connect_services::<S>(&mut conn1, &mut conn2).await;

Expand Down
53 changes: 37 additions & 16 deletions p2p/backend-test-suite/src/connect.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@

use std::{fmt::Debug, sync::Arc};

use p2p::testing_utils::TestTransport;
use p2p::{
error::{DialError, P2pError},
net::{ConnectivityService, NetworkingService, SyncingMessagingService},
};
use p2p_test_utils::MakeTestAddress;

tests![
connect,
Expand All @@ -32,33 +32,44 @@ tests![

async fn connect<A, S>()
where
A: MakeTestAddress<Address = S::Address>,
A: TestTransport<Transport = S::Transport, Address = S::Address>,
S: NetworkingService + Debug + 'static,
S::ConnectivityHandle: ConnectivityService<S>,
S::SyncingMessagingHandle: SyncingMessagingService<S>,
{
let config = Arc::new(common::chain::config::create_mainnet());
S::start(A::make_address(), config, Default::default()).await.unwrap();
S::start(
A::make_transport(),
A::make_address(),
config,
Default::default(),
)
.await
.unwrap();
}

// Check that connecting twice to the same address isn't possible.
// TODO: Investigate why this test fails on Windows.
#[cfg(not(target_os = "windows"))]
async fn connect_address_in_use<A, S>()
where
A: MakeTestAddress<Address = S::Address>,
A: TestTransport<Transport = S::Transport, Address = S::Address>,
S: NetworkingService + Debug + 'static,
S::ConnectivityHandle: ConnectivityService<S> + Debug,
S::SyncingMessagingHandle: SyncingMessagingService<S> + Debug,
{
let config = Arc::new(common::chain::config::create_mainnet());
let (connectivity, _sync) =
S::start(A::make_address(), Arc::clone(&config), Default::default())
.await
.unwrap();
let (connectivity, _sync) = S::start(
A::make_transport(),
A::make_address(),
Arc::clone(&config),
Default::default(),
)
.await
.unwrap();

let address = connectivity.local_addr().await.unwrap().unwrap();
let res = S::start(address, config, Default::default())
let res = S::start(A::make_transport(), address, config, Default::default())
.await
.expect_err("address is not in use");
assert_eq!(
Expand All @@ -71,18 +82,28 @@ where
// trying to connect to `service1`.
async fn connect_accept<A, S>()
where
A: MakeTestAddress<Address = S::Address>,
A: TestTransport<Transport = S::Transport, Address = S::Address>,
S: NetworkingService + std::fmt::Debug + 'static,
S::ConnectivityHandle: ConnectivityService<S>,
S::SyncingMessagingHandle: SyncingMessagingService<S>,
{
let config = Arc::new(common::chain::config::create_mainnet());
let (mut service1, _) = S::start(A::make_address(), Arc::clone(&config), Default::default())
.await
.unwrap();
let (mut service2, _) = S::start(A::make_address(), Arc::clone(&config), Default::default())
.await
.unwrap();
let (mut service1, _) = S::start(
A::make_transport(),
A::make_address(),
Arc::clone(&config),
Default::default(),
)
.await
.unwrap();
let (mut service2, _) = S::start(
A::make_transport(),
A::make_address(),
Arc::clone(&config),
Default::default(),
)
.await
.unwrap();

let conn_addr = service1.local_addr().await.unwrap().unwrap();
let (res1, res2) = tokio::join!(service1.poll_next(), service2.connect(conn_addr));
Expand Down
6 changes: 3 additions & 3 deletions p2p/backend-test-suite/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,12 @@ use std::fmt::Debug;
use libtest_mimic::{Arguments, Trial};

use p2p::net::{ConnectivityService, NetworkingService, SyncingMessagingService};
use p2p_test_utils::MakeTestAddress;
use p2p::testing_utils::TestTransport;

/// Runs all tests.
pub fn run<A, S>()
where
A: MakeTestAddress<Address = S::Address>,
A: TestTransport<Transport = S::Transport, Address = S::Address>,
S: NetworkingService + Debug + 'static,
S::ConnectivityHandle: ConnectivityService<S> + Debug,
S::SyncingMessagingHandle: SyncingMessagingService<S> + Debug,
Expand All @@ -47,7 +47,7 @@ where
/// Collects all backend agnostic tests.
fn tests<A, S>() -> Vec<Trial>
where
A: MakeTestAddress<Address = S::Address>,
A: TestTransport<Transport = S::Transport, Address = S::Address>,
S: NetworkingService + Debug + 'static,
S::ConnectivityHandle: ConnectivityService<S> + Debug,
S::SyncingMessagingHandle: SyncingMessagingService<S> + Debug,
Expand Down
Loading