express-rate-limit-ioredis-store
Version:
A redis store implementation to be used alongside ioredis for the express-rate-limit middleware
48 lines • 2.02 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const chai_1 = __importDefault(require("chai"));
const ioredis_1 = __importDefault(require("ioredis"));
const mocha_1 = require("mocha");
const createServer_1 = __importDefault(require("../libs/createServer"));
const server = (0, createServer_1.default)();
const usleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
describe('The store works alongside the express-rate-limit middleware', () => {
(0, mocha_1.before)(done => {
server.listen(3555, done);
});
beforeEach(async () => {
await new ioredis_1.default('localhost:6379').flushall();
});
it('Limits the requests for an ip after a limit', limitTest);
it('Resets the ip counter after the window of time passed', resetTest);
});
async function limitTest() {
for (let i = 0; i < 10; i++) {
const res = await chai_1.default.request(server).get('/');
res.body.message.should.be.equal('No problems so far');
}
for (let i = 0; i < 2; i++) {
const res = await chai_1.default.request(server).get('/');
res.body.error.should.be.equal('Too many requests');
}
}
async function resetTest() {
const client = new ioredis_1.default('localhost:6379');
for (let i = 0; i < 10; i++) {
const res = await chai_1.default.request(server).get('/');
res.body.message.should.be.equal('No problems so far');
}
let res = await chai_1.default.request(server).get('/');
res.body.error.should.be.equal('Too many requests');
let keys = await client.keys('*');
keys.should.have.length(2);
await usleep(3000);
keys = await client.keys('*');
keys.should.have.length(0);
res = await chai_1.default.request(server).get('/');
res.body.message.should.be.equal('No problems so far');
}
//# sourceMappingURL=server.test.js.map