@@ -197,16 +197,9 @@ func TestAddrResolution(t *testing.T) {
197197}
198198
199199func TestAddrResolutionRecursive (t * testing.T ) {
200- ctx := context .Background ()
200+ p1 := test .RandPeerIDFatal (t )
201+ p2 := test .RandPeerIDFatal (t )
201202
202- p1 , err := test .RandPeerID ()
203- if err != nil {
204- t .Error (err )
205- }
206- p2 , err := test .RandPeerID ()
207- if err != nil {
208- t .Error (err )
209- }
210203 addr1 := ma .StringCast ("/dnsaddr/example.com" )
211204 addr2 := ma .StringCast ("/ip4/192.0.2.1/tcp/123" )
212205 p2paddr1 := ma .StringCast ("/dnsaddr/example.com/p2p/" + p1 .String ())
@@ -221,25 +214,19 @@ func TestAddrResolutionRecursive(t *testing.T) {
221214 "dnsaddr=" + p2paddr1i .String (),
222215 "dnsaddr=" + p2paddr2i .String (),
223216 },
224- "_dnsaddr.foo.example.com" : {
225- "dnsaddr=" + p2paddr1f .String (),
226- },
227- "_dnsaddr.bar.example.com" : {
228- "dnsaddr=" + p2paddr2i .String (),
229- },
217+ "_dnsaddr.foo.example.com" : {"dnsaddr=" + p2paddr1f .String ()},
218+ "_dnsaddr.bar.example.com" : {"dnsaddr=" + p2paddr2i .String ()},
230219 },
231220 }
232221 resolver , err := madns .NewResolver (madns .WithDefaultResolver (backend ))
233- if err != nil {
234- t .Fatal (err )
235- }
222+ require .NoError (t , err )
236223
237224 s := newTestSwarmWithResolver (t , resolver )
238225
239226 pi1 , err := peer .AddrInfoFromP2pAddr (p2paddr1 )
240227 require .NoError (t , err )
241228
242- tctx , cancel := context .WithTimeout (ctx , time .Millisecond * 100 )
229+ tctx , cancel := context .WithTimeout (context . Background () , time .Millisecond * 100 )
243230 defer cancel ()
244231 s .Peerstore ().AddAddrs (pi1 .ID , pi1 .Addrs , peerstore .TempAddrTTL )
245232 _ , _ , err = s .addrsForDial (tctx , p1 )
@@ -263,6 +250,34 @@ func TestAddrResolutionRecursive(t *testing.T) {
263250 require .Contains (t , addrs2 , addr1 )
264251}
265252
253+ // see https://github.com/libp2p/go-libp2p/issues/2562
254+ func TestAddrResolutionRecursiveTransportSpecific (t * testing.T ) {
255+ p := test .RandPeerIDFatal (t )
256+
257+ backend := & madns.MockResolver {
258+ IP : map [string ][]net.IPAddr {
259+ "sub.example.com" : {net.IPAddr {IP : net .IPv4 (1 , 2 , 3 , 4 )}},
260+ },
261+ TXT : map [string ][]string {
262+ "_dnsaddr.example.com" : {"dnsaddr=/dns4/sub.example.com/tcp/443/wss/p2p/" + p .String ()},
263+ },
264+ }
265+ resolver , err := madns .NewResolver (madns .WithDefaultResolver (backend ))
266+ require .NoError (t , err )
267+
268+ s := newTestSwarmWithResolver (t , resolver )
269+ pi1 , err := peer .AddrInfoFromP2pAddr (ma .StringCast ("/dnsaddr/example.com/p2p/" + p .String ()))
270+ require .NoError (t , err )
271+
272+ tctx , cancel := context .WithTimeout (context .Background (), time .Millisecond * 100 )
273+ defer cancel ()
274+ s .Peerstore ().AddAddrs (pi1 .ID , pi1 .Addrs , peerstore .TempAddrTTL )
275+ addrs , _ , err := s .addrsForDial (tctx , p )
276+ require .NoError (t , err )
277+ require .Len (t , addrs , 1 )
278+ require .Equal (t , addrs [0 ].String (), "/ip4/1.2.3.4/tcp/443/tls/sni/sub.example.com/ws" )
279+ }
280+
266281func TestAddrsForDialFiltering (t * testing.T ) {
267282 q1 := ma .StringCast ("/ip4/1.2.3.4/udp/1/quic-v1" )
268283 q1v1 := ma .StringCast ("/ip4/1.2.3.4/udp/1/quic-v1" )
0 commit comments