fix: fix flaky test (#250)

This commit is contained in:
Matthias Seitz
2022-11-24 22:26:22 +01:00
committed by GitHub
parent a2817881db
commit 2e3c220104
3 changed files with 40 additions and 28 deletions

1
Cargo.lock generated
View File

@ -3385,6 +3385,7 @@ dependencies = [
"reth-primitives", "reth-primitives",
"reth-rlp", "reth-rlp",
"reth-rlp-derive", "reth-rlp-derive",
"reth-tracing",
"reth-transaction-pool", "reth-transaction-pool",
"secp256k1", "secp256k1",
"thiserror", "thiserror",

View File

@ -46,6 +46,7 @@ secp256k1 = { version = "0.24", features = [
[dev-dependencies] [dev-dependencies]
# reth # reth
reth-interfaces = { path = "../../interfaces", features = ["test-utils"] } reth-interfaces = { path = "../../interfaces", features = ["test-utils"] }
reth-tracing = { path = "../../tracing" }
rand = "0.8" rand = "0.8"

View File

@ -7,42 +7,52 @@ use std::collections::HashSet;
#[tokio::test(flavor = "multi_thread")] #[tokio::test(flavor = "multi_thread")]
async fn test_establish_connections() { async fn test_establish_connections() {
let net = Testnet::create(3).await; reth_tracing::init_tracing();
net.for_each(|peer| assert_eq!(0, peer.num_peers())); for _ in 0..10 {
let net = Testnet::create(3).await;
let mut handles = net.handles(); net.for_each(|peer| assert_eq!(0, peer.num_peers()));
let handle0 = handles.next().unwrap();
let handle1 = handles.next().unwrap();
let handle2 = handles.next().unwrap();
drop(handles); let mut handles = net.handles();
let handle = net.spawn(); let handle0 = handles.next().unwrap();
let handle1 = handles.next().unwrap();
let handle2 = handles.next().unwrap();
let listener0 = handle0.event_listener(); drop(handles);
let handle = net.spawn();
handle0.add_peer(*handle1.peer_id(), handle1.local_addr()); let listener0 = handle0.event_listener();
handle0.add_peer(*handle2.peer_id(), handle2.local_addr());
let mut expected_connections = HashSet::from([*handle1.peer_id(), *handle2.peer_id()]); let mut listener1 = handle1.event_listener();
let mut listener2 = handle2.event_listener();
let mut established = listener0.take(2); handle0.add_peer(*handle1.peer_id(), handle1.local_addr());
while let Some(ev) = established.next().await { handle0.add_peer(*handle2.peer_id(), handle2.local_addr());
match ev {
NetworkEvent::SessionClosed { .. } => { let mut expected_connections = HashSet::from([*handle1.peer_id(), *handle2.peer_id()]);
panic!("unexpected event")
} // wait for all initiator connections
NetworkEvent::SessionEstablished { peer_id, .. } => { let mut established = listener0.take(2);
assert!(expected_connections.remove(&peer_id)) while let Some(ev) = established.next().await {
match ev {
NetworkEvent::SessionClosed { .. } => {
panic!("unexpected event")
}
NetworkEvent::SessionEstablished { peer_id, .. } => {
assert!(expected_connections.remove(&peer_id))
}
} }
} }
assert!(expected_connections.is_empty());
// also await the established session on both target
futures::future::join(listener1.next(), listener2.next()).await;
let net = handle.terminate().await;
assert_eq!(net.peers()[0].num_peers(), 2);
assert_eq!(net.peers()[1].num_peers(), 1);
assert_eq!(net.peers()[2].num_peers(), 1);
} }
assert!(expected_connections.is_empty());
let net = handle.terminate().await;
assert_eq!(net.peers()[0].num_peers(), 2);
assert_eq!(net.peers()[1].num_peers(), 1);
assert_eq!(net.peers()[2].num_peers(), 1);
} }