@@ -7,15 +7,17 @@ const dirtyChai = require('dirty-chai')
77const expect = chai . expect
88chai . use ( dirtyChai )
99
10+ const { EventEmitter } = require ( 'events' )
1011const PeerBook = require ( 'peer-book' )
1112const Duplex = require ( 'pull-pair/duplex' )
1213
1314const utils = require ( './utils' )
1415const createInfos = utils . createInfos
1516const Swarm = require ( '../src' )
1617
17- class MockTransport {
18+ class MockTransport extends EventEmitter {
1819 constructor ( ) {
20+ super ( )
1921 this . conn = Duplex ( )
2022 }
2123 dial ( addr , cb ) {
@@ -34,13 +36,20 @@ class MockTransport {
3436
3537describe ( `dial self` , ( ) => {
3638 let swarmA
39+ let peerInfos
3740
38- before ( ( done ) => createInfos ( 3 , ( err , infos ) => {
41+ before ( ( done ) => createInfos ( 2 , ( err , infos ) => {
3942 expect ( err ) . to . not . exist ( )
4043
41- const peerA = infos [ 0 ]
44+ const peerA = infos . shift ( )
45+ peerInfos = infos
4246
4347 peerA . multiaddrs . add ( '/ip4/127.0.0.1/tcp/9001' )
48+ peerA . multiaddrs . add ( `/ip4/127.0.0.1/tcp/9001/ipfs/${ peerA . id . toB58String ( ) } ` )
49+ peerA . multiaddrs . add ( `/ip4/127.0.0.1/tcp/9001/p2p-circuit/ipfs/${ peerA . id . toB58String ( ) } ` )
50+ peerA . multiaddrs . add ( '/ip4/0.0.0.0/tcp/9001' )
51+ peerA . multiaddrs . add ( `/ip4/0.0.0.0/tcp/9001/ipfs/${ peerA . id . toB58String ( ) } ` )
52+ peerA . multiaddrs . add ( `/ip4/0.0.0.0/tcp/9001/p2p-circuit/ipfs/${ peerA . id . toB58String ( ) } ` )
4453
4554 swarmA = new Swarm ( peerA , new PeerBook ( ) )
4655
@@ -59,4 +68,18 @@ describe(`dial self`, () => {
5968 done ( )
6069 } )
6170 } )
71+
72+ it ( 'node should not be able to dial another peers address that matches its own' , ( done ) => {
73+ const peerB = peerInfos . shift ( )
74+ peerB . multiaddrs . add ( '/ip4/127.0.0.1/tcp/9001' )
75+ peerB . multiaddrs . add ( '/ip4/0.0.0.0/tcp/9001' )
76+ peerB . multiaddrs . add ( `/ip4/0.0.0.0/tcp/9001/ipfs/${ peerB . id . toB58String ( ) } ` )
77+
78+ swarmA . dial ( peerB , ( err , conn ) => {
79+ expect ( err ) . to . exist ( )
80+ expect ( err . code ) . to . eql ( 'CONNECTION_FAILED' )
81+ expect ( conn ) . to . not . exist ( )
82+ done ( )
83+ } )
84+ } )
6285} )
0 commit comments