@@ -38,25 +38,25 @@ describe('MulticastDNS', () => {
38
38
] )
39
39
40
40
aMultiaddrs = [
41
- multiaddr ( '/ip4/127.0.0.1 /tcp/20001' ) ,
41
+ multiaddr ( '/ip4/192.168.1.142 /tcp/20001' ) ,
42
42
multiaddr ( '/dns4/webrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star' ) ,
43
43
multiaddr ( '/dns4/discovery.libp2p.io/tcp/8443' )
44
44
]
45
45
46
46
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' ) ,
49
49
multiaddr ( '/dnsaddr/discovery.libp2p.io' )
50
50
]
51
51
52
52
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' ) ,
55
55
multiaddr ( '/dns4/discovery.libp2p.io' )
56
56
]
57
57
58
58
dMultiaddrs = [
59
- multiaddr ( '/ip4/127.0.0.1 /tcp/30003/ws' )
59
+ multiaddr ( '/ip4/192.168.1.145 /tcp/30003/ws' )
60
60
]
61
61
} )
62
62
@@ -110,7 +110,8 @@ describe('MulticastDNS', () => {
110
110
await pWaitFor ( ( ) => peers . has ( expectedPeer ) )
111
111
mdnsA . removeEventListener ( 'peer' , foundPeer )
112
112
113
- expect ( peers . get ( expectedPeer ) . multiaddrs . length ) . to . equal ( 3 )
113
+ // everything except loopback
114
+ expect ( peers . get ( expectedPeer ) . multiaddrs . length ) . to . equal ( 2 )
114
115
115
116
await stop ( mdnsA , mdnsB , mdnsD )
116
117
} )
@@ -141,15 +142,6 @@ describe('MulticastDNS', () => {
141
142
await stop ( mdnsC )
142
143
} )
143
144
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
-
153
145
it ( 'should not emit undefined peer ids' , async ( ) => {
154
146
const mdnsA = mdns ( {
155
147
port : 50004
@@ -219,4 +211,80 @@ describe('MulticastDNS', () => {
219
211
220
212
await stop ( mdnsA , mdnsB )
221
213
} )
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
+ } )
222
290
} )
0 commit comments