@@ -7,8 +7,13 @@ const expect = chai.expect
77const sinon = require ( 'sinon' )
88const signalling = require ( 'libp2p-webrtc-star/src/sig-server' )
99const parallel = require ( 'async/parallel' )
10+ const retry = require ( 'async/retry' )
11+ const series = require ( 'async/series' )
1012const crypto = require ( 'crypto' )
1113
14+ const PeerId = require ( 'peer-id' )
15+ const PeerInfo = require ( 'peer-info' )
16+
1217const createNode = require ( './utils/create-node' )
1318const echo = require ( './utils/echo' )
1419
@@ -284,6 +289,68 @@ describe('peer discovery', () => {
284289 } )
285290 } )
286291
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+
287354 describe ( 'MulticastDNS + WebRTCStar' , ( ) => {
288355 setup ( {
289356 config : {
0 commit comments