From 2bd536e861dfb2faeb541a92abccc1d34f3caeea Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 22 Mar 2016 17:31:58 +0000 Subject: [PATCH] fix dirty identify bug --- src/identify.js | 12 ++++++---- tests/swarm-test.js | 58 +++++++++++++++++++++++++++++++++++++++------ 2 files changed, 59 insertions(+), 11 deletions(-) diff --git a/src/identify.js b/src/identify.js index 078d8444..35a2de20 100644 --- a/src/identify.js +++ b/src/identify.js @@ -42,7 +42,9 @@ exports.exec = (rawConn, muxer, peerInfo, callback) => { var pbs = pbStream() pbs.on('identify', (msg) => { - peerInfo.multiaddr.addSafe(msg.observedAddr) + if (msg.observedAddr.length > 0) { + peerInfo.multiaddr.addSafe(msg.observedAddr) + } const peerId = Id.createFromPubKey(msg.publicKey) const otherPeerInfo = new Info(peerId) @@ -60,7 +62,7 @@ exports.exec = (rawConn, muxer, peerInfo, callback) => { agentVersion: 'na', publicKey: peerInfo.id.pubKey, listenAddrs: peerInfo.multiaddrs.map((mh) => { return mh.buffer }), - observedAddr: obsMultiaddr ? obsMultiaddr.buffer : null + observedAddr: obsMultiaddr ? obsMultiaddr.buffer : new Buffer('') }) pbs.pipe(ds).pipe(pbs) @@ -77,7 +79,9 @@ exports.handler = (peerInfo, swarm) => { var pbs = pbStream() pbs.on('identify', function (msg) { - peerInfo.multiaddr.addSafe(msg.observedAddr) + if (msg.observedAddr.length > 0) { + peerInfo.multiaddr.addSafe(msg.observedAddr) + } const peerId = Id.createFromPubKey(msg.publicKey) const conn = swarm.muxedConns[peerId.toB58String()].conn @@ -90,7 +94,7 @@ exports.handler = (peerInfo, swarm) => { listenAddrs: peerInfo.multiaddrs.map(function (ma) { return ma.buffer }), - observedAddr: obsMultiaddr ? obsMultiaddr.buffer : null + observedAddr: obsMultiaddr ? obsMultiaddr.buffer : new Buffer('') }) pbs.finalize() }) diff --git a/tests/swarm-test.js b/tests/swarm-test.js index 6c0c3b42..5c86cb7e 100644 --- a/tests/swarm-test.js +++ b/tests/swarm-test.js @@ -529,11 +529,17 @@ describe('high level API - with everything mixed all together!', function () { var peerB var swarmC // tcp+ws var peerC + var swarmD // ws + var peerD + var swarmE // ws + var peerE before((done) => { peerA = new Peer() peerB = new Peer() peerC = new Peer() + peerD = new Peer() + peerE = new Peer() // console.log('peer A', peerA.id.toB58String()) // console.log('peer B', peerB.id.toB58String()) @@ -542,6 +548,8 @@ describe('high level API - with everything mixed all together!', function () { swarmA = new Swarm(peerA) swarmB = new Swarm(peerB) swarmC = new Swarm(peerC) + swarmD = new Swarm(peerD) + swarmE = new Swarm(peerE) done() }) @@ -552,18 +560,20 @@ describe('high level API - with everything mixed all together!', function () { swarmA.close(closed) swarmB.close(closed) swarmC.close(closed) + swarmD.close(closed) + swarmE.close(closed) function closed () { - if (++counter === 3) { + if (++counter === 4) { done() } } }) it('add tcp', (done) => { - peerA.multiaddr.add(multiaddr('/ip4/127.0.0.1/tcp/9011')) - peerB.multiaddr.add(multiaddr('/ip4/127.0.0.1/tcp/9021')) - peerC.multiaddr.add(multiaddr('/ip4/127.0.0.1/tcp/9031')) + peerA.multiaddr.add(multiaddr('/ip4/127.0.0.1/tcp/0')) + peerB.multiaddr.add(multiaddr('/ip4/127.0.0.1/tcp/0')) + peerC.multiaddr.add(multiaddr('/ip4/127.0.0.1/tcp/0')) swarmA.transport.add('tcp', new TCP()) swarmA.transport.listen('tcp', {}, null, ready) @@ -586,8 +596,10 @@ describe('high level API - with everything mixed all together!', function () { it.skip('add utp', (done) => {}) it('add websockets', (done) => { - peerB.multiaddr.add(multiaddr('/ip4/127.0.0.1/tcp/9022/websockets')) - peerC.multiaddr.add(multiaddr('/ip4/127.0.0.1/tcp/9032/websockets')) + peerB.multiaddr.add(multiaddr('/ip4/127.0.0.1/tcp/9012/websockets')) + peerC.multiaddr.add(multiaddr('/ip4/127.0.0.1/tcp/9022/websockets')) + peerD.multiaddr.add(multiaddr('/ip4/127.0.0.1/tcp/9032/websockets')) + peerE.multiaddr.add(multiaddr('/ip4/127.0.0.1/tcp/9042/websockets')) swarmB.transport.add('ws', new WebSockets()) swarmB.transport.listen('ws', {}, null, ready) @@ -595,10 +607,16 @@ describe('high level API - with everything mixed all together!', function () { swarmC.transport.add('ws', new WebSockets()) swarmC.transport.listen('ws', {}, null, ready) + swarmD.transport.add('ws', new WebSockets()) + swarmD.transport.listen('ws', {}, null, ready) + + swarmE.transport.add('ws', new WebSockets()) + swarmE.transport.listen('ws', {}, null, ready) + var counter = 0 function ready () { - if (++counter === 2) { + if (++counter === 4) { done() } } @@ -608,9 +626,15 @@ describe('high level API - with everything mixed all together!', function () { swarmA.connection.addStreamMuxer(spdy) swarmB.connection.addStreamMuxer(spdy) swarmC.connection.addStreamMuxer(spdy) + swarmD.connection.addStreamMuxer(spdy) + swarmE.connection.addStreamMuxer(spdy) + swarmA.connection.reuse() swarmB.connection.reuse() swarmC.connection.reuse() + swarmD.connection.reuse() + swarmE.connection.reuse() + done() }) @@ -631,6 +655,26 @@ describe('high level API - with everything mixed all together!', function () { }) }) + it('dial from ws to ws', (done) => { + swarmE.handle('/abacaxi/1.0.0', (conn) => { + conn.pipe(conn) + }) + + swarmD.dial(peerE, '/abacaxi/1.0.0', (err, conn) => { + expect(err).to.not.exist + expect(Object.keys(swarmD.muxedConns).length).to.equal(1) + + conn.end() + conn.on('data', () => {}) // let it flow.. let it flooooow + conn.on('end', () => { + setTimeout(() => { + expect(Object.keys(swarmE.muxedConns).length).to.equal(1) + done() + }, 1000) + }) + }) + }) + it('dial from tcp to tcp+ws (returned conn)', (done) => { swarmB.handle('/grapes/1.0.0', (conn) => { conn.pipe(conn)