aclatraz
Version:
Simple dependency-free package for ACL. It can handle hundreds of roles easily.
113 lines (112 loc) • 5.13 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const perf_hooks_1 = require("perf_hooks");
const Aclatraz_1 = require("./Aclatraz");
describe('Aclatraz performance test', () => {
test('generate permission code for 10,000 rules', () => {
const rules = [];
for (let i = 1; i <= 10000; i++) {
rules.push({ id: i, slug: `rule${i}` });
}
const acl = new Aclatraz_1.Aclatraz(rules);
const ruleIds = Array.from({ length: 10000 }, (_, i) => i + 1);
const start = perf_hooks_1.performance.now();
const code = acl.generateAclCode(ruleIds);
const end = perf_hooks_1.performance.now();
console.log(`Generated code length: ${code.length}`);
console.log(`Time taken: ${(end - start).toFixed(2)} ms`);
expect(typeof code).toBe('string');
});
test('grantPermission 100,000 times', () => {
const rules = [];
for (let i = 1; i <= 100; i++) {
rules.push({ id: i, slug: `rule${i}` });
}
const acl = new Aclatraz_1.Aclatraz(rules);
const ruleIds = Array.from({ length: 100 }, (_, i) => i + 1);
const start = perf_hooks_1.performance.now();
for (let i = 0; i < 100000; i++) {
acl.grantPermission('', ruleIds);
}
const end = perf_hooks_1.performance.now();
console.log(`grantPermission 100,000 times took: ${(end - start).toFixed(2)} ms`);
expect(true).toBe(true);
});
test('verify (decode) 100,000 times', () => {
const rules = [];
for (let i = 1; i <= 100; i++) {
rules.push({ id: i, slug: `rule${i}` });
}
const acl = new Aclatraz_1.Aclatraz(rules);
const ruleIds = Array.from({ length: 100 }, (_, i) => i + 1);
const permission = acl.grantPermission('', ruleIds);
const start = perf_hooks_1.performance.now();
for (let i = 0; i < 100000; i++) {
acl.verify(permission, 50);
}
const end = perf_hooks_1.performance.now();
console.log(`verify (decode) 100,000 times took: ${(end - start).toFixed(2)} ms`);
expect(true).toBe(true);
});
test('revokePermission 100,000 times', () => {
const rules = [];
for (let i = 1; i <= 100; i++) {
rules.push({ id: i, slug: `rule${i}` });
}
const acl = new Aclatraz_1.Aclatraz(rules);
const ruleIds = Array.from({ length: 100 }, (_, i) => i + 1);
const permission = acl.grantPermission('', ruleIds);
const start = perf_hooks_1.performance.now();
for (let i = 0; i < 100000; i++) {
acl.revokePermission(permission, [50]);
}
const end = perf_hooks_1.performance.now();
console.log(`revokePermission 100,000 times took: ${(end - start).toFixed(2)} ms`);
expect(true).toBe(true);
});
test('grantPermission with 100,000 rules', () => {
const rules = [];
for (let i = 1; i <= 100000; i++) {
rules.push({ id: i, slug: `rule${i}` });
}
const acl = new Aclatraz_1.Aclatraz(rules);
const ruleIds = Array.from({ length: 100000 }, (_, i) => i + 1);
const start = perf_hooks_1.performance.now();
const permission = acl.grantPermission('', ruleIds);
const end = perf_hooks_1.performance.now();
console.log(`grantPermission with 100,000 rules took: ${(end - start).toFixed(2)} ms, token length: ${permission.length}`);
expect(typeof permission).toBe('string');
});
test('verify (decode) with 100,000 rules', () => {
const rules = [];
for (let i = 1; i <= 100000; i++) {
rules.push({ id: i, slug: `rule${i}` });
}
const acl = new Aclatraz_1.Aclatraz(rules);
const ruleIds = Array.from({ length: 100000 }, (_, i) => i + 1);
const permission = acl.grantPermission('', ruleIds);
const start = perf_hooks_1.performance.now();
let count = 0;
for (let i = 1; i <= 100000; i += 10000) {
if (acl.verify(permission, i))
count++;
}
const end = perf_hooks_1.performance.now();
console.log(`verify (decode) with 100,000 rules (checked every 10,000th): ${(end - start).toFixed(2)} ms, found: ${count}`);
expect(count).toBe(10);
});
test('revokePermission with 100,000 rules', () => {
const rules = [];
for (let i = 1; i <= 100000; i++) {
rules.push({ id: i, slug: `rule${i}` });
}
const acl = new Aclatraz_1.Aclatraz(rules);
const ruleIds = Array.from({ length: 100000 }, (_, i) => i + 1);
const permission = acl.grantPermission('', ruleIds);
const start = perf_hooks_1.performance.now();
const revoked = acl.revokePermission(permission, [50000, 99999, 100000]);
const end = perf_hooks_1.performance.now();
console.log(`revokePermission with 100,000 rules took: ${(end - start).toFixed(2)} ms, token length: ${revoked.length}`);
expect(typeof revoked).toBe('string');
});
});
;