首次提交
This commit is contained in:
+180
@@ -0,0 +1,180 @@
|
||||
'use strict'
|
||||
|
||||
const { test } = require('tape')
|
||||
const mq = require('../')
|
||||
|
||||
require('../abstractTest')({
|
||||
builder: mq,
|
||||
test
|
||||
})
|
||||
|
||||
test('queue concurrency', function (t) {
|
||||
t.plan(3)
|
||||
|
||||
const e = mq({ concurrency: 1 })
|
||||
let completed1 = false
|
||||
|
||||
t.equal(e.concurrency, 1)
|
||||
|
||||
e.on('hello 1', function (message, cb) {
|
||||
setTimeout(cb, 10)
|
||||
})
|
||||
|
||||
e.on('hello 2', function (message, cb) {
|
||||
cb()
|
||||
})
|
||||
|
||||
e.emit({ topic: 'hello 1' }, function () {
|
||||
completed1 = true
|
||||
})
|
||||
|
||||
e.emit({ topic: 'hello 2' }, function () {
|
||||
t.ok(completed1, 'the first message must be completed')
|
||||
})
|
||||
|
||||
t.equal(e.length, 1)
|
||||
})
|
||||
|
||||
test('queue released when full', function (t) {
|
||||
t.plan(21)
|
||||
|
||||
const e = mq({ concurrency: 1 })
|
||||
|
||||
e.on('hello 1', function (message, cb) {
|
||||
t.ok(true, 'message received')
|
||||
setTimeout(cb, 10)
|
||||
})
|
||||
|
||||
function onSent () {
|
||||
t.ok(true, 'message sent')
|
||||
}
|
||||
|
||||
for (let i = 0; i < 9; i++) {
|
||||
e._messageQueue.push({ topic: 'hello 1' })
|
||||
e._messageCallbacks.push(onSent)
|
||||
e.current++
|
||||
}
|
||||
|
||||
e.emit({ topic: 'hello 1' }, onSent)
|
||||
|
||||
process.once('warning', function (warning) {
|
||||
t.equal(warning.message, 'MqEmitter leak detected', 'warning message')
|
||||
})
|
||||
})
|
||||
|
||||
test('without any listeners and a callback', function (t) {
|
||||
const e = mq()
|
||||
const expected = {
|
||||
topic: 'hello world',
|
||||
payload: { my: 'message' }
|
||||
}
|
||||
|
||||
e.emit(expected, function () {
|
||||
t.equal(e.current, 1, 'there 1 message that is being processed')
|
||||
e.close(function () {
|
||||
t.end()
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
test('queue concurrency with overlapping subscriptions', function (t) {
|
||||
t.plan(3)
|
||||
|
||||
const e = mq({ concurrency: 1 })
|
||||
let completed1 = false
|
||||
|
||||
t.equal(e.concurrency, 1)
|
||||
|
||||
e.on('000001/021/#', function (message, cb) {
|
||||
setTimeout(cb, 10)
|
||||
})
|
||||
|
||||
e.on('000001/021/000B/0001/01', function (message, cb) {
|
||||
setTimeout(cb, 20)
|
||||
})
|
||||
|
||||
e.emit({ topic: '000001/021/000B/0001/01' }, function () {
|
||||
completed1 = true
|
||||
})
|
||||
|
||||
e.emit({ topic: '000001/021/000B/0001/01' }, function () {
|
||||
t.ok(completed1, 'the first message must be completed')
|
||||
process.nextTick(function () {
|
||||
t.equal(e.current, 0, 'no message is in flight')
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
test('removeListener without a callback does not throw', function (t) {
|
||||
const e = mq()
|
||||
function fn () {}
|
||||
|
||||
e.on('hello', fn)
|
||||
e.removeListener('hello', fn)
|
||||
|
||||
t.end()
|
||||
})
|
||||
|
||||
test('removeAllListeners removes listeners', function (t) {
|
||||
const e = mq()
|
||||
|
||||
e.on('hello', function () {
|
||||
t.fail('listener called')
|
||||
})
|
||||
|
||||
e.removeAllListeners('hello', function () {
|
||||
e.emit({ topic: 'hello' }, function () {
|
||||
t.end()
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
test('removeAllListeners without a callback does not throw', function (t) {
|
||||
const e = mq()
|
||||
function fn () {}
|
||||
|
||||
e.on('hello', fn)
|
||||
e.removeAllListeners('hello')
|
||||
|
||||
t.end()
|
||||
})
|
||||
|
||||
test('set defaults to opts', function (t) {
|
||||
const opts = {}
|
||||
mq(opts)
|
||||
|
||||
t.deepEqual(opts, {
|
||||
matchEmptyLevels: true,
|
||||
separator: '/',
|
||||
wildcardOne: '+',
|
||||
wildcardSome: '#'
|
||||
})
|
||||
|
||||
t.end()
|
||||
})
|
||||
|
||||
test('removeListener inside messageHandler', function (t) {
|
||||
t.plan(3)
|
||||
|
||||
const e = mq()
|
||||
|
||||
function messageHandler1 (message, cb) {
|
||||
t.ok(true, 'messageHandler1 called')
|
||||
// removes itself
|
||||
e.removeListener('hello', messageHandler1)
|
||||
cb()
|
||||
}
|
||||
|
||||
e.on('hello', messageHandler1)
|
||||
|
||||
function messageHandler2 (message, cb) {
|
||||
t.ok(true, 'messageHandler2 called')
|
||||
cb()
|
||||
}
|
||||
|
||||
e.on('hello', messageHandler2)
|
||||
|
||||
e.emit({ topic: 'hello' }, function () {
|
||||
t.ok(true, 'emit callback received')
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user