@@ -7,8 +7,13 @@ const expect = chai.expect
7
7
const sinon = require ( 'sinon' )
8
8
const signalling = require ( 'libp2p-webrtc-star/src/sig-server' )
9
9
const parallel = require ( 'async/parallel' )
10
+ const retry = require ( 'async/retry' )
11
+ const series = require ( 'async/series' )
10
12
const crypto = require ( 'crypto' )
11
13
14
+ const PeerId = require ( 'peer-id' )
15
+ const PeerInfo = require ( 'peer-info' )
16
+
12
17
const createNode = require ( './utils/create-node' )
13
18
const echo = require ( './utils/echo' )
14
19
@@ -284,6 +289,68 @@ describe('peer discovery', () => {
284
289
} )
285
290
} )
286
291
292
+ describe ( 'dht' , ( ) => {
293
+ setup ( {
294
+ config : {
295
+ peerDiscovery : {
296
+ mdns : {
297
+ enabled : false
298
+ } ,
299
+ webRTCStar : {
300
+ enabled : false
301
+ }
302
+ }
303
+ }
304
+ } )
305
+
306
+ // connect two dhts
307
+ function connectNoSync ( a , b , callback ) {
308
+ const publicPeerId = new PeerId ( b . peerInfo . id . id , null , b . peerInfo . id . pubKey )
309
+ const target = new PeerInfo ( publicPeerId )
310
+ target . multiaddrs = b . peerInfo . multiaddrs
311
+ a . switch . dial ( target , callback )
312
+ }
313
+
314
+ function find ( a , b , cb ) {
315
+ retry ( { times : 50 , interval : 100 } , ( cb ) => {
316
+ a . routingTable . find ( b . peerInfo . id , ( err , match ) => {
317
+ if ( err ) {
318
+ return cb ( err )
319
+ }
320
+ if ( ! match ) {
321
+ return cb ( new Error ( 'not found' ) )
322
+ }
323
+
324
+ try {
325
+ expect ( a . peerBook . get ( b . peerInfo ) . multiaddrs . toArray ( ) [ 0 ] . toString ( ) )
326
+ . to . eql ( b . peerInfo . multiaddrs . toArray ( ) [ 0 ] . toString ( ) )
327
+ } catch ( err ) {
328
+ return cb ( err )
329
+ }
330
+
331
+ cb ( )
332
+ } )
333
+ } , cb )
334
+ }
335
+
336
+ it ( 'find a peer' , function ( done ) {
337
+ this . timeout ( 15 * 1000 )
338
+
339
+ nodeA . once ( 'peer:discovery' , ( peerInfo ) => {
340
+ expect ( nodeB . peerInfo . id . toB58String ( ) )
341
+ . to . eql ( peerInfo . id . toB58String ( ) )
342
+ done ( )
343
+ } )
344
+
345
+ // connect to dhts
346
+ series ( [
347
+ ( cb ) => connectNoSync ( nodeA . _dht , nodeB . _dht , cb ) ,
348
+ ( cb ) => find ( nodeA . _dht , nodeB . _dht , cb ) ,
349
+ ( cb ) => find ( nodeB . _dht , nodeA . _dht , cb )
350
+ ] )
351
+ } )
352
+ } )
353
+
287
354
describe ( 'MulticastDNS + WebRTCStar' , ( ) => {
288
355
setup ( {
289
356
config : {
0 commit comments