mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-04-26 02:52:16 +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'
|
'use strict'
|
||||||
|
|
||||||
const Node = require('./test/nodejs-bundle/nodejs-bundle.js')
|
|
||||||
const PeerInfo = require('peer-info')
|
const PeerInfo = require('peer-info')
|
||||||
const PeerId = require('peer-id')
|
const PeerId = require('peer-id')
|
||||||
const pull = require('pull-stream')
|
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')
|
const sigServer = require('libp2p-webrtc-star/src/sig-server')
|
||||||
let server
|
const WebSocketStarRendezvous = require('libp2p-websocket-star-rendezvous')
|
||||||
|
|
||||||
|
let wrtcRendezvous
|
||||||
|
let wsRendezvous
|
||||||
let node
|
let node
|
||||||
const rawPeer = require('./test/browser-bundle/peer.json')
|
|
||||||
|
|
||||||
const before = (done) => {
|
const before = (done) => {
|
||||||
let count = 0
|
parallel([
|
||||||
const ready = () => ++count === 2 ? done() : null
|
(cb) => {
|
||||||
|
sigServer.start({ port: 15555 }, (err, server) => {
|
||||||
sigServer.start({ port: 15555 }, (err, _server) => {
|
if (err) { return cb(err) }
|
||||||
if (err) {
|
wrtcRendezvous = server
|
||||||
throw err
|
cb()
|
||||||
}
|
|
||||||
server = _server
|
|
||||||
ready()
|
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
(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) => {
|
PeerId.createFromJSON(rawPeer, (err, peerId) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return done(err)
|
return done(err)
|
||||||
@ -33,17 +46,18 @@ const before = (done) => {
|
|||||||
|
|
||||||
node = new Node(peer)
|
node = new Node(peer)
|
||||||
node.handle('/echo/1.0.0', (protocol, conn) => pull(conn, conn))
|
node.handle('/echo/1.0.0', (protocol, conn) => pull(conn, conn))
|
||||||
node.start(() => ready())
|
node.start(cb)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
], done)
|
||||||
|
}
|
||||||
|
|
||||||
const after = (done) => {
|
const after = (done) => {
|
||||||
setTimeout(() => node.stop((err) => {
|
setTimeout(() => parallel(
|
||||||
if (err) {
|
[node, wrtcRendezvous, wsRendezvous].map((s) => {
|
||||||
return done(err)
|
return (cb) => s.stop(cb)
|
||||||
}
|
})
|
||||||
server.stop(done)
|
, done), 2000)
|
||||||
}), 2000)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
@ -52,4 +66,3 @@ module.exports = {
|
|||||||
post: after
|
post: after
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"async": "^2.6.0",
|
"async": "^2.6.0",
|
||||||
"libp2p-ping": "~0.6.0",
|
"libp2p-ping": "~0.6.0",
|
||||||
"libp2p-swarm": "~0.33.1",
|
"libp2p-swarm": "~0.33.2",
|
||||||
"mafmt": "^3.0.2",
|
"mafmt": "^3.0.2",
|
||||||
"multiaddr": "^3.0.1",
|
"multiaddr": "^3.0.1",
|
||||||
"peer-book": "~0.5.1",
|
"peer-book": "~0.5.1",
|
||||||
@ -47,7 +47,7 @@
|
|||||||
"peer-info": "~0.11.1"
|
"peer-info": "~0.11.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"aegir": "^12.1.3",
|
"aegir": "^12.2.0",
|
||||||
"chai": "^4.1.2",
|
"chai": "^4.1.2",
|
||||||
"cids": "~0.5.2",
|
"cids": "~0.5.2",
|
||||||
"dirty-chai": "^2.0.1",
|
"dirty-chai": "^2.0.1",
|
||||||
@ -62,6 +62,8 @@
|
|||||||
"libp2p-tcp": "~0.11.1",
|
"libp2p-tcp": "~0.11.1",
|
||||||
"libp2p-webrtc-star": "~0.13.2",
|
"libp2p-webrtc-star": "~0.13.2",
|
||||||
"libp2p-websockets": "~0.10.4",
|
"libp2p-websockets": "~0.10.4",
|
||||||
|
"libp2p-websocket-star": "~0.5.1",
|
||||||
|
"libp2p-websocket-star-rendezvous": "~0.2.1",
|
||||||
"lodash.times": "^4.3.2",
|
"lodash.times": "^4.3.2",
|
||||||
"pre-commit": "^1.2.2",
|
"pre-commit": "^1.2.2",
|
||||||
"pull-goodbye": "0.0.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'
|
'use strict'
|
||||||
|
|
||||||
const w = require('webrtcsupport')
|
|
||||||
|
|
||||||
require('./base')
|
require('./base')
|
||||||
require('./browser-bundle/websockets-only')
|
require('./transports.browser')
|
||||||
if (w.support) { require('./browser-bundle/webrtc-star-only') }
|
|
||||||
|
@ -5,7 +5,7 @@ const pull = require('pull-stream')
|
|||||||
const waterfall = require('async/waterfall')
|
const waterfall = require('async/waterfall')
|
||||||
const series = require('async/series')
|
const series = require('async/series')
|
||||||
const parallel = require('async/parallel')
|
const parallel = require('async/parallel')
|
||||||
const utils = require('./utils')
|
const utils = require('./utils/node')
|
||||||
const Circuit = require('libp2p-circuit')
|
const Circuit = require('libp2p-circuit')
|
||||||
const multiaddr = require('multiaddr')
|
const multiaddr = require('multiaddr')
|
||||||
|
|
||||||
@ -15,7 +15,7 @@ chai.use(require('dirty-chai'))
|
|||||||
const expect = chai.expect
|
const expect = chai.expect
|
||||||
const sinon = require('sinon')
|
const sinon = require('sinon')
|
||||||
|
|
||||||
describe(`circuit`, function () {
|
describe('circuit relay', function () {
|
||||||
let handlerSpies = []
|
let handlerSpies = []
|
||||||
let relayNode1
|
let relayNode1
|
||||||
let relayNode2
|
let relayNode2
|
||||||
@ -51,8 +51,8 @@ describe(`circuit`, function () {
|
|||||||
waterfall([
|
waterfall([
|
||||||
// set up passive relay
|
// set up passive relay
|
||||||
(cb) => setupNode([
|
(cb) => setupNode([
|
||||||
`/ip4/0.0.0.0/tcp/0/ws`,
|
'/ip4/0.0.0.0/tcp/0/ws',
|
||||||
`/ip4/0.0.0.0/tcp/0`
|
'/ip4/0.0.0.0/tcp/0'
|
||||||
], {
|
], {
|
||||||
relay: {
|
relay: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
@ -67,8 +67,8 @@ describe(`circuit`, function () {
|
|||||||
}),
|
}),
|
||||||
// setup active relay
|
// setup active relay
|
||||||
(cb) => setupNode([
|
(cb) => setupNode([
|
||||||
`/ip4/0.0.0.0/tcp/0/ws`,
|
'/ip4/0.0.0.0/tcp/0/ws',
|
||||||
`/ip4/0.0.0.0/tcp/0`
|
'/ip4/0.0.0.0/tcp/0'
|
||||||
], {
|
], {
|
||||||
relay: {
|
relay: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
@ -83,7 +83,7 @@ describe(`circuit`, function () {
|
|||||||
}),
|
}),
|
||||||
// setup node with WS
|
// setup node with WS
|
||||||
(cb) => setupNode([
|
(cb) => setupNode([
|
||||||
`/ip4/0.0.0.0/tcp/0/ws`
|
'/ip4/0.0.0.0/tcp/0/ws'
|
||||||
], {
|
], {
|
||||||
relay: {
|
relay: {
|
||||||
enabled: true
|
enabled: true
|
||||||
@ -94,7 +94,7 @@ describe(`circuit`, function () {
|
|||||||
}),
|
}),
|
||||||
// setup node with WS
|
// setup node with WS
|
||||||
(cb) => setupNode([
|
(cb) => setupNode([
|
||||||
`/ip4/0.0.0.0/tcp/0/ws`
|
'/ip4/0.0.0.0/tcp/0/ws'
|
||||||
], {
|
], {
|
||||||
relay: {
|
relay: {
|
||||||
enabled: true
|
enabled: true
|
||||||
@ -105,7 +105,7 @@ describe(`circuit`, function () {
|
|||||||
}),
|
}),
|
||||||
// set up node with TCP and listening on relay1
|
// set up node with TCP and listening on relay1
|
||||||
(cb) => setupNode([
|
(cb) => setupNode([
|
||||||
`/ip4/0.0.0.0/tcp/0`,
|
'/ip4/0.0.0.0/tcp/0',
|
||||||
`/ipfs/${relayNode1.peerInfo.id.toB58String()}/p2p-circuit`
|
`/ipfs/${relayNode1.peerInfo.id.toB58String()}/p2p-circuit`
|
||||||
], {
|
], {
|
||||||
relay: {
|
relay: {
|
||||||
@ -117,7 +117,7 @@ describe(`circuit`, function () {
|
|||||||
}),
|
}),
|
||||||
// set up node with TCP and listening on relay2 over TCP transport
|
// set up node with TCP and listening on relay2 over TCP transport
|
||||||
(cb) => setupNode([
|
(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`
|
`/ip4/0.0.0.0/tcp/0/ipfs/${relayNode2.peerInfo.id.toB58String()}/p2p-circuit`
|
||||||
], {
|
], {
|
||||||
relay: {
|
relay: {
|
||||||
@ -150,9 +150,10 @@ describe(`circuit`, function () {
|
|||||||
], done)
|
], done)
|
||||||
})
|
})
|
||||||
|
|
||||||
describe(`any relay`, function () {
|
describe('any relay', function () {
|
||||||
this.timeout(20000)
|
this.timeout(20 * 1000)
|
||||||
it('should dial from WS1 to TCP1 over any R', function (done) {
|
|
||||||
|
it('should dial from WS1 to TCP1 over any R', (done) => {
|
||||||
nodeWS1.dial(nodeTCP1.peerInfo, '/echo/1.0.0', (err, conn) => {
|
nodeWS1.dial(nodeTCP1.peerInfo, '/echo/1.0.0', (err, conn) => {
|
||||||
expect(err).to.not.exist()
|
expect(err).to.not.exist()
|
||||||
expect(conn).to.exist()
|
expect(conn).to.exist()
|
||||||
@ -160,8 +161,8 @@ describe(`circuit`, function () {
|
|||||||
pull(
|
pull(
|
||||||
pull.values(['hello']),
|
pull.values(['hello']),
|
||||||
conn,
|
conn,
|
||||||
pull.collect((e, result) => {
|
pull.collect((err, result) => {
|
||||||
expect(e).to.not.exist()
|
expect(err).to.not.exist()
|
||||||
expect(result[0].toString()).to.equal('hello')
|
expect(result[0].toString()).to.equal('hello')
|
||||||
done()
|
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) => {
|
nodeWS2.dial(nodeTCP2.peerInfo, '/echo/1.0.0', (err, conn) => {
|
||||||
expect(err).to.exist()
|
expect(err).to.exist()
|
||||||
expect(conn).to.not.exist()
|
expect(conn).to.not.exist()
|
||||||
@ -178,9 +179,10 @@ describe(`circuit`, function () {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe(`explicit relay`, function () {
|
describe('explicit relay', function () {
|
||||||
this.timeout(20000)
|
this.timeout(20 * 1000)
|
||||||
it('should dial from WS1 to TCP1 over R1', function (done) {
|
|
||||||
|
it('should dial from WS1 to TCP1 over R1', (done) => {
|
||||||
nodeWS1.dial(nodeTCP1.peerInfo, '/echo/1.0.0', (err, conn) => {
|
nodeWS1.dial(nodeTCP1.peerInfo, '/echo/1.0.0', (err, conn) => {
|
||||||
expect(err).to.not.exist()
|
expect(err).to.not.exist()
|
||||||
expect(conn).to.exist()
|
expect(conn).to.exist()
|
||||||
@ -188,8 +190,8 @@ describe(`circuit`, function () {
|
|||||||
pull(
|
pull(
|
||||||
pull.values(['hello']),
|
pull.values(['hello']),
|
||||||
conn,
|
conn,
|
||||||
pull.collect((e, result) => {
|
pull.collect((err, result) => {
|
||||||
expect(e).to.not.exist()
|
expect(err).to.not.exist()
|
||||||
expect(result[0].toString()).to.equal('hello')
|
expect(result[0].toString()).to.equal('hello')
|
||||||
|
|
||||||
const addr = multiaddr(handlerSpies[0].args[2][0].dstPeer.addrs[0]).toString()
|
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) => {
|
nodeWS1.dial(nodeTCP2.peerInfo, '/echo/1.0.0', (err, conn) => {
|
||||||
expect(err).to.not.exist()
|
expect(err).to.not.exist()
|
||||||
expect(conn).to.exist()
|
expect(conn).to.exist()
|
||||||
@ -208,8 +210,8 @@ describe(`circuit`, function () {
|
|||||||
pull(
|
pull(
|
||||||
pull.values(['hello']),
|
pull.values(['hello']),
|
||||||
conn,
|
conn,
|
||||||
pull.collect((e, result) => {
|
pull.collect((err, result) => {
|
||||||
expect(e).to.not.exist()
|
expect(err).to.not.exist()
|
||||||
expect(result[0].toString()).to.equal('hello')
|
expect(result[0].toString()).to.equal('hello')
|
||||||
|
|
||||||
const addr = multiaddr(handlerSpies[1].args[2][0].dstPeer.addrs[0]).toString()
|
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'))
|
chai.use(require('dirty-chai'))
|
||||||
const expect = chai.expect
|
const expect = chai.expect
|
||||||
const parallel = require('async/parallel')
|
const parallel = require('async/parallel')
|
||||||
const utils = require('./utils')
|
|
||||||
const createNode = utils.createNode
|
|
||||||
const _times = require('lodash.times')
|
const _times = require('lodash.times')
|
||||||
const CID = require('cids')
|
const CID = require('cids')
|
||||||
|
const utils = require('./utils/node')
|
||||||
|
const createNode = utils.createNode
|
||||||
|
|
||||||
describe('.contentRouting', () => {
|
describe('.contentRouting', () => {
|
||||||
let nodeA
|
let nodeA
|
||||||
@ -20,7 +20,7 @@ describe('.contentRouting', () => {
|
|||||||
let nodeE
|
let nodeE
|
||||||
|
|
||||||
before(function (done) {
|
before(function (done) {
|
||||||
this.timeout(5000)
|
this.timeout(5 * 1000)
|
||||||
const tasks = _times(5, () => (cb) => {
|
const tasks = _times(5, () => (cb) => {
|
||||||
createNode('/ip4/0.0.0.0/tcp/0', {
|
createNode('/ip4/0.0.0.0/tcp/0', {
|
||||||
mdns: false,
|
mdns: false,
|
14
test/node.js
14
test/node.js
@ -1,11 +1,9 @@
|
|||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
require('./base')
|
require('./base')
|
||||||
require('./nodejs-bundle/tcp')
|
require('./transports.node')
|
||||||
require('./nodejs-bundle/tcp+websockets')
|
require('./stream-muxing.node')
|
||||||
require('./nodejs-bundle/tcp+websockets+webrtc-star')
|
require('./peer-discovery.node')
|
||||||
require('./nodejs-bundle/stream-muxing')
|
require('./peer-routing.node')
|
||||||
require('./nodejs-bundle/discovery')
|
require('./content-routing.node')
|
||||||
require('./nodejs-bundle/peer-routing')
|
require('./circuit-relay.node')
|
||||||
require('./nodejs-bundle/content-routing')
|
|
||||||
require('./nodejs-bundle/circuit')
|
|
||||||
|
@ -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 expect = chai.expect
|
||||||
const signalling = require('libp2p-webrtc-star/src/sig-server')
|
const signalling = require('libp2p-webrtc-star/src/sig-server')
|
||||||
const parallel = require('async/parallel')
|
const parallel = require('async/parallel')
|
||||||
const utils = require('./utils')
|
const utils = require('./utils/node')
|
||||||
const createNode = utils.createNode
|
const createNode = utils.createNode
|
||||||
const echo = utils.echo
|
const echo = utils.echo
|
||||||
|
|
||||||
describe('discovery', () => {
|
describe('peer discovery', () => {
|
||||||
let nodeA
|
let nodeA
|
||||||
let nodeB
|
let nodeB
|
||||||
let port = 24642
|
let port = 24642
|
||||||
@ -61,7 +61,8 @@ describe('discovery', () => {
|
|||||||
setup({ mdns: true })
|
setup({ mdns: true })
|
||||||
|
|
||||||
it('find a peer', function (done) {
|
it('find a peer', function (done) {
|
||||||
this.timeout(15000)
|
this.timeout(15 * 1000)
|
||||||
|
|
||||||
nodeA.once('peer:discovery', (peerInfo) => {
|
nodeA.once('peer:discovery', (peerInfo) => {
|
||||||
expect(nodeB.peerInfo.id.toB58String())
|
expect(nodeB.peerInfo.id.toB58String())
|
||||||
.to.eql(peerInfo.id.toB58String())
|
.to.eql(peerInfo.id.toB58String())
|
||||||
@ -75,7 +76,7 @@ describe('discovery', () => {
|
|||||||
setup({ webRTCStar: true })
|
setup({ webRTCStar: true })
|
||||||
|
|
||||||
it('find a peer', function (done) {
|
it('find a peer', function (done) {
|
||||||
this.timeout(15000)
|
this.timeout(15 * 1000)
|
||||||
nodeA.once('peer:discovery', (peerInfo) => {
|
nodeA.once('peer:discovery', (peerInfo) => {
|
||||||
expect(nodeB.peerInfo.id.toB58String())
|
expect(nodeB.peerInfo.id.toB58String())
|
||||||
.to.eql(peerInfo.id.toB58String())
|
.to.eql(peerInfo.id.toB58String())
|
||||||
@ -91,7 +92,7 @@ describe('discovery', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('find a peer', function (done) {
|
it('find a peer', function (done) {
|
||||||
this.timeout(15000)
|
this.timeout(15 * 1000)
|
||||||
nodeA.once('peer:discovery', (peerInfo) => {
|
nodeA.once('peer:discovery', (peerInfo) => {
|
||||||
expect(nodeB.peerInfo.id.toB58String())
|
expect(nodeB.peerInfo.id.toB58String())
|
||||||
.to.eql(peerInfo.id.toB58String())
|
.to.eql(peerInfo.id.toB58String())
|
@ -7,9 +7,9 @@ const chai = require('chai')
|
|||||||
chai.use(require('dirty-chai'))
|
chai.use(require('dirty-chai'))
|
||||||
const expect = chai.expect
|
const expect = chai.expect
|
||||||
const parallel = require('async/parallel')
|
const parallel = require('async/parallel')
|
||||||
const utils = require('./utils')
|
|
||||||
const createNode = utils.createNode
|
|
||||||
const _times = require('lodash.times')
|
const _times = require('lodash.times')
|
||||||
|
const utils = require('./utils/node')
|
||||||
|
const createNode = utils.createNode
|
||||||
|
|
||||||
describe('.peerRouting', () => {
|
describe('.peerRouting', () => {
|
||||||
let nodeA
|
let nodeA
|
||||||
@ -19,7 +19,8 @@ describe('.peerRouting', () => {
|
|||||||
let nodeE
|
let nodeE
|
||||||
|
|
||||||
before(function (done) {
|
before(function (done) {
|
||||||
this.timeout(5000)
|
this.timeout(5 * 1000)
|
||||||
|
|
||||||
const tasks = _times(5, () => (cb) => {
|
const tasks = _times(5, () => (cb) => {
|
||||||
createNode('/ip4/0.0.0.0/tcp/0', {
|
createNode('/ip4/0.0.0.0/tcp/0', {
|
||||||
mdns: false,
|
mdns: false,
|
@ -7,7 +7,7 @@ const expect = chai.expect
|
|||||||
const parallel = require('async/parallel')
|
const parallel = require('async/parallel')
|
||||||
const series = require('async/series')
|
const series = require('async/series')
|
||||||
const pull = require('pull-stream')
|
const pull = require('pull-stream')
|
||||||
const utils = require('./utils')
|
const utils = require('./utils/node')
|
||||||
const createNode = utils.createNode
|
const createNode = utils.createNode
|
||||||
const echo = utils.echo
|
const echo = utils.echo
|
||||||
|
|
||||||
@ -36,7 +36,7 @@ function teardown (nodeA, nodeB, callback) {
|
|||||||
|
|
||||||
describe('stream muxing', () => {
|
describe('stream muxing', () => {
|
||||||
it('spdy only', function (done) {
|
it('spdy only', function (done) {
|
||||||
this.timeout(5000)
|
this.timeout(5 * 1000)
|
||||||
|
|
||||||
let nodeA
|
let nodeA
|
||||||
let nodeB
|
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 multiaddr = require('multiaddr')
|
||||||
const spawn = require('child_process').spawn
|
const spawn = require('child_process').spawn
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
// const map = require('async/map')
|
|
||||||
const pull = require('pull-stream')
|
const pull = require('pull-stream')
|
||||||
const utils = require('./utils')
|
const utils = require('./utils/node')
|
||||||
const createNode = utils.createNode
|
const createNode = utils.createNode
|
||||||
const echo = utils.echo
|
const echo = utils.echo
|
||||||
|
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
const WS = require('libp2p-websockets')
|
const WS = require('libp2p-websockets')
|
||||||
const WebRTCStar = require('libp2p-webrtc-star')
|
const WebRTCStar = require('libp2p-webrtc-star')
|
||||||
|
const WebSocketStar = require('libp2p-websocket-star')
|
||||||
const spdy = require('libp2p-spdy')
|
const spdy = require('libp2p-spdy')
|
||||||
const multiplex = require('libp2p-multiplex')
|
const multiplex = require('libp2p-multiplex')
|
||||||
const secio = require('libp2p-secio')
|
const secio = require('libp2p-secio')
|
||||||
@ -36,11 +37,13 @@ class Node extends libp2p {
|
|||||||
constructor (peerInfo, peerBook, options) {
|
constructor (peerInfo, peerBook, options) {
|
||||||
options = options || {}
|
options = options || {}
|
||||||
const webRTCStar = new WebRTCStar()
|
const webRTCStar = new WebRTCStar()
|
||||||
|
const wsStar = new WebSocketStar()
|
||||||
|
|
||||||
const modules = {
|
const modules = {
|
||||||
transport: [
|
transport: [
|
||||||
new WS(),
|
new WS(),
|
||||||
webRTCStar
|
webRTCStar,
|
||||||
|
wsStar
|
||||||
],
|
],
|
||||||
connection: {
|
connection: {
|
||||||
muxer: getMuxers(options.muxer),
|
muxer: getMuxers(options.muxer),
|
||||||
@ -55,6 +58,10 @@ class Node extends libp2p {
|
|||||||
modules.discovery.push(webRTCStar.discovery)
|
modules.discovery.push(webRTCStar.discovery)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (options.wsStar) {
|
||||||
|
modules.discovery.push(wsStar.discovery)
|
||||||
|
}
|
||||||
|
|
||||||
if (options.bootstrap) {
|
if (options.bootstrap) {
|
||||||
const r = new Railing(options.bootstrap)
|
const r = new Railing(options.bootstrap)
|
||||||
modules.discovery.push(r)
|
modules.discovery.push(r)
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
const chai = require('chai')
|
const chai = require('chai')
|
||||||
chai.use(require('dirty-chai'))
|
chai.use(require('dirty-chai'))
|
||||||
const Node = require('./nodejs-bundle')
|
const Node = require('./bundle.node')
|
||||||
const PeerInfo = require('peer-info')
|
const PeerInfo = require('peer-info')
|
||||||
const PeerId = require('peer-id')
|
const PeerId = require('peer-id')
|
||||||
const waterfall = require('async/waterfall')
|
const waterfall = require('async/waterfall')
|
Loading…
x
Reference in New Issue
Block a user