Skip to content

Commit 67629cb

Browse files
committed
fix and test after rebase
1 parent 5ce8142 commit 67629cb

File tree

4 files changed

+70
-8
lines changed

4 files changed

+70
-8
lines changed

iroh-net/src/discovery.rs

Lines changed: 49 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -563,7 +563,7 @@ mod test_dns_pkarr {
563563
relay::{RelayMap, RelayMode},
564564
test_utils::{
565565
dns_server::{run_dns_server, Resolver},
566-
run_relay_server,
566+
run_relay_server, run_relay_server_with_pkarr,
567567
},
568568
AddrInfo, MagicEndpoint, NodeAddr,
569569
};
@@ -639,7 +639,7 @@ mod test_dns_pkarr {
639639
let (nameserver, pkarr_url, state, task) =
640640
spawn_dns_and_pkarr(origin.clone(), cancel.clone()).await?;
641641

642-
let (relay_map, _relay_url, _relay_guard) = run_relay_server().await.unwrap();
642+
let (relay_map, _relay_url, _relay_guard) = run_relay_server().await?;
643643
let ep1 = ep_with_discovery(relay_map.clone(), nameserver, &origin, &pkarr_url).await?;
644644
let ep2 = ep_with_discovery(relay_map, nameserver, &origin, &pkarr_url).await?;
645645

@@ -655,6 +655,51 @@ mod test_dns_pkarr {
655655
Ok(())
656656
}
657657

658+
#[tokio::test]
659+
async fn relay_pkarr_publish_dns_discover() -> Result<()> {
660+
let _logging_guard = iroh_test::logging::setup();
661+
662+
let cancel = CancellationToken::new();
663+
let origin = "testdns.example".to_string();
664+
let (nameserver, pkarr_url, state, task) =
665+
spawn_dns_and_pkarr(origin.clone(), cancel.clone()).await?;
666+
667+
let (relay_map, _relay_url, _relay_guard) =
668+
run_relay_server_with_pkarr(Some(pkarr_url)).await?;
669+
let ep1 = ep_with_discovery_publish_relay(relay_map.clone(), nameserver, &origin).await?;
670+
let ep2 = ep_with_discovery_publish_relay(relay_map, nameserver, &origin).await?;
671+
672+
// wait until our shared state received the update from pkarr publishing
673+
state.on_update().await;
674+
675+
// we connect only by node id!
676+
let ep2_node_id = ep2.node_id();
677+
let res = ep1.connect(ep2_node_id.into(), TEST_ALPN).await;
678+
assert!(res.is_ok(), "connection established");
679+
cancel.cancel();
680+
task.await??;
681+
Ok(())
682+
}
683+
684+
async fn ep_with_discovery_publish_relay(
685+
relay_map: RelayMap,
686+
nameserver: SocketAddr,
687+
node_origin: &str,
688+
) -> Result<MagicEndpoint> {
689+
let secret_key = SecretKey::generate();
690+
let resolver = dns_resolver(nameserver)?;
691+
let discovery = DnsDiscovery::new(node_origin.to_string());
692+
MagicEndpoint::builder()
693+
.relay_mode(RelayMode::Custom(relay_map))
694+
.secret_key(secret_key)
695+
.dns_resolver(resolver)
696+
.pkarr_announce()
697+
.alpns(vec![TEST_ALPN.to_vec()])
698+
.discovery(Box::new(discovery))
699+
.bind(0)
700+
.await
701+
}
702+
658703
async fn ep_with_discovery(
659704
relay_map: RelayMap,
660705
nameserver: SocketAddr,
@@ -670,15 +715,14 @@ mod test_dns_pkarr {
670715
pkarr_relay.clone(),
671716
)),
672717
]);
673-
let ep = MagicEndpoint::builder()
718+
MagicEndpoint::builder()
674719
.relay_mode(RelayMode::Custom(relay_map))
675720
.secret_key(secret_key)
676721
.dns_resolver(resolver)
677722
.alpns(vec![TEST_ALPN.to_vec()])
678723
.discovery(Box::new(discovery))
679724
.bind(0)
680-
.await?;
681-
Ok(ep)
725+
.await
682726
}
683727

684728
fn dns_resolver(nameserver: SocketAddr) -> Result<TokioAsyncResolver> {

iroh-net/src/magicsock/relay_actor.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use tokio_util::sync::CancellationToken;
1919
use tracing::{debug, info, info_span, trace, warn, Instrument};
2020

2121
use crate::{
22-
discovery::pkarr_relay_publish::DEFAULT_PKARR_TTL,
22+
discovery::pkarr_publish::DEFAULT_PKARR_TTL,
2323
dns::node_info::NodeInfo,
2424
key::{PublicKey, PUBLIC_KEY_LENGTH},
2525
relay::{self, http::ClientError, ReceivedMessage, RelayUrl, MAX_PACKET_SIZE},

iroh-net/src/relay/server.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use tokio_util::sync::CancellationToken;
1919
use tracing::{debug, info_span, trace, warn, Instrument};
2020
use url::Url;
2121

22-
use crate::discovery::pkarr_relay_publish::PkarrRelayClient as PkarrClient;
22+
use crate::discovery::pkarr_publish::PkarrRelayClient as PkarrClient;
2323
use crate::key::{PublicKey, SecretKey, SharedSecret};
2424

2525
use super::{

iroh-net/src/test_utils.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,30 @@ pub(crate) struct CleanupDropGuard(pub(crate) oneshot::Sender<()>);
2424
///
2525
/// [`MagicEndpoint::connect`]: crate::magic_endpoint::MagicEndpoint
2626
pub(crate) async fn run_relay_server() -> Result<(RelayMap, RelayUrl, CleanupDropGuard)> {
27+
run_relay_server_with_pkarr(None).await
28+
}
29+
30+
/// Runs a relay server with STUN enabled suitable for tests.
31+
///
32+
/// The returned `Url` is the url of the relay server in the returned [`RelayMap`], it
33+
/// is always `Some` as that is how the [`MagicEndpoint::connect`] API expects it.
34+
///
35+
/// [`MagicEndpoint::connect`]: crate::magic_endpoint::MagicEndpoint
36+
pub(crate) async fn run_relay_server_with_pkarr(
37+
pkarr_relay: Option<url::Url>,
38+
) -> Result<(RelayMap, RelayUrl, CleanupDropGuard)> {
2739
let server_key = SecretKey::generate();
2840
let me = server_key.public().fmt_short();
2941
let tls_config = crate::relay::http::make_tls_config();
3042
let server = crate::relay::http::ServerBuilder::new("127.0.0.1:0".parse().unwrap())
3143
.secret_key(Some(server_key))
32-
.tls_config(Some(tls_config))
44+
.tls_config(Some(tls_config));
45+
let server = if let Some(pkarr_relay) = pkarr_relay {
46+
server.pkarr_relay(pkarr_relay)
47+
} else {
48+
server
49+
};
50+
let server = server
3351
.spawn()
3452
.instrument(error_span!("relay server", %me))
3553
.await?;

0 commit comments

Comments
 (0)