mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-04-25 10:32:14 +00:00
feat: Bring libp2p-websocket-star to the Transports family! 🌟 (#122)
* test: add libp2p-websocket-star tests * refactor: websocket-star-{signal => rendezvous} * misc: Apply requested changes * chore: update deps * refactor: considerable amount of refactor, clean up test structure * use right flag * test: refactor transport tests
This commit is contained in:
parent
38a68a01b7
commit
95f029eb7a
55
.aegir.js
55
.aegir.js
@ -1,28 +1,41 @@
|
||||
'use strict'
|
||||
|
||||
const Node = require('./test/nodejs-bundle/nodejs-bundle.js')
|
||||
const PeerInfo = require('peer-info')
|
||||
const PeerId = require('peer-id')
|
||||
const pull = require('pull-stream')
|
||||
const parallel = require('async/parallel')
|
||||
|
||||
const rawPeer = require('./test/fixtures/test-peer.json')
|
||||
const Node = require('./test/utils/bundle.node.js')
|
||||
const sigServer = require('libp2p-webrtc-star/src/sig-server')
|
||||
let server
|
||||
const WebSocketStarRendezvous = require('libp2p-websocket-star-rendezvous')
|
||||
|
||||
let wrtcRendezvous
|
||||
let wsRendezvous
|
||||
let node
|
||||
const rawPeer = require('./test/browser-bundle/peer.json')
|
||||
|
||||
const before = (done) => {
|
||||
let count = 0
|
||||
const ready = () => ++count === 2 ? done() : null
|
||||
|
||||
sigServer.start({ port: 15555 }, (err, _server) => {
|
||||
if (err) {
|
||||
throw err
|
||||
}
|
||||
server = _server
|
||||
ready()
|
||||
parallel([
|
||||
(cb) => {
|
||||
sigServer.start({ port: 15555 }, (err, server) => {
|
||||
if (err) { return cb(err) }
|
||||
wrtcRendezvous = server
|
||||
cb()
|
||||
})
|
||||
|
||||
},
|
||||
(cb) => {
|
||||
WebSocketStarRendezvous.start({
|
||||
port: 14444,
|
||||
refreshPeerListIntervalMS: 1000,
|
||||
strictMultiaddr: false,
|
||||
cryptoChallenge: false
|
||||
}, (err, _server) => {
|
||||
if (err) { return cb(err) }
|
||||
wsRendezvous = _server
|
||||
cb()
|
||||
})
|
||||
},
|
||||
(cb) => {
|
||||
PeerId.createFromJSON(rawPeer, (err, peerId) => {
|
||||
if (err) {
|
||||
return done(err)
|
||||
@ -33,17 +46,18 @@ const before = (done) => {
|
||||
|
||||
node = new Node(peer)
|
||||
node.handle('/echo/1.0.0', (protocol, conn) => pull(conn, conn))
|
||||
node.start(() => ready())
|
||||
node.start(cb)
|
||||
})
|
||||
}
|
||||
], done)
|
||||
}
|
||||
|
||||
const after = (done) => {
|
||||
setTimeout(() => node.stop((err) => {
|
||||
if (err) {
|
||||
return done(err)
|
||||
}
|
||||
server.stop(done)
|
||||
}), 2000)
|
||||
setTimeout(() => parallel(
|
||||
[node, wrtcRendezvous, wsRendezvous].map((s) => {
|
||||
return (cb) => s.stop(cb)
|
||||
})
|
||||
, done), 2000)
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
@ -52,4 +66,3 @@ module.exports = {
|
||||
post: after
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -39,7 +39,7 @@
|
||||
"dependencies": {
|
||||
"async": "^2.6.0",
|
||||
"libp2p-ping": "~0.6.0",
|
||||
"libp2p-swarm": "~0.33.1",
|
||||
"libp2p-swarm": "~0.33.2",
|
||||
"mafmt": "^3.0.2",
|
||||
"multiaddr": "^3.0.1",
|
||||
"peer-book": "~0.5.1",
|
||||
@ -47,7 +47,7 @@
|
||||
"peer-info": "~0.11.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"aegir": "^12.1.3",
|
||||
"aegir": "^12.2.0",
|
||||
"chai": "^4.1.2",
|
||||
"cids": "~0.5.2",
|
||||
"dirty-chai": "^2.0.1",
|
||||
@ -62,6 +62,8 @@
|
||||
"libp2p-tcp": "~0.11.1",
|
||||
"libp2p-webrtc-star": "~0.13.2",
|
||||
"libp2p-websockets": "~0.10.4",
|
||||
"libp2p-websocket-star": "~0.5.1",
|
||||
"libp2p-websocket-star-rendezvous": "~0.2.1",
|
||||
"lodash.times": "^4.3.2",
|
||||
"pre-commit": "^1.2.2",
|
||||
"pull-goodbye": "0.0.2",
|
||||
|
@ -1,121 +0,0 @@
|
||||
/* eslint-env mocha */
|
||||
'use strict'
|
||||
|
||||
const chai = require('chai')
|
||||
chai.use(require('dirty-chai'))
|
||||
const expect = chai.expect
|
||||
const PeerInfo = require('peer-info')
|
||||
const PeerId = require('peer-id')
|
||||
const parallel = require('async/parallel')
|
||||
const pull = require('pull-stream')
|
||||
|
||||
const Node = require('./browser-bundle')
|
||||
|
||||
describe('libp2p-ipfs-browser (webrtc only)', () => {
|
||||
let peer1
|
||||
let peer2
|
||||
let node1
|
||||
let node2
|
||||
|
||||
it('create two peerInfo with webrtc-star addrs', (done) => {
|
||||
parallel([
|
||||
(cb) => PeerId.create({ bits: 1024 }, cb),
|
||||
(cb) => PeerId.create({ bits: 1024 }, cb)
|
||||
], (err, ids) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
peer1 = new PeerInfo(ids[0])
|
||||
const ma1 = '/ip4/127.0.0.1/tcp/15555/ws/p2p-webrtc-star/ipfs/' + ids[0].toB58String()
|
||||
peer1.multiaddrs.add(ma1)
|
||||
|
||||
peer2 = new PeerInfo(ids[1])
|
||||
const ma2 = '/ip4/127.0.0.1/tcp/15555/ws/p2p-webrtc-star/ipfs/' + ids[1].toB58String()
|
||||
peer2.multiaddrs.add(ma2)
|
||||
|
||||
done()
|
||||
})
|
||||
})
|
||||
|
||||
it('create two libp2p nodes with those peers', (done) => {
|
||||
node1 = new Node(peer1, null, { webRTCStar: true })
|
||||
node2 = new Node(peer2, null, { webRTCStar: true })
|
||||
done()
|
||||
})
|
||||
|
||||
it('listen on the two libp2p nodes', (done) => {
|
||||
parallel([
|
||||
(cb) => node1.start(cb),
|
||||
(cb) => node2.start(cb)
|
||||
], done)
|
||||
})
|
||||
|
||||
it('handle a protocol on the first node', () => {
|
||||
node2.handle('/echo/1.0.0', (protocol, conn) => pull(conn, conn))
|
||||
})
|
||||
|
||||
it('dial from the second node to the first node', (done) => {
|
||||
node1.dial(peer2, '/echo/1.0.0', (err, conn) => {
|
||||
expect(err).to.not.exist()
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
const text = 'hello'
|
||||
const peers1 = node1.peerBook.getAll()
|
||||
expect(Object.keys(peers1)).to.have.length(1)
|
||||
|
||||
const peers2 = node2.peerBook.getAll()
|
||||
expect(Object.keys(peers2)).to.have.length(1)
|
||||
|
||||
pull(
|
||||
pull.values([Buffer.from(text)]),
|
||||
conn,
|
||||
pull.collect((err, data) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(data[0].toString()).to.equal(text)
|
||||
done()
|
||||
})
|
||||
)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('node1 hangUp node2', (done) => {
|
||||
node1.hangUp(peer2, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
const peers = node1.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(node1.swarm.muxedConns)).to.have.length(0)
|
||||
done()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('create a third node and check that discovery works', (done) => {
|
||||
let counter = 0
|
||||
|
||||
function check () {
|
||||
if (++counter === 3) {
|
||||
expect(Object.keys(node1.swarm.muxedConns).length).to.equal(1)
|
||||
expect(Object.keys(node2.swarm.muxedConns).length).to.equal(1)
|
||||
done()
|
||||
}
|
||||
}
|
||||
|
||||
PeerId.create((err, id3) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
const peer3 = new PeerInfo(id3)
|
||||
const ma3 = '/ip4/127.0.0.1/tcp/15555/ws/p2p-webrtc-star/ipfs/' + id3.toB58String()
|
||||
peer3.multiaddrs.add(ma3)
|
||||
|
||||
node1.on('peer:discovery', (peerInfo) => node1.dial(peerInfo, check))
|
||||
node2.on('peer:discovery', (peerInfo) => node2.dial(peerInfo, check))
|
||||
|
||||
const node3 = new Node(peer3, null, { webRTCStar: true })
|
||||
node3.start(check)
|
||||
})
|
||||
})
|
||||
})
|
@ -1,201 +0,0 @@
|
||||
/* eslint max-nested-callbacks: ["error", 8] */
|
||||
/* eslint-env mocha */
|
||||
'use strict'
|
||||
|
||||
const chai = require('chai')
|
||||
chai.use(require('dirty-chai'))
|
||||
const expect = chai.expect
|
||||
const PeerInfo = require('peer-info')
|
||||
const PeerId = require('peer-id')
|
||||
const pull = require('pull-stream')
|
||||
const goodbye = require('pull-goodbye')
|
||||
const serializer = require('pull-serializer')
|
||||
const Buffer = require('safe-buffer').Buffer
|
||||
|
||||
const Node = require('./browser-bundle')
|
||||
const rawPeer = require('./peer.json')
|
||||
|
||||
describe('libp2p-ipfs-browser (websockets only)', () => {
|
||||
let peerB
|
||||
let nodeA
|
||||
|
||||
before((done) => {
|
||||
const ma = '/ip4/127.0.0.1/tcp/9200/ws/ipfs/' + rawPeer.id
|
||||
|
||||
PeerId.createFromPrivKey(rawPeer.privKey, (err, id) => {
|
||||
if (err) {
|
||||
return done(err)
|
||||
}
|
||||
|
||||
peerB = new PeerInfo(id)
|
||||
peerB.multiaddrs.add(ma)
|
||||
done()
|
||||
})
|
||||
})
|
||||
|
||||
after((done) => nodeA.stop(done))
|
||||
|
||||
it('create libp2pNode', (done) => {
|
||||
PeerInfo.create((err, peerInfo) => {
|
||||
expect(err).to.not.exist()
|
||||
peerInfo.multiaddrs.add('/ip4/0.0.0.0/tcp/0')
|
||||
|
||||
nodeA = new Node(peerInfo)
|
||||
done()
|
||||
})
|
||||
})
|
||||
|
||||
it('create libp2pNode with multiplex only', (done) => {
|
||||
PeerInfo.create((err, peerInfo) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
const b = new Node(peerInfo, null, { muxer: ['multiplex'] })
|
||||
expect(b.modules.connection.muxer).to.eql([require('libp2p-multiplex')])
|
||||
done()
|
||||
})
|
||||
})
|
||||
|
||||
it('start libp2pNode', (done) => {
|
||||
nodeA.start(done)
|
||||
})
|
||||
|
||||
// General connectivity tests
|
||||
|
||||
it('libp2p.dial using Multiaddr nodeA to nodeB', (done) => {
|
||||
nodeA.dial(peerB.multiaddrs.toArray()[0], (err) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
setTimeout(check, 500) // Some time for Identify to finish
|
||||
|
||||
function check () {
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
done()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('libp2p.dial using Multiaddr on Protocol nodeA to nodeB', (done) => {
|
||||
nodeA.dial(peerB.multiaddrs.toArray()[0], '/echo/1.0.0', (err, conn) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
|
||||
pull(
|
||||
pull.values([Buffer.from('hey')]),
|
||||
conn,
|
||||
pull.collect((err, data) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(data).to.eql([Buffer.from('hey')])
|
||||
done()
|
||||
})
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
it('libp2p.hangUp using Multiaddr nodeA to nodeB', (done) => {
|
||||
nodeA.hangUp(peerB.multiaddrs.toArray()[0], (err) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeA.swarm.muxedConns)).to.have.length(0)
|
||||
done()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('libp2p.dial using PeerInfo nodeA to nodeB', (done) => {
|
||||
nodeA.dial(peerB, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
setTimeout(check, 500) // Some time for Identify to finish
|
||||
|
||||
function check () {
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
done()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('libp2p.dial using PeerInfo on Protocol nodeA to nodeB', (done) => {
|
||||
nodeA.dial(peerB, '/echo/1.0.0', (err, conn) => {
|
||||
expect(err).to.not.exist()
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(err).to.not.exist()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
|
||||
pull(
|
||||
pull.values([Buffer.from('hey')]),
|
||||
conn,
|
||||
pull.collect((err, data) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(data).to.eql([Buffer.from('hey')])
|
||||
done()
|
||||
})
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
it('libp2p.hangUp using PeerInfo nodeA to nodeB', (done) => {
|
||||
nodeA.hangUp(peerB, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(err).to.not.exist()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeA.swarm.muxedConns)).to.have.length(0)
|
||||
done()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
describe('stress', () => {
|
||||
it('one big write', (done) => {
|
||||
nodeA.dial(peerB, '/echo/1.0.0', (err, conn) => {
|
||||
expect(err).to.not.exist()
|
||||
const rawMessage = Buffer.alloc(100000)
|
||||
rawMessage.fill('a')
|
||||
|
||||
const s = serializer(goodbye({
|
||||
source: pull.values([rawMessage]),
|
||||
sink: pull.collect((err, results) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(results).to.have.length(1)
|
||||
expect(Buffer.from(results[0])).to.have.length(rawMessage.length)
|
||||
done()
|
||||
})
|
||||
}))
|
||||
pull(s, conn, s)
|
||||
})
|
||||
})
|
||||
|
||||
it('many writes', (done) => {
|
||||
nodeA.dial(peerB, '/echo/1.0.0', (err, conn) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
const s = serializer(goodbye({
|
||||
source: pull(
|
||||
pull.infinite(),
|
||||
pull.take(1000),
|
||||
pull.map((val) => Buffer.from(val.toString()))
|
||||
),
|
||||
sink: pull.collect((err, result) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(result).to.have.length(1000)
|
||||
done()
|
||||
})
|
||||
}))
|
||||
|
||||
pull(s, conn, s)
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
@ -1,7 +1,4 @@
|
||||
'use strict'
|
||||
|
||||
const w = require('webrtcsupport')
|
||||
|
||||
require('./base')
|
||||
require('./browser-bundle/websockets-only')
|
||||
if (w.support) { require('./browser-bundle/webrtc-star-only') }
|
||||
require('./transports.browser')
|
||||
|
@ -5,7 +5,7 @@ const pull = require('pull-stream')
|
||||
const waterfall = require('async/waterfall')
|
||||
const series = require('async/series')
|
||||
const parallel = require('async/parallel')
|
||||
const utils = require('./utils')
|
||||
const utils = require('./utils/node')
|
||||
const Circuit = require('libp2p-circuit')
|
||||
const multiaddr = require('multiaddr')
|
||||
|
||||
@ -15,7 +15,7 @@ chai.use(require('dirty-chai'))
|
||||
const expect = chai.expect
|
||||
const sinon = require('sinon')
|
||||
|
||||
describe(`circuit`, function () {
|
||||
describe('circuit relay', function () {
|
||||
let handlerSpies = []
|
||||
let relayNode1
|
||||
let relayNode2
|
||||
@ -51,8 +51,8 @@ describe(`circuit`, function () {
|
||||
waterfall([
|
||||
// set up passive relay
|
||||
(cb) => setupNode([
|
||||
`/ip4/0.0.0.0/tcp/0/ws`,
|
||||
`/ip4/0.0.0.0/tcp/0`
|
||||
'/ip4/0.0.0.0/tcp/0/ws',
|
||||
'/ip4/0.0.0.0/tcp/0'
|
||||
], {
|
||||
relay: {
|
||||
enabled: true,
|
||||
@ -67,8 +67,8 @@ describe(`circuit`, function () {
|
||||
}),
|
||||
// setup active relay
|
||||
(cb) => setupNode([
|
||||
`/ip4/0.0.0.0/tcp/0/ws`,
|
||||
`/ip4/0.0.0.0/tcp/0`
|
||||
'/ip4/0.0.0.0/tcp/0/ws',
|
||||
'/ip4/0.0.0.0/tcp/0'
|
||||
], {
|
||||
relay: {
|
||||
enabled: true,
|
||||
@ -83,7 +83,7 @@ describe(`circuit`, function () {
|
||||
}),
|
||||
// setup node with WS
|
||||
(cb) => setupNode([
|
||||
`/ip4/0.0.0.0/tcp/0/ws`
|
||||
'/ip4/0.0.0.0/tcp/0/ws'
|
||||
], {
|
||||
relay: {
|
||||
enabled: true
|
||||
@ -94,7 +94,7 @@ describe(`circuit`, function () {
|
||||
}),
|
||||
// setup node with WS
|
||||
(cb) => setupNode([
|
||||
`/ip4/0.0.0.0/tcp/0/ws`
|
||||
'/ip4/0.0.0.0/tcp/0/ws'
|
||||
], {
|
||||
relay: {
|
||||
enabled: true
|
||||
@ -105,7 +105,7 @@ describe(`circuit`, function () {
|
||||
}),
|
||||
// set up node with TCP and listening on relay1
|
||||
(cb) => setupNode([
|
||||
`/ip4/0.0.0.0/tcp/0`,
|
||||
'/ip4/0.0.0.0/tcp/0',
|
||||
`/ipfs/${relayNode1.peerInfo.id.toB58String()}/p2p-circuit`
|
||||
], {
|
||||
relay: {
|
||||
@ -117,7 +117,7 @@ describe(`circuit`, function () {
|
||||
}),
|
||||
// set up node with TCP and listening on relay2 over TCP transport
|
||||
(cb) => setupNode([
|
||||
`/ip4/0.0.0.0/tcp/0`,
|
||||
'/ip4/0.0.0.0/tcp/0',
|
||||
`/ip4/0.0.0.0/tcp/0/ipfs/${relayNode2.peerInfo.id.toB58String()}/p2p-circuit`
|
||||
], {
|
||||
relay: {
|
||||
@ -150,9 +150,10 @@ describe(`circuit`, function () {
|
||||
], done)
|
||||
})
|
||||
|
||||
describe(`any relay`, function () {
|
||||
this.timeout(20000)
|
||||
it('should dial from WS1 to TCP1 over any R', function (done) {
|
||||
describe('any relay', function () {
|
||||
this.timeout(20 * 1000)
|
||||
|
||||
it('should dial from WS1 to TCP1 over any R', (done) => {
|
||||
nodeWS1.dial(nodeTCP1.peerInfo, '/echo/1.0.0', (err, conn) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(conn).to.exist()
|
||||
@ -160,8 +161,8 @@ describe(`circuit`, function () {
|
||||
pull(
|
||||
pull.values(['hello']),
|
||||
conn,
|
||||
pull.collect((e, result) => {
|
||||
expect(e).to.not.exist()
|
||||
pull.collect((err, result) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(result[0].toString()).to.equal('hello')
|
||||
done()
|
||||
})
|
||||
@ -169,7 +170,7 @@ describe(`circuit`, function () {
|
||||
})
|
||||
})
|
||||
|
||||
it(`should not dial - no R from WS2 to TCP1`, function (done) {
|
||||
it('should not dial - no R from WS2 to TCP1', (done) => {
|
||||
nodeWS2.dial(nodeTCP2.peerInfo, '/echo/1.0.0', (err, conn) => {
|
||||
expect(err).to.exist()
|
||||
expect(conn).to.not.exist()
|
||||
@ -178,9 +179,10 @@ describe(`circuit`, function () {
|
||||
})
|
||||
})
|
||||
|
||||
describe(`explicit relay`, function () {
|
||||
this.timeout(20000)
|
||||
it('should dial from WS1 to TCP1 over R1', function (done) {
|
||||
describe('explicit relay', function () {
|
||||
this.timeout(20 * 1000)
|
||||
|
||||
it('should dial from WS1 to TCP1 over R1', (done) => {
|
||||
nodeWS1.dial(nodeTCP1.peerInfo, '/echo/1.0.0', (err, conn) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(conn).to.exist()
|
||||
@ -188,8 +190,8 @@ describe(`circuit`, function () {
|
||||
pull(
|
||||
pull.values(['hello']),
|
||||
conn,
|
||||
pull.collect((e, result) => {
|
||||
expect(e).to.not.exist()
|
||||
pull.collect((err, result) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(result[0].toString()).to.equal('hello')
|
||||
|
||||
const addr = multiaddr(handlerSpies[0].args[2][0].dstPeer.addrs[0]).toString()
|
||||
@ -200,7 +202,7 @@ describe(`circuit`, function () {
|
||||
})
|
||||
})
|
||||
|
||||
it(`should dial from WS1 to TCP2 over R2`, function (done) {
|
||||
it('should dial from WS1 to TCP2 over R2', (done) => {
|
||||
nodeWS1.dial(nodeTCP2.peerInfo, '/echo/1.0.0', (err, conn) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(conn).to.exist()
|
||||
@ -208,8 +210,8 @@ describe(`circuit`, function () {
|
||||
pull(
|
||||
pull.values(['hello']),
|
||||
conn,
|
||||
pull.collect((e, result) => {
|
||||
expect(e).to.not.exist()
|
||||
pull.collect((err, result) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(result[0].toString()).to.equal('hello')
|
||||
|
||||
const addr = multiaddr(handlerSpies[1].args[2][0].dstPeer.addrs[0]).toString()
|
@ -7,10 +7,10 @@ const chai = require('chai')
|
||||
chai.use(require('dirty-chai'))
|
||||
const expect = chai.expect
|
||||
const parallel = require('async/parallel')
|
||||
const utils = require('./utils')
|
||||
const createNode = utils.createNode
|
||||
const _times = require('lodash.times')
|
||||
const CID = require('cids')
|
||||
const utils = require('./utils/node')
|
||||
const createNode = utils.createNode
|
||||
|
||||
describe('.contentRouting', () => {
|
||||
let nodeA
|
||||
@ -20,7 +20,7 @@ describe('.contentRouting', () => {
|
||||
let nodeE
|
||||
|
||||
before(function (done) {
|
||||
this.timeout(5000)
|
||||
this.timeout(5 * 1000)
|
||||
const tasks = _times(5, () => (cb) => {
|
||||
createNode('/ip4/0.0.0.0/tcp/0', {
|
||||
mdns: false,
|
14
test/node.js
14
test/node.js
@ -1,11 +1,9 @@
|
||||
'use strict'
|
||||
|
||||
require('./base')
|
||||
require('./nodejs-bundle/tcp')
|
||||
require('./nodejs-bundle/tcp+websockets')
|
||||
require('./nodejs-bundle/tcp+websockets+webrtc-star')
|
||||
require('./nodejs-bundle/stream-muxing')
|
||||
require('./nodejs-bundle/discovery')
|
||||
require('./nodejs-bundle/peer-routing')
|
||||
require('./nodejs-bundle/content-routing')
|
||||
require('./nodejs-bundle/circuit')
|
||||
require('./transports.node')
|
||||
require('./stream-muxing.node')
|
||||
require('./peer-discovery.node')
|
||||
require('./peer-routing.node')
|
||||
require('./content-routing.node')
|
||||
require('./circuit-relay.node')
|
||||
|
@ -1,30 +0,0 @@
|
||||
#! /usr/bin/env node
|
||||
|
||||
'use strict'
|
||||
|
||||
const Node = require('./nodejs-bundle')
|
||||
const PeerInfo = require('peer-info')
|
||||
const PeerId = require('peer-id')
|
||||
const pull = require('pull-stream')
|
||||
|
||||
const idBak = require('./test-data/test-id.json')
|
||||
|
||||
PeerId.createFromJSON(idBak, (err, peerId) => {
|
||||
if (err) {
|
||||
throw err
|
||||
}
|
||||
|
||||
const peerInfo = new PeerInfo(peerId)
|
||||
|
||||
peerInfo.multiaddrs.add('/ip4/127.0.0.1/tcp/12345')
|
||||
|
||||
const node = new Node(peerInfo)
|
||||
|
||||
node.handle('/echo/1.0.0', (protocol, conn) => pull(conn, conn))
|
||||
|
||||
node.start((err) => {
|
||||
if (err) { throw err }
|
||||
|
||||
console.log('Spawned node started, env:', process.env.LIBP2P_MUXER)
|
||||
})
|
||||
})
|
@ -1,248 +0,0 @@
|
||||
/* eslint-env mocha */
|
||||
'use strict'
|
||||
|
||||
const chai = require('chai')
|
||||
chai.use(require('dirty-chai'))
|
||||
const expect = chai.expect
|
||||
const parallel = require('async/parallel')
|
||||
const signalling = require('libp2p-webrtc-star/src/sig-server')
|
||||
const WStar = require('libp2p-webrtc-star')
|
||||
const wrtc = require('wrtc')
|
||||
const utils = require('./utils')
|
||||
const createNode = utils.createNode
|
||||
const echo = utils.echo
|
||||
|
||||
describe('TCP + WebSockets + WebRTCStar', () => {
|
||||
let nodeAll
|
||||
let nodeTCP
|
||||
let nodeWS
|
||||
let nodeWStar
|
||||
|
||||
let ss
|
||||
|
||||
before(function (done) {
|
||||
this.timeout(5000)
|
||||
parallel([
|
||||
(cb) => {
|
||||
signalling.start({ port: 24642 }, (err, server) => {
|
||||
expect(err).to.not.exist()
|
||||
ss = server
|
||||
cb()
|
||||
})
|
||||
},
|
||||
(cb) => {
|
||||
const wstar = new WStar({wrtc: wrtc})
|
||||
createNode([
|
||||
'/ip4/0.0.0.0/tcp/0',
|
||||
'/ip4/127.0.0.1/tcp/25011/ws',
|
||||
'/ip4/127.0.0.1/tcp/24642/ws/p2p-webrtc-star'
|
||||
], {
|
||||
modules: {
|
||||
transport: [wstar],
|
||||
discovery: [wstar.discovery]
|
||||
}
|
||||
}, (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
nodeAll = node
|
||||
node.handle('/echo/1.0.0', echo)
|
||||
node.start(cb)
|
||||
})
|
||||
},
|
||||
(cb) => createNode([
|
||||
'/ip4/0.0.0.0/tcp/0'
|
||||
], (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
nodeTCP = node
|
||||
node.handle('/echo/1.0.0', echo)
|
||||
node.start(cb)
|
||||
}),
|
||||
(cb) => createNode([
|
||||
'/ip4/127.0.0.1/tcp/25022/ws'
|
||||
], (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
nodeWS = node
|
||||
node.handle('/echo/1.0.0', echo)
|
||||
node.start(cb)
|
||||
}),
|
||||
|
||||
(cb) => {
|
||||
const wstar = new WStar({wrtc: wrtc})
|
||||
|
||||
createNode([
|
||||
'/ip4/127.0.0.1/tcp/24642/ws/p2p-webrtc-star'
|
||||
], {
|
||||
modules: {
|
||||
transport: [wstar],
|
||||
discovery: [wstar.discovery]
|
||||
}
|
||||
}, (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
nodeWStar = node
|
||||
node.handle('/echo/1.0.0', echo)
|
||||
node.start(cb)
|
||||
})
|
||||
}
|
||||
], done)
|
||||
})
|
||||
|
||||
after((done) => {
|
||||
parallel([
|
||||
(cb) => nodeAll.stop(cb),
|
||||
(cb) => nodeTCP.stop(cb),
|
||||
(cb) => nodeWS.stop(cb),
|
||||
(cb) => nodeWStar.stop(cb),
|
||||
(cb) => ss.stop(done)
|
||||
], done)
|
||||
})
|
||||
|
||||
it('nodeAll.dial nodeTCP using PeerInfo', (done) => {
|
||||
nodeAll.dial(nodeTCP.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
// Some time for Identify to finish
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
parallel([
|
||||
(cb) => {
|
||||
const peers = nodeAll.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeAll.swarm.muxedConns)).to.have.length(1)
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeTCP.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeTCP.swarm.muxedConns)).to.have.length(1)
|
||||
cb()
|
||||
}
|
||||
], done)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeAll.hangUp nodeTCP using PeerInfo', (done) => {
|
||||
nodeAll.hangUp(nodeTCP.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
parallel([
|
||||
(cb) => {
|
||||
const peers = nodeAll.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeAll.swarm.muxedConns)).to.have.length(0)
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeTCP.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeTCP.swarm.muxedConns)).to.have.length(0)
|
||||
cb()
|
||||
}
|
||||
], done)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeAll.dial nodeWS using PeerInfo', (done) => {
|
||||
nodeAll.dial(nodeWS.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
// Some time for Identify to finish
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
parallel([
|
||||
(cb) => {
|
||||
const peers = nodeAll.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(2)
|
||||
expect(Object.keys(nodeAll.swarm.muxedConns)).to.have.length(1)
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeWS.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeWS.swarm.muxedConns)).to.have.length(1)
|
||||
cb()
|
||||
}
|
||||
], done)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeAll.hangUp nodeWS using PeerInfo', (done) => {
|
||||
nodeAll.hangUp(nodeWS.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
parallel([
|
||||
(cb) => {
|
||||
const peers = nodeAll.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(2)
|
||||
expect(Object.keys(nodeAll.swarm.muxedConns)).to.have.length(0)
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeWS.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeWS.swarm.muxedConns)).to.have.length(0)
|
||||
cb()
|
||||
}
|
||||
], done)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeAll.dial nodeWStar using PeerInfo', function (done) {
|
||||
this.timeout(10000)
|
||||
nodeAll.dial(nodeWStar.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
// Some time for Identify to finish
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
parallel([
|
||||
(cb) => {
|
||||
const peers = nodeAll.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(3)
|
||||
expect(Object.keys(nodeAll.swarm.muxedConns)).to.have.length(1)
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeWStar.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeAll.swarm.muxedConns)).to.have.length(1)
|
||||
cb()
|
||||
}
|
||||
], done)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeAll.hangUp nodeWStar using PeerInfo', (done) => {
|
||||
nodeAll.hangUp(nodeWStar.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
parallel([
|
||||
(cb) => {
|
||||
const peers = nodeAll.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(3)
|
||||
expect(Object.keys(nodeAll.swarm.muxedConns)).to.have.length(0)
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeWStar.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeWStar.swarm.muxedConns)).to.have.length(0)
|
||||
cb()
|
||||
}
|
||||
], done)
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
@ -1,167 +0,0 @@
|
||||
/* eslint-env mocha */
|
||||
'use strict'
|
||||
|
||||
const chai = require('chai')
|
||||
chai.use(require('dirty-chai'))
|
||||
const expect = chai.expect
|
||||
const parallel = require('async/parallel')
|
||||
// const multiaddr = require('multiaddr')
|
||||
// const pull = require('pull-stream')
|
||||
const utils = require('./utils')
|
||||
const createNode = utils.createNode
|
||||
const echo = utils.echo
|
||||
|
||||
describe('TCP + WebSockets', () => {
|
||||
let nodeTCP
|
||||
let nodeTCPnWS
|
||||
let nodeWS
|
||||
|
||||
before((done) => {
|
||||
parallel([
|
||||
(cb) => createNode([
|
||||
'/ip4/0.0.0.0/tcp/0'
|
||||
], (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
nodeTCP = node
|
||||
node.handle('/echo/1.0.0', echo)
|
||||
node.start(cb)
|
||||
}),
|
||||
(cb) => createNode([
|
||||
'/ip4/0.0.0.0/tcp/0',
|
||||
'/ip4/127.0.0.1/tcp/25011/ws'
|
||||
], (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
nodeTCPnWS = node
|
||||
node.handle('/echo/1.0.0', echo)
|
||||
node.start(cb)
|
||||
}),
|
||||
(cb) => createNode([
|
||||
'/ip4/127.0.0.1/tcp/25022/ws'
|
||||
], (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
nodeWS = node
|
||||
node.handle('/echo/1.0.0', echo)
|
||||
node.start(cb)
|
||||
})
|
||||
], done)
|
||||
})
|
||||
|
||||
after((done) => {
|
||||
parallel([
|
||||
(cb) => nodeTCP.stop(cb),
|
||||
(cb) => nodeTCPnWS.stop(cb),
|
||||
(cb) => nodeWS.stop(cb)
|
||||
], done)
|
||||
})
|
||||
|
||||
it('nodeTCP.dial nodeTCPnWS using PeerInfo', (done) => {
|
||||
nodeTCP.dial(nodeTCPnWS.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
// Some time for Identify to finish
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
parallel([
|
||||
(cb) => {
|
||||
const peers = nodeTCP.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeTCP.swarm.muxedConns)).to.have.length(1)
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeTCPnWS.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeTCPnWS.swarm.muxedConns)).to.have.length(1)
|
||||
cb()
|
||||
}
|
||||
], done)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeTCP.hangUp nodeTCPnWS using PeerInfo', (done) => {
|
||||
nodeTCP.hangUp(nodeTCPnWS.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
parallel([
|
||||
(cb) => {
|
||||
const peers = nodeTCP.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeTCP.swarm.muxedConns)).to.have.length(0)
|
||||
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeTCPnWS.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeTCPnWS.swarm.muxedConns)).to.have.length(0)
|
||||
cb()
|
||||
}
|
||||
], done)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeTCPnWS.dial nodeWS using PeerInfo', (done) => {
|
||||
nodeTCPnWS.dial(nodeWS.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
// Some time for Identify to finish
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
parallel([
|
||||
(cb) => {
|
||||
const peers = nodeTCPnWS.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(2)
|
||||
expect(Object.keys(nodeTCPnWS.swarm.muxedConns)).to.have.length(1)
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeWS.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeWS.swarm.muxedConns)).to.have.length(1)
|
||||
cb()
|
||||
}
|
||||
], done)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeTCPnWS.hangUp nodeWS using PeerInfo', (done) => {
|
||||
nodeTCPnWS.hangUp(nodeWS.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
parallel([
|
||||
(cb) => {
|
||||
const peers = nodeTCPnWS.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(2)
|
||||
expect(Object.keys(nodeTCPnWS.swarm.muxedConns)).to.have.length(0)
|
||||
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeWS.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeWS.swarm.muxedConns)).to.have.length(0)
|
||||
cb()
|
||||
}
|
||||
], done)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
// Until https://github.com/libp2p/js-libp2p/issues/46 is resolved
|
||||
// Everynode will be able to dial in WebSockets
|
||||
it.skip('nodeTCP.dial nodeWS using PeerInfo is unsuccesful', (done) => {
|
||||
nodeTCP.dial(nodeWS.peerInfo, (err) => {
|
||||
expect(err).to.exist()
|
||||
done()
|
||||
})
|
||||
})
|
||||
})
|
@ -1,234 +0,0 @@
|
||||
/* eslint-env mocha */
|
||||
'use strict'
|
||||
|
||||
const chai = require('chai')
|
||||
chai.use(require('dirty-chai'))
|
||||
const expect = chai.expect
|
||||
const parallel = require('async/parallel')
|
||||
const series = require('async/series')
|
||||
const pull = require('pull-stream')
|
||||
const utils = require('./utils')
|
||||
const createNode = utils.createNode
|
||||
const echo = utils.echo
|
||||
|
||||
describe('TCP only', () => {
|
||||
let nodeA
|
||||
let nodeB
|
||||
|
||||
before((done) => {
|
||||
parallel([
|
||||
(cb) => createNode('/ip4/0.0.0.0/tcp/0', (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
nodeA = node
|
||||
node.handle('/echo/1.0.0', echo)
|
||||
node.start(cb)
|
||||
}),
|
||||
(cb) => createNode('/ip4/0.0.0.0/tcp/0', (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
nodeB = node
|
||||
node.handle('/echo/1.0.0', echo)
|
||||
node.start(cb)
|
||||
})
|
||||
], done)
|
||||
})
|
||||
|
||||
after((done) => {
|
||||
parallel([
|
||||
(cb) => nodeA.stop(cb),
|
||||
(cb) => nodeB.stop(cb)
|
||||
], done)
|
||||
})
|
||||
|
||||
it('nodeA.dial nodeB using PeerInfo without proto (warmup)', (done) => {
|
||||
nodeA.dial(nodeB.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
// Some time for Identify to finish
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
parallel([
|
||||
(cb) => {
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(err).to.not.exist()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeB.peerBook.getAll()
|
||||
expect(err).to.not.exist()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
cb()
|
||||
}
|
||||
], done)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeA.dial nodeB using PeerInfo', (done) => {
|
||||
nodeA.dial(nodeB.peerInfo, '/echo/1.0.0', (err, conn) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
pull(
|
||||
pull.values([Buffer.from('hey')]),
|
||||
conn,
|
||||
pull.collect((err, data) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(data).to.be.eql([Buffer.from('hey')])
|
||||
done()
|
||||
})
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeA.hangUp nodeB using PeerInfo (first)', (done) => {
|
||||
nodeA.hangUp(nodeB.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
parallel([
|
||||
(cb) => {
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeA.swarm.muxedConns)).to.have.length(0)
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeB.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
|
||||
expect(Object.keys(nodeB.swarm.muxedConns)).to.have.length(0)
|
||||
cb()
|
||||
}
|
||||
], done)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeA.dial nodeB using multiaddr', (done) => {
|
||||
nodeA.dial(nodeB.peerInfo.multiaddrs.toArray()[0], '/echo/1.0.0', (err, conn) => {
|
||||
// Some time for Identify to finish
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
expect(err).to.not.exist()
|
||||
series([
|
||||
(cb) => {
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
|
||||
expect(Object.keys(nodeA.swarm.muxedConns)).to.have.length(1)
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeB.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
|
||||
expect(Object.keys(nodeA.swarm.muxedConns)).to.have.length(1)
|
||||
cb()
|
||||
}
|
||||
], () => {
|
||||
pull(
|
||||
pull.values([Buffer.from('hey')]),
|
||||
conn,
|
||||
pull.collect((err, data) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(data).to.be.eql([Buffer.from('hey')])
|
||||
done()
|
||||
})
|
||||
)
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeA.hangUp nodeB using multiaddr (second)', (done) => {
|
||||
nodeA.hangUp(nodeB.peerInfo.multiaddrs.toArray()[0], (err) => {
|
||||
expect(err).to.not.exist()
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
parallel([
|
||||
(cb) => {
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
|
||||
expect(Object.keys(nodeA.swarm.muxedConns)).to.have.length(0)
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeB.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
|
||||
expect(Object.keys(nodeB.swarm.muxedConns)).to.have.length(0)
|
||||
cb()
|
||||
}
|
||||
], done)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeA.dial nodeB using PeerId', (done) => {
|
||||
nodeA.dial(nodeB.peerInfo.id, '/echo/1.0.0', (err, conn) => {
|
||||
// Some time for Identify to finish
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
expect(err).to.not.exist()
|
||||
series([
|
||||
(cb) => {
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
|
||||
expect(Object.keys(nodeA.swarm.muxedConns)).to.have.length(1)
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeB.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
|
||||
expect(Object.keys(nodeA.swarm.muxedConns)).to.have.length(1)
|
||||
cb()
|
||||
}
|
||||
], () => {
|
||||
pull(
|
||||
pull.values([Buffer.from('hey')]),
|
||||
conn,
|
||||
pull.collect((err, data) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(data).to.be.eql([Buffer.from('hey')])
|
||||
done()
|
||||
})
|
||||
)
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeA.hangUp nodeB using PeerId (third)', (done) => {
|
||||
nodeA.hangUp(nodeB.peerInfo.multiaddrs.toArray()[0], (err) => {
|
||||
expect(err).to.not.exist()
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
parallel([
|
||||
(cb) => {
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
|
||||
expect(Object.keys(nodeA.swarm.muxedConns)).to.have.length(0)
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeB.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
|
||||
expect(Object.keys(nodeB.swarm.muxedConns)).to.have.length(0)
|
||||
cb()
|
||||
}
|
||||
], done)
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
@ -6,11 +6,11 @@ chai.use(require('dirty-chai'))
|
||||
const expect = chai.expect
|
||||
const signalling = require('libp2p-webrtc-star/src/sig-server')
|
||||
const parallel = require('async/parallel')
|
||||
const utils = require('./utils')
|
||||
const utils = require('./utils/node')
|
||||
const createNode = utils.createNode
|
||||
const echo = utils.echo
|
||||
|
||||
describe('discovery', () => {
|
||||
describe('peer discovery', () => {
|
||||
let nodeA
|
||||
let nodeB
|
||||
let port = 24642
|
||||
@ -61,7 +61,8 @@ describe('discovery', () => {
|
||||
setup({ mdns: true })
|
||||
|
||||
it('find a peer', function (done) {
|
||||
this.timeout(15000)
|
||||
this.timeout(15 * 1000)
|
||||
|
||||
nodeA.once('peer:discovery', (peerInfo) => {
|
||||
expect(nodeB.peerInfo.id.toB58String())
|
||||
.to.eql(peerInfo.id.toB58String())
|
||||
@ -75,7 +76,7 @@ describe('discovery', () => {
|
||||
setup({ webRTCStar: true })
|
||||
|
||||
it('find a peer', function (done) {
|
||||
this.timeout(15000)
|
||||
this.timeout(15 * 1000)
|
||||
nodeA.once('peer:discovery', (peerInfo) => {
|
||||
expect(nodeB.peerInfo.id.toB58String())
|
||||
.to.eql(peerInfo.id.toB58String())
|
||||
@ -91,7 +92,7 @@ describe('discovery', () => {
|
||||
})
|
||||
|
||||
it('find a peer', function (done) {
|
||||
this.timeout(15000)
|
||||
this.timeout(15 * 1000)
|
||||
nodeA.once('peer:discovery', (peerInfo) => {
|
||||
expect(nodeB.peerInfo.id.toB58String())
|
||||
.to.eql(peerInfo.id.toB58String())
|
@ -7,9 +7,9 @@ const chai = require('chai')
|
||||
chai.use(require('dirty-chai'))
|
||||
const expect = chai.expect
|
||||
const parallel = require('async/parallel')
|
||||
const utils = require('./utils')
|
||||
const createNode = utils.createNode
|
||||
const _times = require('lodash.times')
|
||||
const utils = require('./utils/node')
|
||||
const createNode = utils.createNode
|
||||
|
||||
describe('.peerRouting', () => {
|
||||
let nodeA
|
||||
@ -19,7 +19,8 @@ describe('.peerRouting', () => {
|
||||
let nodeE
|
||||
|
||||
before(function (done) {
|
||||
this.timeout(5000)
|
||||
this.timeout(5 * 1000)
|
||||
|
||||
const tasks = _times(5, () => (cb) => {
|
||||
createNode('/ip4/0.0.0.0/tcp/0', {
|
||||
mdns: false,
|
@ -7,7 +7,7 @@ const expect = chai.expect
|
||||
const parallel = require('async/parallel')
|
||||
const series = require('async/series')
|
||||
const pull = require('pull-stream')
|
||||
const utils = require('./utils')
|
||||
const utils = require('./utils/node')
|
||||
const createNode = utils.createNode
|
||||
const echo = utils.echo
|
||||
|
||||
@ -36,7 +36,7 @@ function teardown (nodeA, nodeB, callback) {
|
||||
|
||||
describe('stream muxing', () => {
|
||||
it('spdy only', function (done) {
|
||||
this.timeout(5000)
|
||||
this.timeout(5 * 1000)
|
||||
|
||||
let nodeA
|
||||
let nodeB
|
424
test/transports.browser.js
Normal file
424
test/transports.browser.js
Normal file
@ -0,0 +1,424 @@
|
||||
/* eslint max-nested-callbacks: ["error", 8] */
|
||||
/* eslint-env mocha */
|
||||
'use strict'
|
||||
|
||||
const chai = require('chai')
|
||||
chai.use(require('dirty-chai'))
|
||||
const expect = chai.expect
|
||||
const PeerInfo = require('peer-info')
|
||||
const PeerId = require('peer-id')
|
||||
const pull = require('pull-stream')
|
||||
const parallel = require('async/parallel')
|
||||
const goodbye = require('pull-goodbye')
|
||||
const serializer = require('pull-serializer')
|
||||
const w = require('webrtcsupport')
|
||||
|
||||
const Node = require('./utils/bundle.browser')
|
||||
const rawPeer = require('./fixtures/test-peer.json')
|
||||
|
||||
describe('transports', () => {
|
||||
describe('websockets', () => {
|
||||
let peerB
|
||||
let nodeA
|
||||
|
||||
before((done) => {
|
||||
const ma = '/ip4/127.0.0.1/tcp/9200/ws/ipfs/' + rawPeer.id
|
||||
|
||||
PeerId.createFromPrivKey(rawPeer.privKey, (err, id) => {
|
||||
if (err) {
|
||||
return done(err)
|
||||
}
|
||||
|
||||
peerB = new PeerInfo(id)
|
||||
peerB.multiaddrs.add(ma)
|
||||
done()
|
||||
})
|
||||
})
|
||||
|
||||
after((done) => nodeA.stop(done))
|
||||
|
||||
it('create libp2pNode', (done) => {
|
||||
PeerInfo.create((err, peerInfo) => {
|
||||
expect(err).to.not.exist()
|
||||
peerInfo.multiaddrs.add('/ip4/0.0.0.0/tcp/0')
|
||||
|
||||
nodeA = new Node(peerInfo)
|
||||
done()
|
||||
})
|
||||
})
|
||||
|
||||
it('create libp2pNode with multiplex only', (done) => {
|
||||
PeerInfo.create((err, peerInfo) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
const b = new Node(peerInfo, null, { muxer: ['multiplex'] })
|
||||
expect(b.modules.connection.muxer).to.eql([require('libp2p-multiplex')])
|
||||
done()
|
||||
})
|
||||
})
|
||||
|
||||
it('start libp2pNode', (done) => {
|
||||
nodeA.start(done)
|
||||
})
|
||||
|
||||
// General connectivity tests
|
||||
|
||||
it('libp2p.dial using Multiaddr nodeA to nodeB', (done) => {
|
||||
nodeA.dial(peerB.multiaddrs.toArray()[0], (err) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
setTimeout(check, 500) // Some time for Identify to finish
|
||||
|
||||
function check () {
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
done()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('libp2p.dial using Multiaddr on Protocol nodeA to nodeB', (done) => {
|
||||
nodeA.dial(peerB.multiaddrs.toArray()[0], '/echo/1.0.0', (err, conn) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
|
||||
pull(
|
||||
pull.values([Buffer.from('hey')]),
|
||||
conn,
|
||||
pull.collect((err, data) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(data).to.eql([Buffer.from('hey')])
|
||||
done()
|
||||
})
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
it('libp2p.hangUp using Multiaddr nodeA to nodeB', (done) => {
|
||||
nodeA.hangUp(peerB.multiaddrs.toArray()[0], (err) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeA.swarm.muxedConns)).to.have.length(0)
|
||||
done()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('libp2p.dial using PeerInfo nodeA to nodeB', (done) => {
|
||||
nodeA.dial(peerB, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
setTimeout(check, 500) // Some time for Identify to finish
|
||||
|
||||
function check () {
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
done()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('libp2p.dial using PeerInfo on Protocol nodeA to nodeB', (done) => {
|
||||
nodeA.dial(peerB, '/echo/1.0.0', (err, conn) => {
|
||||
expect(err).to.not.exist()
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(err).to.not.exist()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
|
||||
pull(
|
||||
pull.values([Buffer.from('hey')]),
|
||||
conn,
|
||||
pull.collect((err, data) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(data).to.eql([Buffer.from('hey')])
|
||||
done()
|
||||
})
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
it('libp2p.hangUp using PeerInfo nodeA to nodeB', (done) => {
|
||||
nodeA.hangUp(peerB, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(err).to.not.exist()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeA.swarm.muxedConns)).to.have.length(0)
|
||||
done()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
describe('stress', () => {
|
||||
it('one big write', (done) => {
|
||||
nodeA.dial(peerB, '/echo/1.0.0', (err, conn) => {
|
||||
expect(err).to.not.exist()
|
||||
const rawMessage = Buffer.alloc(100000)
|
||||
rawMessage.fill('a')
|
||||
|
||||
const s = serializer(goodbye({
|
||||
source: pull.values([rawMessage]),
|
||||
sink: pull.collect((err, results) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(results).to.have.length(1)
|
||||
expect(Buffer.from(results[0])).to.have.length(rawMessage.length)
|
||||
done()
|
||||
})
|
||||
}))
|
||||
pull(s, conn, s)
|
||||
})
|
||||
})
|
||||
|
||||
it('many writes', (done) => {
|
||||
nodeA.dial(peerB, '/echo/1.0.0', (err, conn) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
const s = serializer(goodbye({
|
||||
source: pull(
|
||||
pull.infinite(),
|
||||
pull.take(1000),
|
||||
pull.map((val) => Buffer.from(val.toString()))
|
||||
),
|
||||
sink: pull.collect((err, result) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(result).to.have.length(1000)
|
||||
done()
|
||||
})
|
||||
}))
|
||||
|
||||
pull(s, conn, s)
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('webrtc-star', () => {
|
||||
if (!w.support) { return console.log('NO WEBRTC SUPPORT') }
|
||||
|
||||
let peer1
|
||||
let peer2
|
||||
let node1
|
||||
let node2
|
||||
|
||||
it('create two peerInfo with webrtc-star addrs', (done) => {
|
||||
parallel([
|
||||
(cb) => PeerId.create({ bits: 1024 }, cb),
|
||||
(cb) => PeerId.create({ bits: 1024 }, cb)
|
||||
], (err, ids) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
peer1 = new PeerInfo(ids[0])
|
||||
const ma1 = '/ip4/127.0.0.1/tcp/15555/ws/p2p-webrtc-star/ipfs/' + ids[0].toB58String()
|
||||
peer1.multiaddrs.add(ma1)
|
||||
|
||||
peer2 = new PeerInfo(ids[1])
|
||||
const ma2 = '/ip4/127.0.0.1/tcp/15555/ws/p2p-webrtc-star/ipfs/' + ids[1].toB58String()
|
||||
peer2.multiaddrs.add(ma2)
|
||||
|
||||
done()
|
||||
})
|
||||
})
|
||||
|
||||
it('create two libp2p nodes with those peers', (done) => {
|
||||
node1 = new Node(peer1, null, { webRTCStar: true })
|
||||
node2 = new Node(peer2, null, { webRTCStar: true })
|
||||
done()
|
||||
})
|
||||
|
||||
it('listen on the two libp2p nodes', (done) => {
|
||||
parallel([
|
||||
(cb) => node1.start(cb),
|
||||
(cb) => node2.start(cb)
|
||||
], done)
|
||||
})
|
||||
|
||||
it('handle a protocol on the first node', () => {
|
||||
node2.handle('/echo/1.0.0', (protocol, conn) => pull(conn, conn))
|
||||
})
|
||||
|
||||
it('dial from the second node to the first node', (done) => {
|
||||
node1.dial(peer2, '/echo/1.0.0', (err, conn) => {
|
||||
expect(err).to.not.exist()
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
const text = 'hello'
|
||||
const peers1 = node1.peerBook.getAll()
|
||||
expect(Object.keys(peers1)).to.have.length(1)
|
||||
|
||||
const peers2 = node2.peerBook.getAll()
|
||||
expect(Object.keys(peers2)).to.have.length(1)
|
||||
|
||||
pull(
|
||||
pull.values([Buffer.from(text)]),
|
||||
conn,
|
||||
pull.collect((err, data) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(data[0].toString()).to.equal(text)
|
||||
done()
|
||||
})
|
||||
)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('node1 hangUp node2', (done) => {
|
||||
node1.hangUp(peer2, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
const peers = node1.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(node1.swarm.muxedConns)).to.have.length(0)
|
||||
done()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('create a third node and check that discovery works', (done) => {
|
||||
let counter = 0
|
||||
|
||||
function check () {
|
||||
if (++counter === 3) {
|
||||
expect(Object.keys(node1.swarm.muxedConns).length).to.equal(1)
|
||||
expect(Object.keys(node2.swarm.muxedConns).length).to.equal(1)
|
||||
done()
|
||||
}
|
||||
}
|
||||
|
||||
PeerId.create((err, id3) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
const peer3 = new PeerInfo(id3)
|
||||
const ma3 = '/ip4/127.0.0.1/tcp/15555/ws/p2p-webrtc-star/ipfs/' + id3.toB58String()
|
||||
peer3.multiaddrs.add(ma3)
|
||||
|
||||
node1.on('peer:discovery', (peerInfo) => node1.dial(peerInfo, check))
|
||||
node2.on('peer:discovery', (peerInfo) => node2.dial(peerInfo, check))
|
||||
|
||||
const node3 = new Node(peer3, null, { webRTCStar: true })
|
||||
node3.start(check)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('websocket-star', () => {
|
||||
let peer1
|
||||
let peer2
|
||||
let node1
|
||||
let node2
|
||||
|
||||
it('create two peerInfo with websocket-star addrs', (done) => {
|
||||
parallel([
|
||||
(cb) => PeerId.create({ bits: 1024 }, cb),
|
||||
(cb) => PeerId.create({ bits: 1024 }, cb)
|
||||
], (err, ids) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
peer1 = new PeerInfo(ids[0])
|
||||
const ma1 = '/ip4/127.0.0.1/tcp/14444/ws/p2p-websocket-star/'
|
||||
peer1.multiaddrs.add(ma1)
|
||||
|
||||
peer2 = new PeerInfo(ids[1])
|
||||
const ma2 = '/ip4/127.0.0.1/tcp/14444/ws/p2p-websocket-star/'
|
||||
peer2.multiaddrs.add(ma2)
|
||||
|
||||
done()
|
||||
})
|
||||
})
|
||||
|
||||
it('create two libp2p nodes with those peers', (done) => {
|
||||
node1 = new Node(peer1, null, { wsStar: true })
|
||||
node2 = new Node(peer2, null, { wsStar: true })
|
||||
done()
|
||||
})
|
||||
|
||||
it('listen on the two libp2p nodes', (done) => {
|
||||
parallel([
|
||||
(cb) => node1.start(cb),
|
||||
(cb) => node2.start(cb)
|
||||
], done)
|
||||
})
|
||||
|
||||
it('handle a protocol on the first node', () => {
|
||||
node2.handle('/echo/1.0.0', (protocol, conn) => pull(conn, conn))
|
||||
})
|
||||
|
||||
it('dial from the second node to the first node', (done) => {
|
||||
node1.dial(peer2, '/echo/1.0.0', (err, conn) => {
|
||||
expect(err).to.not.exist()
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
const text = 'hello'
|
||||
const peers1 = node1.peerBook.getAll()
|
||||
expect(Object.keys(peers1)).to.have.length(1)
|
||||
|
||||
const peers2 = node2.peerBook.getAll()
|
||||
expect(Object.keys(peers2)).to.have.length(1)
|
||||
|
||||
pull(
|
||||
pull.values([Buffer.from(text)]),
|
||||
conn,
|
||||
pull.collect((err, data) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(data[0].toString()).to.equal(text)
|
||||
done()
|
||||
})
|
||||
)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('node1 hangUp node2', (done) => {
|
||||
node1.hangUp(peer2, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
const peers = node1.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(node1.swarm.muxedConns)).to.have.length(0)
|
||||
done()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('create a third node and check that discovery works', (done) => {
|
||||
let counter = 0
|
||||
|
||||
function check () {
|
||||
if (++counter === 3) {
|
||||
expect(Object.keys(node1.swarm.muxedConns).length).to.equal(1)
|
||||
expect(Object.keys(node2.swarm.muxedConns).length).to.equal(1)
|
||||
done()
|
||||
}
|
||||
}
|
||||
|
||||
PeerId.create((err, id3) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
const peer3 = new PeerInfo(id3)
|
||||
const ma3 = '/ip4/127.0.0.1/tcp/14444/ws/p2p-websocket-star/ipfs/' + id3.toB58String()
|
||||
peer3.multiaddrs.add(ma3)
|
||||
|
||||
node1.on('peer:discovery', (peerInfo) => node1.dial(peerInfo, check))
|
||||
node2.on('peer:discovery', (peerInfo) => node2.dial(peerInfo, check))
|
||||
|
||||
const node3 = new Node(peer3, null, { wsStar: true })
|
||||
node3.start(check)
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
678
test/transports.node.js
Normal file
678
test/transports.node.js
Normal file
@ -0,0 +1,678 @@
|
||||
/* eslint-env mocha */
|
||||
'use strict'
|
||||
|
||||
const chai = require('chai')
|
||||
chai.use(require('dirty-chai'))
|
||||
const expect = chai.expect
|
||||
const parallel = require('async/parallel')
|
||||
const series = require('async/series')
|
||||
const pull = require('pull-stream')
|
||||
const utils = require('./utils/node.js')
|
||||
const signalling = require('libp2p-webrtc-star/src/sig-server')
|
||||
const rendezvous = require('libp2p-websocket-star-rendezvous')
|
||||
const WSStar = require('libp2p-websocket-star')
|
||||
const WRTCStar = require('libp2p-webrtc-star')
|
||||
const wrtc = require('wrtc')
|
||||
|
||||
const createNode = utils.createNode
|
||||
const echo = utils.echo
|
||||
|
||||
describe('transports', () => {
|
||||
describe('TCP only', () => {
|
||||
let nodeA
|
||||
let nodeB
|
||||
|
||||
before((done) => {
|
||||
parallel([
|
||||
(cb) => createNode('/ip4/0.0.0.0/tcp/0', (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
nodeA = node
|
||||
node.handle('/echo/1.0.0', echo)
|
||||
node.start(cb)
|
||||
}),
|
||||
(cb) => createNode('/ip4/0.0.0.0/tcp/0', (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
nodeB = node
|
||||
node.handle('/echo/1.0.0', echo)
|
||||
node.start(cb)
|
||||
})
|
||||
], done)
|
||||
})
|
||||
|
||||
after((done) => {
|
||||
parallel([
|
||||
(cb) => nodeA.stop(cb),
|
||||
(cb) => nodeB.stop(cb)
|
||||
], done)
|
||||
})
|
||||
|
||||
it('nodeA.dial nodeB using PeerInfo without proto (warmup)', (done) => {
|
||||
nodeA.dial(nodeB.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
// Some time for Identify to finish
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
parallel([
|
||||
(cb) => {
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(err).to.not.exist()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeB.peerBook.getAll()
|
||||
expect(err).to.not.exist()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
cb()
|
||||
}
|
||||
], done)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeA.dial nodeB using PeerInfo', (done) => {
|
||||
nodeA.dial(nodeB.peerInfo, '/echo/1.0.0', (err, conn) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
pull(
|
||||
pull.values([Buffer.from('hey')]),
|
||||
conn,
|
||||
pull.collect((err, data) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(data).to.be.eql([Buffer.from('hey')])
|
||||
done()
|
||||
})
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeA.hangUp nodeB using PeerInfo (first)', (done) => {
|
||||
nodeA.hangUp(nodeB.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
parallel([
|
||||
(cb) => {
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeA.swarm.muxedConns)).to.have.length(0)
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeB.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
|
||||
expect(Object.keys(nodeB.swarm.muxedConns)).to.have.length(0)
|
||||
cb()
|
||||
}
|
||||
], done)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeA.dial nodeB using multiaddr', (done) => {
|
||||
nodeA.dial(nodeB.peerInfo.multiaddrs.toArray()[0], '/echo/1.0.0', (err, conn) => {
|
||||
// Some time for Identify to finish
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
expect(err).to.not.exist()
|
||||
series([
|
||||
(cb) => {
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
|
||||
expect(Object.keys(nodeA.swarm.muxedConns)).to.have.length(1)
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeB.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
|
||||
expect(Object.keys(nodeA.swarm.muxedConns)).to.have.length(1)
|
||||
cb()
|
||||
}
|
||||
], () => {
|
||||
pull(
|
||||
pull.values([Buffer.from('hey')]),
|
||||
conn,
|
||||
pull.collect((err, data) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(data).to.be.eql([Buffer.from('hey')])
|
||||
done()
|
||||
})
|
||||
)
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeA.hangUp nodeB using multiaddr (second)', (done) => {
|
||||
nodeA.hangUp(nodeB.peerInfo.multiaddrs.toArray()[0], (err) => {
|
||||
expect(err).to.not.exist()
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
parallel([
|
||||
(cb) => {
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
|
||||
expect(Object.keys(nodeA.swarm.muxedConns)).to.have.length(0)
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeB.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
|
||||
expect(Object.keys(nodeB.swarm.muxedConns)).to.have.length(0)
|
||||
cb()
|
||||
}
|
||||
], done)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeA.dial nodeB using PeerId', (done) => {
|
||||
nodeA.dial(nodeB.peerInfo.id, '/echo/1.0.0', (err, conn) => {
|
||||
// Some time for Identify to finish
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
expect(err).to.not.exist()
|
||||
series([
|
||||
(cb) => {
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeA.swarm.muxedConns)).to.have.length(1)
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeB.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeA.swarm.muxedConns)).to.have.length(1)
|
||||
cb()
|
||||
}
|
||||
], () => {
|
||||
pull(
|
||||
pull.values([Buffer.from('hey')]),
|
||||
conn,
|
||||
pull.collect((err, data) => {
|
||||
expect(err).to.not.exist()
|
||||
expect(data).to.eql([Buffer.from('hey')])
|
||||
done()
|
||||
})
|
||||
)
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeA.hangUp nodeB using PeerId (third)', (done) => {
|
||||
nodeA.hangUp(nodeB.peerInfo.multiaddrs.toArray()[0], (err) => {
|
||||
expect(err).to.not.exist()
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
parallel([
|
||||
(cb) => {
|
||||
const peers = nodeA.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeA.swarm.muxedConns)).to.have.length(0)
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeB.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeB.swarm.muxedConns)).to.have.length(0)
|
||||
cb()
|
||||
}
|
||||
], done)
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('TCP + WebSockets', () => {
|
||||
let nodeTCP
|
||||
let nodeTCPnWS
|
||||
let nodeWS
|
||||
|
||||
before((done) => {
|
||||
parallel([
|
||||
(cb) => createNode([
|
||||
'/ip4/0.0.0.0/tcp/0'
|
||||
], (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
nodeTCP = node
|
||||
node.handle('/echo/1.0.0', echo)
|
||||
node.start(cb)
|
||||
}),
|
||||
(cb) => createNode([
|
||||
'/ip4/0.0.0.0/tcp/0',
|
||||
'/ip4/127.0.0.1/tcp/25011/ws'
|
||||
], (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
nodeTCPnWS = node
|
||||
node.handle('/echo/1.0.0', echo)
|
||||
node.start(cb)
|
||||
}),
|
||||
(cb) => createNode([
|
||||
'/ip4/127.0.0.1/tcp/25022/ws'
|
||||
], (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
nodeWS = node
|
||||
node.handle('/echo/1.0.0', echo)
|
||||
node.start(cb)
|
||||
})
|
||||
], done)
|
||||
})
|
||||
|
||||
after((done) => {
|
||||
parallel([
|
||||
(cb) => nodeTCP.stop(cb),
|
||||
(cb) => nodeTCPnWS.stop(cb),
|
||||
(cb) => nodeWS.stop(cb)
|
||||
], done)
|
||||
})
|
||||
|
||||
it('nodeTCP.dial nodeTCPnWS using PeerInfo', (done) => {
|
||||
nodeTCP.dial(nodeTCPnWS.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
// Some time for Identify to finish
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
parallel([
|
||||
(cb) => {
|
||||
const peers = nodeTCP.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeTCP.swarm.muxedConns)).to.have.length(1)
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeTCPnWS.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeTCPnWS.swarm.muxedConns)).to.have.length(1)
|
||||
cb()
|
||||
}
|
||||
], done)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeTCP.hangUp nodeTCPnWS using PeerInfo', (done) => {
|
||||
nodeTCP.hangUp(nodeTCPnWS.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
parallel([
|
||||
(cb) => {
|
||||
const peers = nodeTCP.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeTCP.swarm.muxedConns)).to.have.length(0)
|
||||
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeTCPnWS.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeTCPnWS.swarm.muxedConns)).to.have.length(0)
|
||||
cb()
|
||||
}
|
||||
], done)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeTCPnWS.dial nodeWS using PeerInfo', (done) => {
|
||||
nodeTCPnWS.dial(nodeWS.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
|
||||
// Some time for Identify to finish
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
parallel([
|
||||
(cb) => {
|
||||
const peers = nodeTCPnWS.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(2)
|
||||
expect(Object.keys(nodeTCPnWS.swarm.muxedConns)).to.have.length(1)
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeWS.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeWS.swarm.muxedConns)).to.have.length(1)
|
||||
cb()
|
||||
}
|
||||
], done)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeTCPnWS.hangUp nodeWS using PeerInfo', (done) => {
|
||||
nodeTCPnWS.hangUp(nodeWS.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
setTimeout(check, 500)
|
||||
|
||||
function check () {
|
||||
parallel([
|
||||
(cb) => {
|
||||
const peers = nodeTCPnWS.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(2)
|
||||
expect(Object.keys(nodeTCPnWS.swarm.muxedConns)).to.have.length(0)
|
||||
|
||||
cb()
|
||||
},
|
||||
(cb) => {
|
||||
const peers = nodeWS.peerBook.getAll()
|
||||
expect(Object.keys(peers)).to.have.length(1)
|
||||
expect(Object.keys(nodeWS.swarm.muxedConns)).to.have.length(0)
|
||||
cb()
|
||||
}
|
||||
], done)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
// Until https://github.com/libp2p/js-libp2p/issues/46 is resolved
|
||||
// Everynode will be able to dial in WebSockets
|
||||
it.skip('nodeTCP.dial nodeWS using PeerInfo is unsuccesful', (done) => {
|
||||
nodeTCP.dial(nodeWS.peerInfo, (err) => {
|
||||
expect(err).to.exist()
|
||||
done()
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('TCP + WebSockets + WebRTCStar', () => {
|
||||
let nodeAll
|
||||
let nodeTCP
|
||||
let nodeWS
|
||||
let nodeWStar
|
||||
|
||||
let ss
|
||||
|
||||
before(function (done) {
|
||||
this.timeout(5 * 1000)
|
||||
|
||||
parallel([
|
||||
(cb) => {
|
||||
signalling.start({ port: 24642 }, (err, server) => {
|
||||
expect(err).to.not.exist()
|
||||
ss = server
|
||||
cb()
|
||||
})
|
||||
},
|
||||
(cb) => {
|
||||
const wstar = new WRTCStar({wrtc: wrtc})
|
||||
createNode([
|
||||
'/ip4/0.0.0.0/tcp/0',
|
||||
'/ip4/127.0.0.1/tcp/25011/ws',
|
||||
'/ip4/127.0.0.1/tcp/24642/ws/p2p-webrtc-star'
|
||||
], {
|
||||
modules: {
|
||||
transport: [wstar],
|
||||
discovery: [wstar.discovery]
|
||||
}
|
||||
}, (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
nodeAll = node
|
||||
node.handle('/echo/1.0.0', echo)
|
||||
node.start(cb)
|
||||
})
|
||||
},
|
||||
(cb) => createNode([
|
||||
'/ip4/0.0.0.0/tcp/0'
|
||||
], (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
nodeTCP = node
|
||||
node.handle('/echo/1.0.0', echo)
|
||||
node.start(cb)
|
||||
}),
|
||||
(cb) => createNode([
|
||||
'/ip4/127.0.0.1/tcp/25022/ws'
|
||||
], (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
nodeWS = node
|
||||
node.handle('/echo/1.0.0', echo)
|
||||
node.start(cb)
|
||||
}),
|
||||
|
||||
(cb) => {
|
||||
const wstar = new WRTCStar({wrtc: wrtc})
|
||||
|
||||
createNode([
|
||||
'/ip4/127.0.0.1/tcp/24642/ws/p2p-webrtc-star'
|
||||
], {
|
||||
modules: {
|
||||
transport: [wstar],
|
||||
discovery: [wstar.discovery]
|
||||
}
|
||||
}, (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
nodeWStar = node
|
||||
node.handle('/echo/1.0.0', echo)
|
||||
node.start(cb)
|
||||
})
|
||||
}
|
||||
], done)
|
||||
})
|
||||
|
||||
after((done) => {
|
||||
parallel([
|
||||
(cb) => nodeAll.stop(cb),
|
||||
(cb) => nodeTCP.stop(cb),
|
||||
(cb) => nodeWS.stop(cb),
|
||||
(cb) => nodeWStar.stop(cb),
|
||||
(cb) => ss.stop(cb)
|
||||
], done)
|
||||
})
|
||||
|
||||
function check (otherNode, muxed, peers, callback) {
|
||||
let i = 1;
|
||||
[nodeAll, otherNode].forEach((node) => {
|
||||
expect(Object.keys(node.peerBook.getAll())).to.have.length(i-- ? peers : 1)
|
||||
expect(Object.keys(node.swarm.muxedConns)).to.have.length(muxed)
|
||||
})
|
||||
callback()
|
||||
}
|
||||
|
||||
it('nodeAll.dial nodeTCP using PeerInfo', (done) => {
|
||||
nodeAll.dial(nodeTCP.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
// Some time for Identify to finish
|
||||
setTimeout(() => check(nodeTCP, 1, 1, done), 500)
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeAll.hangUp nodeTCP using PeerInfo', (done) => {
|
||||
nodeAll.hangUp(nodeTCP.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
// Some time for Identify to finish
|
||||
setTimeout(() => check(nodeTCP, 0, 1, done), 500)
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeAll.dial nodeWS using PeerInfo', (done) => {
|
||||
nodeAll.dial(nodeWS.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
// Some time for Identify to finish
|
||||
setTimeout(() => check(nodeWS, 1, 2, done), 500)
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeAll.hangUp nodeWS using PeerInfo', (done) => {
|
||||
nodeAll.hangUp(nodeWS.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
// Some time for Identify to finish
|
||||
setTimeout(() => check(nodeWS, 0, 2, done), 500)
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeAll.dial nodeWStar using PeerInfo', function (done) {
|
||||
this.timeout(10 * 1000)
|
||||
|
||||
nodeAll.dial(nodeWStar.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
// Some time for Identify to finish
|
||||
setTimeout(() => check(nodeWStar, 1, 3, done), 500)
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeAll.hangUp nodeWStar using PeerInfo', (done) => {
|
||||
nodeAll.hangUp(nodeWStar.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
setTimeout(() => check(nodeWStar, 0, 3, done), 500)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('TCP + WebSockets + WebSocketStar', () => {
|
||||
let nodeAll
|
||||
let nodeTCP
|
||||
let nodeWS
|
||||
let nodeWStar
|
||||
|
||||
let ss
|
||||
|
||||
before((done) => {
|
||||
parallel([
|
||||
(cb) => {
|
||||
rendezvous.start({ port: 24642 }, (err, server) => {
|
||||
expect(err).to.not.exist()
|
||||
ss = server
|
||||
cb()
|
||||
})
|
||||
},
|
||||
(cb) => {
|
||||
const wstar = new WSStar()
|
||||
createNode([
|
||||
'/ip4/0.0.0.0/tcp/0',
|
||||
'/ip4/127.0.0.1/tcp/25011/ws',
|
||||
'/ip4/127.0.0.1/tcp/24642/ws/p2p-websocket-star'
|
||||
], {
|
||||
modules: {
|
||||
transport: [wstar],
|
||||
discovery: [wstar.discovery]
|
||||
}
|
||||
}, (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
nodeAll = node
|
||||
wstar.lazySetId(node.peerInfo.id)
|
||||
node.handle('/echo/1.0.0', echo)
|
||||
node.start(cb)
|
||||
})
|
||||
},
|
||||
(cb) => createNode([
|
||||
'/ip4/0.0.0.0/tcp/0'
|
||||
], (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
nodeTCP = node
|
||||
node.handle('/echo/1.0.0', echo)
|
||||
node.start(cb)
|
||||
}),
|
||||
(cb) => createNode([
|
||||
'/ip4/127.0.0.1/tcp/25022/ws'
|
||||
], (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
nodeWS = node
|
||||
node.handle('/echo/1.0.0', echo)
|
||||
node.start(cb)
|
||||
}),
|
||||
|
||||
(cb) => {
|
||||
const wstar = new WSStar({})
|
||||
|
||||
createNode([
|
||||
'/ip4/127.0.0.1/tcp/24642/ws/p2p-websocket-star'
|
||||
], {
|
||||
modules: {
|
||||
transport: [wstar],
|
||||
discovery: [wstar.discovery]
|
||||
}
|
||||
}, (err, node) => {
|
||||
expect(err).to.not.exist()
|
||||
nodeWStar = node
|
||||
wstar.lazySetId(node.peerInfo.id)
|
||||
node.handle('/echo/1.0.0', echo)
|
||||
node.start(cb)
|
||||
})
|
||||
}
|
||||
], done)
|
||||
})
|
||||
|
||||
after((done) => {
|
||||
parallel([
|
||||
(cb) => nodeAll.stop(cb),
|
||||
(cb) => nodeTCP.stop(cb),
|
||||
(cb) => nodeWS.stop(cb),
|
||||
(cb) => nodeWStar.stop(cb),
|
||||
(cb) => ss.stop(cb)
|
||||
], done)
|
||||
})
|
||||
|
||||
function check (otherNode, muxed, peers, done) {
|
||||
let i = 1;
|
||||
[nodeAll, otherNode].forEach((node) => {
|
||||
expect(Object.keys(node.peerBook.getAll())).to.have.length(i-- ? peers : 1)
|
||||
expect(Object.keys(node.swarm.muxedConns)).to.have.length(muxed)
|
||||
})
|
||||
done()
|
||||
}
|
||||
|
||||
it('nodeAll.dial nodeTCP using PeerInfo', (done) => {
|
||||
nodeAll.dial(nodeTCP.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
// Some time for Identify to finish
|
||||
setTimeout(() => check(nodeTCP, 1, 1, done), 500)
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeAll.hangUp nodeTCP using PeerInfo', (done) => {
|
||||
nodeAll.hangUp(nodeTCP.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
// Some time for Identify to finish
|
||||
setTimeout(() => check(nodeTCP, 0, 1, done), 500)
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeAll.dial nodeWS using PeerInfo', (done) => {
|
||||
nodeAll.dial(nodeWS.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
// Some time for Identify to finish
|
||||
setTimeout(() => check(nodeWS, 1, 2, done), 500)
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeAll.hangUp nodeWS using PeerInfo', (done) => {
|
||||
nodeAll.hangUp(nodeWS.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
// Some time for Identify to finish
|
||||
setTimeout(() => check(nodeWS, 0, 2, done), 500)
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeAll.dial nodeWStar using PeerInfo', (done) => {
|
||||
nodeAll.dial(nodeWStar.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
// Some time for Identify to finish
|
||||
setTimeout(() => check(nodeWStar, 1, 3, done), 500)
|
||||
})
|
||||
})
|
||||
|
||||
it('nodeAll.hangUp nodeWStar using PeerInfo', (done) => {
|
||||
nodeAll.hangUp(nodeWStar.peerInfo, (err) => {
|
||||
expect(err).to.not.exist()
|
||||
// Some time for Identify to finish
|
||||
setTimeout(() => check(nodeWStar, 0, 3, done), 500)
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
@ -7,9 +7,8 @@ const expect = chai.expect
|
||||
const multiaddr = require('multiaddr')
|
||||
const spawn = require('child_process').spawn
|
||||
const path = require('path')
|
||||
// const map = require('async/map')
|
||||
const pull = require('pull-stream')
|
||||
const utils = require('./utils')
|
||||
const utils = require('./utils/node')
|
||||
const createNode = utils.createNode
|
||||
const echo = utils.echo
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
const WS = require('libp2p-websockets')
|
||||
const WebRTCStar = require('libp2p-webrtc-star')
|
||||
const WebSocketStar = require('libp2p-websocket-star')
|
||||
const spdy = require('libp2p-spdy')
|
||||
const multiplex = require('libp2p-multiplex')
|
||||
const secio = require('libp2p-secio')
|
||||
@ -36,11 +37,13 @@ class Node extends libp2p {
|
||||
constructor (peerInfo, peerBook, options) {
|
||||
options = options || {}
|
||||
const webRTCStar = new WebRTCStar()
|
||||
const wsStar = new WebSocketStar()
|
||||
|
||||
const modules = {
|
||||
transport: [
|
||||
new WS(),
|
||||
webRTCStar
|
||||
webRTCStar,
|
||||
wsStar
|
||||
],
|
||||
connection: {
|
||||
muxer: getMuxers(options.muxer),
|
||||
@ -55,6 +58,10 @@ class Node extends libp2p {
|
||||
modules.discovery.push(webRTCStar.discovery)
|
||||
}
|
||||
|
||||
if (options.wsStar) {
|
||||
modules.discovery.push(wsStar.discovery)
|
||||
}
|
||||
|
||||
if (options.bootstrap) {
|
||||
const r = new Railing(options.bootstrap)
|
||||
modules.discovery.push(r)
|
@ -3,7 +3,7 @@
|
||||
|
||||
const chai = require('chai')
|
||||
chai.use(require('dirty-chai'))
|
||||
const Node = require('./nodejs-bundle')
|
||||
const Node = require('./bundle.node')
|
||||
const PeerInfo = require('peer-info')
|
||||
const PeerId = require('peer-id')
|
||||
const waterfall = require('async/waterfall')
|
Loading…
x
Reference in New Issue
Block a user