|
var makeTest = require('./context')
|
|
var Bottleneck = require('./bottleneck')
|
|
var assert = require('assert')
|
|
var Redis = require('ioredis')
|
|
|
|
if (process.env.DATASTORE === 'ioredis') {
|
|
describe('ioredis-only', function () {
|
|
var c
|
|
|
|
afterEach(function () {
|
|
return c.limiter.disconnect(false)
|
|
})
|
|
|
|
it('Should connect in Redis Cluster mode', function () {
|
|
c = makeTest({
|
|
maxConcurrent: 2,
|
|
clientOptions: {},
|
|
clusterNodes: [{
|
|
host: '127.0.0.1',
|
|
port: 6379
|
|
}]
|
|
})
|
|
|
|
c.mustEqual(c.limiter.datastore, 'ioredis')
|
|
assert(c.limiter._store.connection.client.nodes().length >= 0)
|
|
})
|
|
|
|
it('Should accept existing connections', function () {
|
|
var connection = new Bottleneck.IORedisConnection()
|
|
connection.id = 'super-connection'
|
|
c = makeTest({
|
|
minTime: 50,
|
|
connection
|
|
})
|
|
|
|
c.pNoErrVal(c.limiter.schedule(c.promise, null, 1), 1)
|
|
c.pNoErrVal(c.limiter.schedule(c.promise, null, 2), 2)
|
|
|
|
return c.last()
|
|
.then(function (results) {
|
|
c.checkResultsOrder([[1], [2]])
|
|
c.checkDuration(50)
|
|
c.mustEqual(c.limiter.connection.id, 'super-connection')
|
|
c.mustEqual(c.limiter.datastore, 'ioredis')
|
|
|
|
return c.limiter.disconnect()
|
|
})
|
|
.then(function () {
|
|
// Shared connections should not be disconnected by the limiter
|
|
c.mustEqual(c.limiter.clients().client.status, 'ready')
|
|
return connection.disconnect()
|
|
})
|
|
})
|
|
|
|
it('Should accept existing redis clients', function () {
|
|
var client = new Redis()
|
|
client.id = 'super-client'
|
|
|
|
var connection = new Bottleneck.IORedisConnection({ client })
|
|
connection.id = 'super-connection'
|
|
c = makeTest({
|
|
minTime: 50,
|
|
connection
|
|
})
|
|
|
|
c.pNoErrVal(c.limiter.schedule(c.promise, null, 1), 1)
|
|
c.pNoErrVal(c.limiter.schedule(c.promise, null, 2), 2)
|
|
|
|
return c.last()
|
|
.then(function (results) {
|
|
c.checkResultsOrder([[1], [2]])
|
|
c.checkDuration(50)
|
|
c.mustEqual(c.limiter.clients().client.id, 'super-client')
|
|
c.mustEqual(c.limiter.connection.id, 'super-connection')
|
|
c.mustEqual(c.limiter.datastore, 'ioredis')
|
|
|
|
return c.limiter.disconnect()
|
|
})
|
|
.then(function () {
|
|
// Shared connections should not be disconnected by the limiter
|
|
c.mustEqual(c.limiter.clients().client.status, 'ready')
|
|
return connection.disconnect()
|
|
})
|
|
})
|
|
|
|
it('Should trigger error events on the shared connection', function (done) {
|
|
var connection = new Bottleneck.IORedisConnection({
|
|
clientOptions: {
|
|
port: 1
|
|
}
|
|
})
|
|
connection.on('error', function (err) {
|
|
c.mustEqual(c.limiter.datastore, 'ioredis')
|
|
connection.disconnect()
|
|
done()
|
|
})
|
|
|
|
c = makeTest({ connection })
|
|
c.limiter.on('error', function (err) {
|
|
done(err)
|
|
})
|
|
})
|
|
|
|
})
|
|
}
|