mirror of
https://github.com/fluencelabs/js-libp2p-interfaces
synced 2025-03-31 03:01:29 +00:00
BREAKING CHANGE: `signMessages` and `strictSigning` pubsub configuration options replaced with a `globalSignaturePolicy` option
91 lines
2.6 KiB
JavaScript
91 lines
2.6 KiB
JavaScript
/* eslint-env mocha */
|
|
'use strict'
|
|
|
|
const { expect } = require('aegir/utils/chai')
|
|
const sinon = require('sinon')
|
|
|
|
const PubsubBaseImpl = require('../../src/pubsub')
|
|
const { SignaturePolicy } = require('../../src/pubsub/signature-policy')
|
|
const {
|
|
createPeerId,
|
|
mockRegistrar
|
|
} = require('./utils')
|
|
|
|
describe('pubsub base messages', () => {
|
|
let peerId
|
|
let pubsub
|
|
|
|
before(async () => {
|
|
peerId = await createPeerId()
|
|
pubsub = new PubsubBaseImpl({
|
|
debugName: 'pubsub',
|
|
multicodecs: '/pubsub/1.0.0',
|
|
libp2p: {
|
|
peerId: peerId,
|
|
registrar: mockRegistrar
|
|
}
|
|
})
|
|
})
|
|
|
|
afterEach(() => {
|
|
sinon.restore()
|
|
})
|
|
|
|
it('_buildMessage normalizes and signs messages', async () => {
|
|
const message = {
|
|
receivedFrom: peerId.id,
|
|
data: 'hello',
|
|
topicIDs: ['test-topic']
|
|
}
|
|
|
|
const signedMessage = await pubsub._buildMessage(message)
|
|
expect(pubsub.validate(signedMessage)).to.not.be.rejected()
|
|
})
|
|
|
|
it('validate with StrictNoSign will reject a message with from, signature, key, seqno present', async () => {
|
|
const message = {
|
|
receivedFrom: peerId.id,
|
|
data: 'hello',
|
|
topicIDs: ['test-topic']
|
|
}
|
|
|
|
sinon.stub(pubsub, 'globalSignaturePolicy').value(SignaturePolicy.StrictSign)
|
|
|
|
const signedMessage = await pubsub._buildMessage(message)
|
|
|
|
sinon.stub(pubsub, 'globalSignaturePolicy').value(SignaturePolicy.StrictNoSign)
|
|
await expect(pubsub.validate(signedMessage)).to.be.rejected()
|
|
delete signedMessage.from
|
|
await expect(pubsub.validate(signedMessage)).to.be.rejected()
|
|
delete signedMessage.signature
|
|
await expect(pubsub.validate(signedMessage)).to.be.rejected()
|
|
delete signedMessage.key
|
|
await expect(pubsub.validate(signedMessage)).to.be.rejected()
|
|
delete signedMessage.seqno
|
|
await expect(pubsub.validate(signedMessage)).to.not.be.rejected()
|
|
})
|
|
|
|
it('validate with StrictNoSign will validate a message without a signature, key, and seqno', async () => {
|
|
const message = {
|
|
receivedFrom: peerId.id,
|
|
data: 'hello',
|
|
topicIDs: ['test-topic']
|
|
}
|
|
|
|
sinon.stub(pubsub, 'globalSignaturePolicy').value(SignaturePolicy.StrictNoSign)
|
|
|
|
const signedMessage = await pubsub._buildMessage(message)
|
|
expect(pubsub.validate(signedMessage)).to.not.be.rejected()
|
|
})
|
|
|
|
it('validate with StrictSign requires a signature', async () => {
|
|
const message = {
|
|
receivedFrom: peerId.id,
|
|
data: 'hello',
|
|
topicIDs: ['test-topic']
|
|
}
|
|
|
|
await expect(pubsub.validate(message)).to.be.rejectedWith(Error, 'Signing required and no signature was present')
|
|
})
|
|
})
|