mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-03-17 16:10:52 +00:00
* docs: update chat example and add info to its readme * docs: update echo example * docs: update libp2p in browser example * docs: update pubsub example * docs: update peer and content routing examples * docs: update discovery mechanisms example * docs: update encrypted comms example * docs: update protocol and stream muxing example * feat: add config validation * test: update CI configs, use only node 8
99 lines
2.4 KiB
JavaScript
99 lines
2.4 KiB
JavaScript
/* eslint-env mocha */
|
|
/* eslint max-nested-callbacks: ["error", 8] */
|
|
|
|
'use strict'
|
|
|
|
const chai = require('chai')
|
|
chai.use(require('dirty-chai'))
|
|
const expect = chai.expect
|
|
const parallel = require('async/parallel')
|
|
const waterfall = require('async/waterfall')
|
|
const _times = require('lodash.times')
|
|
|
|
const createNode = require('./utils/create-node')
|
|
|
|
function startTwo (callback) {
|
|
const tasks = _times(2, () => (cb) => {
|
|
createNode('/ip4/0.0.0.0/tcp/0', {
|
|
config: {
|
|
peerDiscovery: {
|
|
mdns: {
|
|
enabled: false
|
|
}
|
|
},
|
|
EXPERIMENTAL: {
|
|
pubsub: true
|
|
}
|
|
}
|
|
}, (err, node) => {
|
|
expect(err).to.not.exist()
|
|
node.start((err) => cb(err, node))
|
|
})
|
|
})
|
|
|
|
parallel(tasks, (err, nodes) => {
|
|
expect(err).to.not.exist()
|
|
|
|
nodes[0].dial(nodes[1].peerInfo, (err) => callback(err, nodes))
|
|
})
|
|
}
|
|
|
|
function stopTwo (nodes, callback) {
|
|
parallel([
|
|
(cb) => nodes[0].stop(cb),
|
|
(cb) => nodes[1].stop(cb)
|
|
], callback)
|
|
}
|
|
|
|
// There is a vast test suite on PubSub through js-ipfs
|
|
// https://github.com/ipfs/interface-ipfs-core/blob/master/js/src/pubsub.js
|
|
// and libp2p-floodsub itself
|
|
// https://github.com/libp2p/js-libp2p-floodsub/tree/master/test
|
|
// TODO: consider if all or some of those should come here
|
|
describe('.pubsub', () => {
|
|
describe('.pubsub on (default)', (done) => {
|
|
it('start two nodes and send one message', (done) => {
|
|
waterfall([
|
|
(cb) => startTwo(cb),
|
|
(nodes, cb) => {
|
|
const data = Buffer.from('test')
|
|
nodes[0].pubsub.subscribe('pubsub',
|
|
(msg) => {
|
|
expect(msg.data).to.eql(data)
|
|
cb(null, nodes)
|
|
},
|
|
(err) => {
|
|
expect(err).to.not.exist()
|
|
setTimeout(() => nodes[1].pubsub.publish('pubsub', data, (err) => {
|
|
expect(err).to.not.exist()
|
|
}), 500)
|
|
}
|
|
)
|
|
},
|
|
(nodes, cb) => stopTwo(nodes, cb)
|
|
], done)
|
|
})
|
|
})
|
|
|
|
describe('.pubsub off', () => {
|
|
it('fail to use pubsub if disabled', (done) => {
|
|
createNode('/ip4/0.0.0.0/tcp/0', {
|
|
config: {
|
|
peerDiscovery: {
|
|
mdns: {
|
|
enabled: false
|
|
}
|
|
},
|
|
EXPERIMENTAL: {
|
|
pubsub: false
|
|
}
|
|
}
|
|
}, (err, node) => {
|
|
expect(err).to.not.exist()
|
|
expect(node.pubsub).to.not.exist()
|
|
done()
|
|
})
|
|
})
|
|
})
|
|
})
|