mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-05-25 18:20:09 +02:00
[misc] upgrade eslint packages to the latest version everywhere GitOrigin-RevId: f1480d4a171acef82fb26c4aa54be3a6088b0ab3
170 lines
5.3 KiB
JavaScript
170 lines
5.3 KiB
JavaScript
/*
|
|
* decaffeinate suggestions:
|
|
* DS102: Remove unnecessary code created because of implicit returns
|
|
* DS206: Consider reworking classes to avoid initClass
|
|
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
|
*/
|
|
require('chai').should()
|
|
const SandboxedModule = require('sandboxed-module')
|
|
const assert = require('assert')
|
|
const path = require('path')
|
|
const sinon = require('sinon')
|
|
const modulePath = path.join(__dirname, './../../../index.js')
|
|
const { expect } = require('chai')
|
|
|
|
describe('index', function () {
|
|
beforeEach(function () {
|
|
let Cluster, IoRedis, ioredisConstructor
|
|
this.settings = {}
|
|
this.ioredisConstructor = ioredisConstructor = sinon.stub()
|
|
|
|
this.ioredis = IoRedis = (function () {
|
|
let createIoRedis
|
|
IoRedis = class IoRedis {
|
|
static initClass() {
|
|
this.prototype.on = sinon.stub()
|
|
createIoRedis = ioredisConstructor
|
|
}
|
|
|
|
constructor() {
|
|
return createIoRedis.apply(this, arguments)
|
|
}
|
|
}
|
|
IoRedis.initClass()
|
|
return IoRedis
|
|
})()
|
|
this.ioredis.Cluster = Cluster = (function () {
|
|
Cluster = class Cluster {
|
|
static initClass() {
|
|
this.prototype.on = sinon.stub()
|
|
}
|
|
|
|
constructor(config, options) {
|
|
this.config = config
|
|
this.options = options
|
|
}
|
|
}
|
|
Cluster.initClass()
|
|
return Cluster
|
|
})()
|
|
this.redis = SandboxedModule.require(modulePath, {
|
|
requires: {
|
|
ioredis: this.ioredis,
|
|
},
|
|
globals: {
|
|
process,
|
|
},
|
|
})
|
|
return (this.auth_pass = '1234 pass')
|
|
})
|
|
|
|
describe('redis-sentinel', function () {
|
|
it('should throw an error when creating a client', function () {
|
|
const redisSentinelOptions = {
|
|
endpoints: ['127.0.0.1:1234', '127.0.0.1:2345', '127.0.0.1:3456'],
|
|
}
|
|
const createNewClient = () => {
|
|
this.redis.createClient(redisSentinelOptions)
|
|
}
|
|
expect(createNewClient).to.throw(
|
|
'@overleaf/redis-wrapper: redis-sentinel is no longer supported'
|
|
)
|
|
})
|
|
})
|
|
|
|
describe('single node redis', function () {
|
|
beforeEach(function () {
|
|
return (this.standardOpts = {
|
|
auth_pass: this.auth_pass,
|
|
port: 1234,
|
|
host: 'redis.mysite.env',
|
|
})
|
|
})
|
|
|
|
it('should work without opts', function () {
|
|
this.redis.createClient()
|
|
})
|
|
|
|
it('should use the ioredis driver in single-instance mode if a non array is passed', function () {
|
|
const client = this.redis.createClient(this.standardOpts)
|
|
return assert.equal(client.constructor, this.ioredis)
|
|
})
|
|
|
|
return it('should call createClient for the ioredis driver in single-instance mode if a non array is passed', function () {
|
|
this.redis.createClient(this.standardOpts)
|
|
return this.ioredisConstructor
|
|
.calledWith(sinon.match(this.standardOpts))
|
|
.should.equal(true)
|
|
})
|
|
})
|
|
|
|
describe('cluster', function () {
|
|
beforeEach(function () {
|
|
this.cluster = [{ mock: 'cluster' }, { mock: 'cluster2' }]
|
|
this.extraOptions = { keepAlive: 100 }
|
|
return (this.settings = {
|
|
cluster: this.cluster,
|
|
redisOptions: this.extraOptions,
|
|
key_schema: {
|
|
foo(x) {
|
|
return `${x}`
|
|
},
|
|
},
|
|
})
|
|
})
|
|
|
|
it('should pass the options correctly though with no options', function () {
|
|
const client = this.redis.createClient({ cluster: this.cluster })
|
|
assert(client instanceof this.ioredis.Cluster)
|
|
return client.config.should.deep.equal(this.cluster)
|
|
})
|
|
|
|
it('should not pass the key_schema through to the driver', function () {
|
|
const client = this.redis.createClient({
|
|
cluster: this.cluster,
|
|
key_schema: 'foobar',
|
|
})
|
|
assert(client instanceof this.ioredis.Cluster)
|
|
client.config.should.deep.equal(this.cluster)
|
|
return expect(client.options).to.deep.equal({ retry_max_delay: 5000 })
|
|
})
|
|
|
|
return it('should pass the options correctly though with additional options', function () {
|
|
const client = this.redis.createClient(this.settings)
|
|
assert(client instanceof this.ioredis.Cluster)
|
|
client.config.should.deep.equal(this.cluster)
|
|
// need to use expect here because of _.clone in sandbox
|
|
return expect(client.options).to.deep.equal({
|
|
redisOptions: this.extraOptions,
|
|
retry_max_delay: 5000,
|
|
})
|
|
})
|
|
})
|
|
|
|
return describe('monkey patch ioredis exec', function () {
|
|
beforeEach(function () {
|
|
this.callback = sinon.stub()
|
|
this.results = []
|
|
this.multiOrig = { exec: sinon.stub().yields(null, this.results) }
|
|
this.client = { multi: sinon.stub().returns(this.multiOrig) }
|
|
this.ioredisConstructor.returns(this.client)
|
|
this.redis.createClient(this.client)
|
|
return (this.multi = this.client.multi())
|
|
})
|
|
|
|
it('should return the old redis format for an array', function () {
|
|
this.results[0] = [null, 42]
|
|
this.results[1] = [null, 'foo']
|
|
this.multi.exec(this.callback)
|
|
return this.callback.calledWith(null, [42, 'foo']).should.equal(true)
|
|
})
|
|
|
|
return it('should return the old redis format when there is an error', function () {
|
|
this.results[0] = [null, 42]
|
|
this.results[1] = ['error', 'foo']
|
|
this.multi.exec(this.callback)
|
|
return this.callback.calledWith('error').should.equal(true)
|
|
})
|
|
})
|
|
})
|