@@ -563,7 +563,7 @@ mod test_dns_pkarr {
563
563
relay:: { RelayMap , RelayMode } ,
564
564
test_utils:: {
565
565
dns_server:: { run_dns_server, Resolver } ,
566
- run_relay_server,
566
+ run_relay_server, run_relay_server_with_pkarr ,
567
567
} ,
568
568
AddrInfo , MagicEndpoint , NodeAddr ,
569
569
} ;
@@ -639,7 +639,7 @@ mod test_dns_pkarr {
639
639
let ( nameserver, pkarr_url, state, task) =
640
640
spawn_dns_and_pkarr ( origin. clone ( ) , cancel. clone ( ) ) . await ?;
641
641
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 ? ;
643
643
let ep1 = ep_with_discovery ( relay_map. clone ( ) , nameserver, & origin, & pkarr_url) . await ?;
644
644
let ep2 = ep_with_discovery ( relay_map, nameserver, & origin, & pkarr_url) . await ?;
645
645
@@ -655,6 +655,51 @@ mod test_dns_pkarr {
655
655
Ok ( ( ) )
656
656
}
657
657
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
+
658
703
async fn ep_with_discovery (
659
704
relay_map : RelayMap ,
660
705
nameserver : SocketAddr ,
@@ -670,15 +715,14 @@ mod test_dns_pkarr {
670
715
pkarr_relay. clone( ) ,
671
716
) ) ,
672
717
] ) ;
673
- let ep = MagicEndpoint :: builder ( )
718
+ MagicEndpoint :: builder ( )
674
719
. relay_mode ( RelayMode :: Custom ( relay_map) )
675
720
. secret_key ( secret_key)
676
721
. dns_resolver ( resolver)
677
722
. alpns ( vec ! [ TEST_ALPN . to_vec( ) ] )
678
723
. discovery ( Box :: new ( discovery) )
679
724
. bind ( 0 )
680
- . await ?;
681
- Ok ( ep)
725
+ . await
682
726
}
683
727
684
728
fn dns_resolver ( nameserver : SocketAddr ) -> Result < TokioAsyncResolver > {
0 commit comments