@@ -17,19 +17,30 @@ const sinon = require('sinon')
1717const expect = require ( 'chai' ) . expect
1818
1919describe ( 'relay' , function ( ) {
20- describe ( `handle circuit requests` , function ( ) {
20+ describe ( `should handle circuit requests` , function ( ) {
2121 let relay
2222 let swarm
2323 let fromConn
2424 let stream
2525 let shake
2626
2727 beforeEach ( function ( done ) {
28- stream = handshake ( { timeout : 1000 * 60 } )
28+ stream = handshake ( { timeout : 1000 * 60 } )
2929 shake = stream . handshake
3030 fromConn = new Connection ( stream )
3131 fromConn . setPeerInfo ( new PeerInfo ( PeerId . createFromB58String ( 'QmQWqGdndSpAkxfk8iyiJyz3XXGkrDNujvc8vEst3baubA' ) ) )
3232
33+ let peers = {
34+ QmSswe1dCFRepmhjAMR5VfHeokGLcvVggkuDJm7RMfJSrE :
35+ new PeerInfo ( PeerId . createFromB58String ( `QmSswe1dCFRepmhjAMR5VfHeokGLcvVggkuDJm7RMfJSrE` ) ) ,
36+ QmQWqGdndSpAkxfk8iyiJyz3XXGkrDNujvc8vEst3baubA :
37+ new PeerInfo ( PeerId . createFromB58String ( `QmQWqGdndSpAkxfk8iyiJyz3XXGkrDNujvc8vEst3baubA` ) ) ,
38+ QmQvM2mpqkjyXWbTHSUidUAWN26GgdMphTh9iGDdjgVXCy :
39+ new PeerInfo ( PeerId . createFromB58String ( `QmQvM2mpqkjyXWbTHSUidUAWN26GgdMphTh9iGDdjgVXCy` ) )
40+ }
41+
42+ Object . keys ( peers ) . forEach ( ( key ) => { peers [ key ] . _connectedMultiaddr = true } ) // make it truthy
43+
3344 waterfall ( [
3445 ( cb ) => PeerId . createFromJSON ( nodes . node4 , cb ) ,
3546 ( peerId , cb ) => PeerInfo . create ( peerId , cb ) ,
@@ -38,14 +49,25 @@ describe('relay', function () {
3849 swarm = {
3950 _peerInfo : peer ,
4051 conns : {
41- QmSswe1dCFRepmhjAMR5VfHeokGLcvVggkuDJm7RMfJSrE : new Connection ( )
52+ QmSswe1dCFRepmhjAMR5VfHeokGLcvVggkuDJm7RMfJSrE : new Connection ( ) ,
53+ QmQWqGdndSpAkxfk8iyiJyz3XXGkrDNujvc8vEst3baubA : new Connection ( ) ,
54+ QmQvM2mpqkjyXWbTHSUidUAWN26GgdMphTh9iGDdjgVXCy : new Connection ( )
55+ } ,
56+ _peerBook : {
57+ get : ( peer ) => {
58+ if ( ! peers [ peer ] ) {
59+ throw new Error ( )
60+ }
61+
62+ return peers [ peer ]
63+ }
4264 }
4365 }
4466
4567 cb ( )
4668 }
4769 ] , ( ) => {
48- relay = new Hop ( swarm , { enabled : true } )
70+ relay = new Hop ( swarm , { enabled : true } )
4971 relay . _circuit = sinon . stub ( )
5072 relay . _circuit . callsArg ( 2 , null , new Connection ( ) )
5173 done ( )
@@ -56,15 +78,15 @@ describe('relay', function () {
5678 relay . _circuit . reset ( )
5779 } )
5880
59- it ( `handle a valid circuit request` , function ( done ) {
81+ it ( `should handle a valid circuit request` , function ( done ) {
6082 let relayMsg = {
6183 type : proto . CircuitRelay . Type . HOP ,
6284 srcPeer : {
63- id : Buffer . from ( `QmSswe1dCFRepmhjAMR5VfHeokGLcvVggkuDJm7RMfJSrE` ) ,
85+ id : PeerId . createFromB58String ( `QmSswe1dCFRepmhjAMR5VfHeokGLcvVggkuDJm7RMfJSrE` ) . id ,
6486 addrs : [ multiaddr ( `/ipfs/QmSswe1dCFRepmhjAMR5VfHeokGLcvVggkuDJm7RMfJSrE` ) . buffer ]
6587 } ,
6688 dstPeer : {
67- id : Buffer . from ( `QmQWqGdndSpAkxfk8iyiJyz3XXGkrDNujvc8vEst3baubA` ) ,
89+ id : PeerId . createFromB58String ( `QmQWqGdndSpAkxfk8iyiJyz3XXGkrDNujvc8vEst3baubA` ) . id ,
6890 addrs : [ multiaddr ( `/ipfs/QmQWqGdndSpAkxfk8iyiJyz3XXGkrDNujvc8vEst3baubA` ) . buffer ]
6991 }
7092 }
@@ -77,15 +99,67 @@ describe('relay', function () {
7799 relay . handle ( relayMsg , new StreamHandler ( fromConn ) )
78100 } )
79101
102+ it ( `should handle a request to passive circuit` , function ( done ) {
103+ let relayMsg = {
104+ type : proto . CircuitRelay . Type . HOP ,
105+ srcPeer : {
106+ id : PeerId . createFromB58String ( `QmQWqGdndSpAkxfk8iyiJyz3XXGkrDNujvc8vEst3baubA` ) . id ,
107+ addrs : [ multiaddr ( `/ipfs/QmQWqGdndSpAkxfk8iyiJyz3XXGkrDNujvc8vEst3baubA` ) . buffer ]
108+ } ,
109+ dstPeer : {
110+ id : PeerId . createFromB58String ( `QmYJjAri5soV8RbeQcHaYYcTAYTET17QTvcoFMyKvRDTXe` ) . id ,
111+ addrs : [ multiaddr ( `/ipfs/QmYJjAri5soV8RbeQcHaYYcTAYTET17QTvcoFMyKvRDTXe` ) . buffer ]
112+ }
113+ }
114+
115+ relay . active = false
116+ lp . decodeFromReader ( shake , ( err , msg ) => {
117+ expect ( err ) . to . be . null
118+
119+ const response = proto . CircuitRelay . decode ( msg )
120+ expect ( response . code ) . to . equal ( proto . CircuitRelay . Status . HOP_NO_CONN_TO_DST )
121+ expect ( response . type ) . to . equal ( proto . CircuitRelay . Type . STATUS )
122+ done ( )
123+ } )
124+
125+ relay . handle ( relayMsg , new StreamHandler ( fromConn ) )
126+ } )
127+
128+ it ( `should handle a request to active circuit` , function ( done ) {
129+ let relayMsg = {
130+ type : proto . CircuitRelay . Type . HOP ,
131+ srcPeer : {
132+ id : PeerId . createFromB58String ( `QmQWqGdndSpAkxfk8iyiJyz3XXGkrDNujvc8vEst3baubA` ) . id ,
133+ addrs : [ multiaddr ( `/ipfs/QmQWqGdndSpAkxfk8iyiJyz3XXGkrDNujvc8vEst3baubA` ) . buffer ]
134+ } ,
135+ dstPeer : {
136+ id : PeerId . createFromB58String ( `QmYJjAri5soV8RbeQcHaYYcTAYTET17QTvcoFMyKvRDTXe` ) . id ,
137+ addrs : [ multiaddr ( `/ipfs/QmYJjAri5soV8RbeQcHaYYcTAYTET17QTvcoFMyKvRDTXe` ) . buffer ]
138+ }
139+ }
140+
141+ relay . active = true
142+ relay . on ( 'circuit:success' , ( ) => {
143+ expect ( relay . _circuit . calledWith ( sinon . match . any , relayMsg ) ) . to . be . ok
144+ done ( )
145+ } )
146+
147+ relay . on ( 'circuit:error' , ( err ) => {
148+ done ( err )
149+ } )
150+
151+ relay . handle ( relayMsg , new StreamHandler ( fromConn ) )
152+ } )
153+
80154 it ( `not dial to self` , function ( done ) {
81155 let relayMsg = {
82156 type : proto . CircuitRelay . Type . HOP ,
83157 srcPeer : {
84- id : Buffer . from ( `QmSswe1dCFRepmhjAMR5VfHeokGLcvVggkuDJm7RMfJSrE` ) ,
158+ id : PeerId . createFromB58String ( `QmSswe1dCFRepmhjAMR5VfHeokGLcvVggkuDJm7RMfJSrE` ) . id ,
85159 addrs : [ multiaddr ( `/ipfs/QmSswe1dCFRepmhjAMR5VfHeokGLcvVggkuDJm7RMfJSrE` ) . buffer ]
86160 } ,
87161 dstPeer : {
88- id : Buffer . from ( `QmQvM2mpqkjyXWbTHSUidUAWN26GgdMphTh9iGDdjgVXCy` ) ,
162+ id : PeerId . createFromB58String ( `QmQvM2mpqkjyXWbTHSUidUAWN26GgdMphTh9iGDdjgVXCy` ) . id ,
89163 addrs : [ multiaddr ( `/ipfs/QmQvM2mpqkjyXWbTHSUidUAWN26GgdMphTh9iGDdjgVXCy` ) . buffer ]
90164 }
91165 }
@@ -110,7 +184,7 @@ describe('relay', function () {
110184 addrs : [ `sdfkjsdnfkjdsb` ]
111185 } ,
112186 dstPeer : {
113- id : Buffer . from ( `QmQWqGdndSpAkxfk8iyiJyz3XXGkrDNujvc8vEst3baubA` ) ,
187+ id : PeerId . createFromB58String ( `QmQWqGdndSpAkxfk8iyiJyz3XXGkrDNujvc8vEst3baubA` ) . id ,
114188 addrs : [ multiaddr ( `/ipfs/QmQWqGdndSpAkxfk8iyiJyz3XXGkrDNujvc8vEst3baubA` ) . buffer ]
115189 }
116190 }
@@ -131,11 +205,11 @@ describe('relay', function () {
131205 let relayMsg = {
132206 type : proto . CircuitRelay . Type . HOP ,
133207 srcPeer : {
134- id : Buffer . from ( `QmQWqGdndSpAkxfk8iyiJyz3XXGkrDNujvc8vEst3baubA` ) ,
208+ id : PeerId . createFromB58String ( `QmQWqGdndSpAkxfk8iyiJyz3XXGkrDNujvc8vEst3baubA` ) . id ,
135209 addrs : [ multiaddr ( `/ipfs/QmQWqGdndSpAkxfk8iyiJyz3XXGkrDNujvc8vEst3baubA` ) . buffer ]
136210 } ,
137211 dstPeer : {
138- id : `sdfkjsdnfkjdsb` ,
212+ id : PeerId . createFromB58String ( `QmSswe1dCFRepmhjAMR5VfHeokGLcvVggkuDJm7RMfJSrE` ) . id ,
139213 addrs : [ `sdfkjsdnfkjdsb` ]
140214 }
141215 }
0 commit comments