@jianghujs/jianghu
Version:
Progressive Enterprise Framework
52 lines (44 loc) • 1.91 kB
JavaScript
'use strict';
const assert = require('assert');
const sinon = require('sinon');
const path = require('path');
const mock = require('egg-mock');
const utils = require('../../../../utils');
const requestRateLimit = require('../../../../../plugins/rate-limit/app/middleware/requestRateLimit');
describe('test/app/middleware/requestRateLimit.test.js', () => {
before(() => {
this.app = utils.app('apps/jianghu-config');
return this.app.ready();
});
after(async () => {
await utils.deleteFileAndDirByPath(path.join(process.cwd(), 'test/fixtures/apps/jianghu-config/run'));
await utils.deleteFileAndDirByPath(path.join(process.cwd(), 'test/fixtures/apps/jianghu-config/logs'));
this.app.close();
});
describe('Test middleware requestRateLimit, ignored path/whitelist/blacklist', () => {
beforeEach(() => {
this.ctx = this.app.mockContext();
this.ctx.app.config.jianghuConfig.enableRateLimiter = true;
this.nextSpy = sinon.spy();
this.requestRateLimit = requestRateLimit();
});
afterEach(() => {
mock.restore();
});
it('Ignored path, should success', async () => {
this.ctx.request.path = `/${this.app.config.appId}/resource/`;
await this.requestRateLimit(this.ctx, this.nextSpy);
assert.equal(this.nextSpy.callCount, 1);
});
it('Limit number reached, should success', async () => {
this.ctx.app.config.jianghuConfig.rateLimiterWhitelist = [];
this.ctx.app.config.jianghuConfig.rateLimiterBlacklist = [];
this.ctx.request.path = `/${this.app.config.appId}/wp-admin.php/`;
const maxNum = this.ctx.app.config.jianghuConfig.rateLimiterMax;
for (let i = 0; i < maxNum; ++i) {
await this.requestRateLimit(this.ctx, this.nextSpy);
}
assert.rejects(async () => await this.requestRateLimit(this.ctx, this.nextSpy), /request_rate_limit_exceeded/);
});
});
});