mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-03-23 11:00:50 +00:00
BREAKING CHANGE: all API methods with peer-info parameters or return values were changed. You can check the API.md document, in order to check the new values to use
98 lines
2.5 KiB
JavaScript
98 lines
2.5 KiB
JavaScript
'use strict'
|
|
/* eslint-env mocha */
|
|
|
|
const chai = require('chai')
|
|
chai.use(require('dirty-chai'))
|
|
const { expect } = chai
|
|
|
|
const pWaitFor = require('p-wait-for')
|
|
const pDefer = require('p-defer')
|
|
const mergeOptions = require('merge-options')
|
|
|
|
const Floodsub = require('libp2p-floodsub')
|
|
const Gossipsub = require('libp2p-gossipsub')
|
|
const { multicodec: floodsubMulticodec } = require('libp2p-floodsub')
|
|
const { multicodec: gossipsubMulticodec } = require('libp2p-gossipsub')
|
|
|
|
const multiaddr = require('multiaddr')
|
|
|
|
const { create } = require('../../src')
|
|
const { baseOptions } = require('./utils')
|
|
const peerUtils = require('../utils/creators/peer')
|
|
|
|
const listenAddr = multiaddr('/ip4/127.0.0.1/tcp/0')
|
|
const remoteListenAddr = multiaddr('/ip4/127.0.0.1/tcp/0')
|
|
|
|
describe('Pubsub subsystem is able to use different implementations', () => {
|
|
let peerId, remotePeerId
|
|
let libp2p, remoteLibp2p
|
|
|
|
beforeEach(async () => {
|
|
[peerId, remotePeerId] = await peerUtils.createPeerId({ number: 2 })
|
|
})
|
|
|
|
afterEach(() => Promise.all([
|
|
libp2p && libp2p.stop(),
|
|
remoteLibp2p && remoteLibp2p.stop()
|
|
]))
|
|
|
|
it('Floodsub nodes', () => {
|
|
return pubsubTest(floodsubMulticodec, Floodsub)
|
|
})
|
|
|
|
it('Gossipsub nodes', () => {
|
|
return pubsubTest(gossipsubMulticodec, Gossipsub)
|
|
})
|
|
|
|
const pubsubTest = async (multicodec, pubsub) => {
|
|
const defer = pDefer()
|
|
const topic = 'test-topic'
|
|
const data = 'hey!'
|
|
|
|
libp2p = await create(mergeOptions(baseOptions, {
|
|
peerId,
|
|
addresses: {
|
|
listen: [listenAddr]
|
|
},
|
|
modules: {
|
|
pubsub: pubsub
|
|
}
|
|
}))
|
|
|
|
remoteLibp2p = await create(mergeOptions(baseOptions, {
|
|
peerId: remotePeerId,
|
|
addresses: {
|
|
listen: [remoteListenAddr]
|
|
},
|
|
modules: {
|
|
pubsub: pubsub
|
|
}
|
|
}))
|
|
|
|
await Promise.all([
|
|
libp2p.start(),
|
|
remoteLibp2p.start()
|
|
])
|
|
|
|
const libp2pId = libp2p.peerId.toB58String()
|
|
libp2p.peerStore.addressBook.set(remotePeerId, remoteLibp2p.addresses.listen)
|
|
|
|
const connection = await libp2p.dialProtocol(remotePeerId, multicodec)
|
|
expect(connection).to.exist()
|
|
|
|
libp2p.pubsub.subscribe(topic, (msg) => {
|
|
expect(msg.data.toString()).to.equal(data)
|
|
defer.resolve()
|
|
})
|
|
|
|
// wait for remoteLibp2p to know about libp2p subscription
|
|
await pWaitFor(() => {
|
|
const subscribedPeers = remoteLibp2p.pubsub.getSubscribers(topic)
|
|
return subscribedPeers.includes(libp2pId)
|
|
})
|
|
|
|
remoteLibp2p.pubsub.publish(topic, data)
|
|
await defer.promise
|
|
}
|
|
})
|