@@ -38,25 +38,25 @@ describe('MulticastDNS', () => {
3838 ] )
3939
4040 aMultiaddrs = [
41- multiaddr ( '/ip4/127.0.0.1 /tcp/20001' ) ,
41+ multiaddr ( '/ip4/192.168.1.142 /tcp/20001' ) ,
4242 multiaddr ( '/dns4/webrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star' ) ,
4343 multiaddr ( '/dns4/discovery.libp2p.io/tcp/8443' )
4444 ]
4545
4646 bMultiaddrs = [
47- multiaddr ( '/ip4/127.0.0.1 /tcp/20002' ) ,
48- multiaddr ( '/ip6/::1 /tcp/20002' ) ,
47+ multiaddr ( '/ip4/192.168.1.143 /tcp/20002' ) ,
48+ multiaddr ( '/ip6/2604:1380:4602:5c00::3 /tcp/20002' ) ,
4949 multiaddr ( '/dnsaddr/discovery.libp2p.io' )
5050 ]
5151
5252 cMultiaddrs = [
53- multiaddr ( '/ip4/127.0.0.1 /tcp/20003' ) ,
54- multiaddr ( '/ip4/127.0.0.1 /tcp/30003/ws' ) ,
53+ multiaddr ( '/ip4/192.168.1.144 /tcp/20003' ) ,
54+ multiaddr ( '/ip4/192.168.1.144 /tcp/30003/ws' ) ,
5555 multiaddr ( '/dns4/discovery.libp2p.io' )
5656 ]
5757
5858 dMultiaddrs = [
59- multiaddr ( '/ip4/127.0.0.1 /tcp/30003/ws' )
59+ multiaddr ( '/ip4/192.168.1.145 /tcp/30003/ws' )
6060 ]
6161 } )
6262
@@ -110,7 +110,8 @@ describe('MulticastDNS', () => {
110110 await pWaitFor ( ( ) => peers . has ( expectedPeer ) )
111111 mdnsA . removeEventListener ( 'peer' , foundPeer )
112112
113- expect ( peers . get ( expectedPeer ) . multiaddrs . length ) . to . equal ( 3 )
113+ // everything except loopback
114+ expect ( peers . get ( expectedPeer ) . multiaddrs . length ) . to . equal ( 2 )
114115
115116 await stop ( mdnsA , mdnsB , mdnsD )
116117 } )
@@ -141,15 +142,6 @@ describe('MulticastDNS', () => {
141142 await stop ( mdnsC )
142143 } )
143144
144- it ( 'should start and stop with go-libp2p-mdns compat' , async ( ) => {
145- const mdnsA = mdns ( {
146- port : 50004
147- } ) ( getComponents ( pA , aMultiaddrs ) )
148-
149- await start ( mdnsA )
150- await stop ( mdnsA )
151- } )
152-
153145 it ( 'should not emit undefined peer ids' , async ( ) => {
154146 const mdnsA = mdns ( {
155147 port : 50004
@@ -219,4 +211,80 @@ describe('MulticastDNS', () => {
219211
220212 await stop ( mdnsA , mdnsB )
221213 } )
214+
215+ it ( 'only includes link-local addresses' , async function ( ) {
216+ this . timeout ( 40 * 1000 )
217+
218+ // these are not link-local addresses
219+ const publicAddress = '/ip4/48.52.76.32/tcp/1234'
220+ const relayDnsAddress = `/dnsaddr/example.org/tcp/1234/p2p/${ pD . toString ( ) } /p2p-circuit`
221+ const dnsAddress = '/dns4/example.org/tcp/1234'
222+
223+ // this address is too long to fit in a TXT record
224+ const longAddress = `/ip4/192.168.1.142/udp/4001/quic-v1/webtransport/certhash/uEiDils3hWFJmsWOJIoMPxAcpzlyFNxTDZpklIoB8643ddw/certhash/uEiAM4BGr4OMK3O9cFGwfbNc4J7XYnsKE5wNPKKaTLa4fkw/p2p/${ pD . toString ( ) } /p2p-circuit`
225+
226+ // these are link-local addresses
227+ const relayAddress = `/ip4/192.168.1.142/tcp/1234/p2p/${ pD . toString ( ) } /p2p-circuit`
228+ const localAddress = '/ip4/192.168.1.123/tcp/1234'
229+ const localWsAddress = '/ip4/192.168.1.123/tcp/1234/ws'
230+
231+ // these are not link-local but go-libp2p advertises loopback addresses even
232+ // though you shouldn't for mDNS
233+ const loopbackAddress = '/ip4/127.0.0.1/tcp/1234'
234+ const loopbackAddress6 = '/ip6/::1/tcp/1234'
235+
236+ const mdnsA = mdns ( {
237+ broadcast : false , // do not talk to ourself
238+ port : 50005 ,
239+ ip : '224.0.0.252'
240+ } ) ( getComponents ( pA , aMultiaddrs ) )
241+
242+ const mdnsB = mdns ( {
243+ port : 50005 , // port must be the same
244+ ip : '224.0.0.252' // ip must be the same
245+ } ) ( getComponents ( pB , [
246+ multiaddr ( publicAddress ) ,
247+ multiaddr ( relayAddress ) ,
248+ multiaddr ( relayDnsAddress ) ,
249+ multiaddr ( localAddress ) ,
250+ multiaddr ( loopbackAddress ) ,
251+ multiaddr ( loopbackAddress6 ) ,
252+ multiaddr ( dnsAddress ) ,
253+ multiaddr ( longAddress ) ,
254+ multiaddr ( localWsAddress )
255+ ] ) )
256+
257+ await start ( mdnsA , mdnsB )
258+
259+ const { detail : { id, multiaddrs } } = await new Promise < CustomEvent < PeerInfo > > ( ( resolve ) => {
260+ mdnsA . addEventListener ( 'peer' , resolve , {
261+ once : true
262+ } )
263+ } )
264+
265+ expect ( pB . toString ( ) ) . to . eql ( id . toString ( ) )
266+
267+ ; [
268+ publicAddress ,
269+ relayDnsAddress ,
270+ dnsAddress ,
271+ longAddress
272+ ] . forEach ( addr => {
273+ expect ( multiaddrs . map ( ma => ma . toString ( ) ) )
274+ . to . not . include ( addr )
275+ } )
276+
277+ ; [
278+ relayAddress ,
279+ localAddress ,
280+ localWsAddress ,
281+ loopbackAddress ,
282+ loopbackAddress6
283+ ] . forEach ( addr => {
284+ expect ( multiaddrs . map ( ma => ma . toString ( ) ) )
285+ . to . include ( addr )
286+ } )
287+
288+ await stop ( mdnsA , mdnsB )
289+ } )
222290} )
0 commit comments