mirror of
https://github.com/fluencelabs/js-libp2p-interfaces
synced 2025-04-24 18:02:28 +00:00
* feat: interface pubsub * chore: pubsub router tests * chore: move pubsub abstractions from gossipsub * chore: address review * chore: revamp docs * chore: add emit self tests to interface * chore: refactor base tests * chore: publish should only accept one topic per api call * chore: normalize msg before emit * chore: do not reset inbound stream * chore: apply suggestions from code review Co-authored-by: Jacob Heun <jacobheun@gmail.com> * chore: address review * fix: remove subscribe handler * chore: remove bits from create peerId Co-authored-by: Jacob Heun <jacobheun@gmail.com> * chore: remove delay from topic validators tests * chore: add event emitter information * fix: topic validator docs Co-authored-by: Jacob Heun <jacobheun@gmail.com>
70 lines
1.5 KiB
JavaScript
70 lines
1.5 KiB
JavaScript
/* eslint-env mocha */
|
|
'use strict'
|
|
|
|
const chai = require('chai')
|
|
const { expect } = chai
|
|
const sinon = require('sinon')
|
|
|
|
const uint8ArrayFromString = require('uint8arrays/from-string')
|
|
|
|
const topic = 'foo'
|
|
const data = uint8ArrayFromString('bar')
|
|
const shouldNotHappen = (_) => expect.fail()
|
|
|
|
module.exports = (common) => {
|
|
describe('emit self', () => {
|
|
let pubsub
|
|
|
|
describe('enabled', () => {
|
|
before(async () => {
|
|
[pubsub] = await common.setup(1, { emitSelf: true })
|
|
})
|
|
|
|
before(() => {
|
|
pubsub.start()
|
|
pubsub.subscribe(topic)
|
|
})
|
|
|
|
after(async () => {
|
|
sinon.restore()
|
|
pubsub && pubsub.stop()
|
|
await common.teardown()
|
|
})
|
|
|
|
it('should emit to self on publish', () => {
|
|
const promise = new Promise((resolve) => pubsub.once(topic, resolve))
|
|
|
|
pubsub.publish(topic, data)
|
|
|
|
return promise
|
|
})
|
|
})
|
|
|
|
describe('disabled', () => {
|
|
before(async () => {
|
|
[pubsub] = await common.setup(1, { emitSelf: false })
|
|
})
|
|
|
|
before(() => {
|
|
pubsub.start()
|
|
pubsub.subscribe(topic)
|
|
})
|
|
|
|
after(async () => {
|
|
sinon.restore()
|
|
pubsub && pubsub.stop()
|
|
await common.teardown()
|
|
})
|
|
|
|
it('should not emit to self on publish', () => {
|
|
pubsub.once(topic, (m) => shouldNotHappen)
|
|
|
|
pubsub.publish(topic, data)
|
|
|
|
// Wait 1 second to guarantee that self is not noticed
|
|
return new Promise((resolve) => setTimeout(() => resolve(), 1000))
|
|
})
|
|
})
|
|
})
|
|
}
|