text: 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 accept ioredis lib override', function () {
        c = makeTest({
          maxConcurrent: 2,
          Redis,
          clientOptions: {},
          clusterNodes: [{
            host: process.env.REDIS_HOST,
            port: process.env.REDIS_PORT
          }]
        })
  
        c.mustEqual(c.limiter.datastore, 'ioredis')
      })
  
      it('Should connect in Redis Cluster mode', function () {
        c = makeTest({
          maxConcurrent: 2,
          clientOptions: {},
          clusterNodes: [{
            host: process.env.REDIS_HOST,
            port: process.env.REDIS_PORT
          }]
        })
  
        c.mustEqual(c.limiter.datastore, 'ioredis')
        assert(c.limiter._store.connection.client.nodes().length >= 0)
      })
  
      it('Should connect in Redis Cluster mode with premade client', function () {
        var client = new Redis.Cluster('')
        var connection = new Bottleneck.IORedisConnection({ client })
        c = makeTest({
          maxConcurrent: 2,
          clientOptions: {},
          clusterNodes: [{
            host: process.env.REDIS_HOST,
            port: process.env.REDIS_PORT
          }]
        })
  
        c.mustEqual(c.limiter.datastore, 'ioredis')
        assert(c.limiter._store.connection.client.nodes().length >= 0)
        connection.disconnect(false)
      })
  
      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)
        })
      })
    })
  }
  