use crate::address_book::AddressBook;
use crate::iroh_endpoint::Endpoint;
use crate::iroh_mdns::{MdnsDiscovery, MdnsDiscoveryMode};
use crate::test_utils::{setup_logging, test_args_from_seed};
#[tokio::test]
async fn mdns_discovery() {
setup_logging();
let alice_args = test_args_from_seed([100; 32]);
let bob_args = test_args_from_seed([200; 32]);
let alice_address_book = AddressBook::builder().spawn().await.unwrap();
let bob_address_book = AddressBook::builder().spawn().await.unwrap();
let alice_endpoint = Endpoint::builder(alice_address_book.clone())
.config(alice_args.iroh_config.clone())
.signing_key(alice_args.signing_key.clone())
.spawn()
.await
.unwrap();
let bob_endpoint = Endpoint::builder(bob_address_book.clone())
.config(bob_args.iroh_config.clone())
.signing_key(bob_args.signing_key.clone())
.spawn()
.await
.unwrap();
let result = bob_address_book
.node_info(alice_args.verifying_key)
.await
.unwrap();
assert!(result.is_none());
let result = alice_address_book
.node_info(bob_args.verifying_key)
.await
.unwrap();
assert!(result.is_none());
let mut alice_address_book_bob = alice_address_book
.watch_node_info(bob_endpoint.node_id(), true)
.await
.unwrap();
let mut bob_address_book_alice = bob_address_book
.watch_node_info(alice_endpoint.node_id(), true)
.await
.unwrap();
let _alice_mdns = MdnsDiscovery::builder(alice_address_book.clone(), alice_endpoint.clone())
.mode(MdnsDiscoveryMode::Active)
.spawn()
.await
.unwrap();
let _bob_mdns = MdnsDiscovery::builder(bob_address_book.clone(), bob_endpoint.clone())
.mode(MdnsDiscoveryMode::Active)
.spawn()
.await
.unwrap();
alice_address_book_bob.recv().await;
bob_address_book_alice.recv().await;
let result = bob_address_book
.node_info(alice_args.verifying_key)
.await
.unwrap();
assert!(result.is_some());
let result = alice_address_book
.node_info(bob_args.verifying_key)
.await
.unwrap();
assert!(result.is_some());
}