|
var makeTest = require('./context')
|
|
var Bottleneck = require('./bottleneck')
|
|
var assert = require('assert')
|
|
var Redis = require('redis')
|
|
|
|
if (process.env.DATASTORE === 'redis') {
|
|
describe('node_redis-only', function () {
|
|
var c
|
|
|
|
afterEach(function () {
|
|
return c.limiter.disconnect(false)
|
|
})
|
|
|
|
it('Should accept existing connections', function () {
|
|
var connection = new Bottleneck.RedisConnection()
|
|
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, 'redis')
|
|
|
|
return c.limiter.disconnect()
|
|
})
|
|
.then(function () {
|
|
// Shared connections should not be disconnected by the limiter
|
|
c.mustEqual(c.limiter.clients().client.ready, true)
|
|
return connection.disconnect()
|
|
})
|
|
})
|
|
|
|
it('Should accept existing redis clients', function () {
|
|
var client = Redis.createClient()
|
|
client.id = 'super-client'
|
|
|
|
var connection = new Bottleneck.RedisConnection({ 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, 'redis')
|
|
|
|
return c.limiter.disconnect()
|
|
})
|
|
.then(function () {
|
|
// Shared connections should not be disconnected by the limiter
|
|
c.mustEqual(c.limiter.clients().client.ready, true)
|
|
return connection.disconnect()
|
|
})
|
|
})
|
|
|
|
it('Should trigger error events on the shared connection', function (done) {
|
|
var connection = new Bottleneck.RedisConnection({
|
|
clientOptions: {
|
|
port: 1
|
|
}
|
|
})
|
|
connection.on('error', function (err) {
|
|
c.mustEqual(c.limiter.datastore, 'redis')
|
|
connection.disconnect()
|
|
done()
|
|
})
|
|
|
|
c = makeTest({ connection })
|
|
c.limiter.on('error', function (err) {
|
|
done(err)
|
|
})
|
|
})
|
|
|
|
})
|
|
}
|