use p2panda_core::test_utils::setup_logging;
use tokio::task::JoinHandle;
use crate::discovery::{DiscoveryEvent, SessionRole};
use crate::test_utils::TestNode;
async fn session_ended_handle(node: &TestNode) -> JoinHandle<()> {
let mut events = node.discovery.events().await.unwrap();
tokio::spawn(async move {
loop {
let event = events.recv().await.unwrap();
if let DiscoveryEvent::SessionEnded {
role: SessionRole::Initiated,
..
} = event
{
break;
}
}
})
}
#[tokio::test]
async fn smoke_test() {
setup_logging();
let mut bob = TestNode::spawn([8; 32], None).await;
let alice = TestNode::spawn([7; 32], Some(bob.node_info())).await;
let alice_session_ended = session_ended_handle(&alice).await;
let bob_session_ended = session_ended_handle(&bob).await;
alice_session_ended.await.unwrap();
bob_session_ended.await.unwrap();
let alice_metrics = alice.discovery.metrics().await.unwrap();
assert_eq!(alice_metrics.newly_learned_transport_infos, 0);
let bob_metrics = bob.discovery.metrics().await.unwrap();
assert_eq!(bob_metrics.newly_learned_transport_infos, 1);
let result = bob.address_book.node_info(alice.node_id()).await.unwrap();
assert!(result.is_some());
}