Skip to content

Commit 5d9df01

Browse files
committed
tests: improve dns discovery tests
1 parent 877de7e commit 5d9df01

File tree

1 file changed

+27
-11
lines changed

1 file changed

+27
-11
lines changed

iroh-net/src/discovery.rs

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -546,8 +546,8 @@ mod tests {
546546
/// publish to. The relay and DNS servers share their state.
547547
#[cfg(test)]
548548
mod test_dns_pkarr {
549-
use std::future::Future;
550549
use std::net::SocketAddr;
550+
use std::{future::Future, time::Duration};
551551

552552
use anyhow::Result;
553553
use hickory_resolver::{config::NameServerConfig, AsyncResolver, TokioAsyncResolver};
@@ -601,7 +601,7 @@ mod test_dns_pkarr {
601601
let cancel = CancellationToken::new();
602602
let origin = "testdns.example".to_string();
603603
let (nameserver, pkarr_url, _state, task) =
604-
spawn_dns_and_pkarr(origin.clone(), cancel.clone()).await?;
604+
run_dns_and_pkarr_servers(origin.clone(), cancel.clone()).await?;
605605

606606
let secret_key = SecretKey::generate();
607607
let node_id = secret_key.public();
@@ -636,19 +636,20 @@ mod test_dns_pkarr {
636636

637637
let cancel = CancellationToken::new();
638638
let origin = "testdns.example".to_string();
639+
let timeout = Duration::from_secs(1);
640+
639641
let (nameserver, pkarr_url, state, task) =
640-
spawn_dns_and_pkarr(origin.clone(), cancel.clone()).await?;
642+
run_dns_and_pkarr_servers(&origin, cancel.clone()).await?;
643+
let (relay_map, _relay_url, _relay_guard) = run_relay_server().await?;
641644

642-
let (relay_map, _relay_url, _relay_guard) = run_relay_server().await.unwrap();
643645
let ep1 = ep_with_discovery(relay_map.clone(), nameserver, &origin, &pkarr_url).await?;
644646
let ep2 = ep_with_discovery(relay_map, nameserver, &origin, &pkarr_url).await?;
645647

646648
// wait until our shared state received the update from pkarr publishing
647-
state.on_update().await;
649+
state.on_node(&ep1.node_id(), timeout).await?;
648650

649651
// we connect only by node id!
650-
let ep2_node_id = ep2.node_id();
651-
let res = ep1.connect(ep2_node_id.into(), TEST_ALPN).await;
652+
let res = ep2.connect(ep1.node_id().into(), TEST_ALPN).await;
652653
assert!(res.is_ok(), "connection established");
653654
cancel.cancel();
654655
task.await??;
@@ -703,11 +704,11 @@ mod test_dns_pkarr {
703704
(node_info, signed_packet)
704705
}
705706

706-
async fn spawn_dns_and_pkarr(
707-
origin: String,
707+
async fn run_dns_and_pkarr_servers(
708+
origin: impl ToString,
708709
cancel: CancellationToken,
709710
) -> Result<(SocketAddr, Url, State, JoinHandle<Result<()>>)> {
710-
let state = State::new(origin);
711+
let state = State::new(origin.to_string());
711712
let (nameserver, dns_task) = run_dns_server(state.clone(), cancel.clone()).await?;
712713
let (pkarr_url, pkarr_task) = run_pkarr_relay(state.clone(), cancel.clone()).await?;
713714
let join_handle = tokio::task::spawn(async move {
@@ -720,12 +721,14 @@ mod test_dns_pkarr {
720721

721722
mod state {
722723
use crate::NodeId;
724+
use anyhow::{anyhow, Result};
723725
use parking_lot::{Mutex, MutexGuard};
724726
use pkarr::SignedPacket;
725727
use std::{
726728
collections::{hash_map, HashMap},
727729
ops::Deref,
728730
sync::Arc,
731+
time::Duration,
729732
};
730733

731734
#[derive(Debug, Clone)]
@@ -748,6 +751,20 @@ mod test_dns_pkarr {
748751
self.notify.notified()
749752
}
750753

754+
pub async fn on_node(&self, node: &NodeId, timeout: Duration) -> Result<()> {
755+
let timeout = tokio::time::sleep(timeout);
756+
tokio::pin!(timeout);
757+
loop {
758+
if self.get(node).is_some() {
759+
return Ok(());
760+
}
761+
tokio::select! {
762+
_ = &mut timeout => return Err(anyhow!("timeout")),
763+
_ = self.on_update() => {}
764+
}
765+
}
766+
}
767+
751768
pub fn upsert(&self, signed_packet: SignedPacket) -> anyhow::Result<bool> {
752769
let node_id = NodeId::from_bytes(&signed_packet.public_key().to_bytes())?;
753770
let mut map = self.packets.lock();
@@ -771,7 +788,6 @@ mod test_dns_pkarr {
771788
Ok(updated)
772789
}
773790
pub fn get(&self, node_id: &NodeId) -> Option<impl Deref<Target = SignedPacket> + '_> {
774-
println!("GET {node_id}");
775791
let map = self.packets.lock();
776792
if map.contains_key(node_id) {
777793
let guard = MutexGuard::map(map, |state| state.get_mut(node_id).unwrap());

0 commit comments

Comments
 (0)