blacklist with automatic garbage collector
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Timo Hocker
2022-09-09 15:49:53 +02:00
parent 31f739d4b8
commit 64d4f00629
9 changed files with 153 additions and 51 deletions

View File

@ -6,10 +6,15 @@
*/
import blacklist, { Blacklist } from '../../lib/Blacklist';
import { generate_token_id, parse_token_id } from '../../lib/token_id';
import { clock_finalize, clock_setup } from '../Helper';
// eslint-disable-next-line max-lines-per-function
describe ('blacklist', () => {
const token1 = generate_token_id (new Date (Date.now () + 3600000));
const token2 = generate_token_id (new Date (Date.now () + 3600000));
const token3 = generate_token_id (new Date (Date.now () + 3600000));
beforeAll (() => {
clock_setup ();
});
@ -19,77 +24,88 @@ describe ('blacklist', () => {
});
it ('should validate any string', async () => {
expect (await blacklist.is_valid ('foo'))
expect (await blacklist.is_valid (token1))
.toBeTrue ();
expect (await blacklist.is_valid ('bar'))
expect (await blacklist.is_valid (token2))
.toBeTrue ();
expect (await blacklist.is_valid ('baz'))
expect (await blacklist.is_valid (token3))
.toBeTrue ();
});
it ('should blacklist strings', async () => {
await blacklist.add_signature ('foo');
await blacklist.add_signature ('bar');
expect (await blacklist.is_valid ('foo'))
await blacklist.add_signature (token1);
await blacklist.add_signature (token2);
expect (await blacklist.is_valid (token1))
.toBeFalse ();
expect (await blacklist.is_valid ('bar'))
expect (await blacklist.is_valid (token2))
.toBeFalse ();
expect (await blacklist.is_valid ('baz'))
expect (await blacklist.is_valid (token3))
.toBeTrue ();
});
it ('should remove one string', async () => {
await blacklist.remove_signature ('foo');
expect (await blacklist.is_valid ('foo'))
await blacklist.remove_signature (token1);
expect (await blacklist.is_valid (token1))
.toBeTrue ();
expect (await blacklist.is_valid ('bar'))
expect (await blacklist.is_valid (token2))
.toBeFalse ();
expect (await blacklist.is_valid ('baz'))
expect (await blacklist.is_valid (token3))
.toBeTrue ();
});
it ('should clear after time', async () => {
jasmine.clock ()
.tick (5000);
await blacklist.add_signature ('baz');
await blacklist.add_signature (token3);
await blacklist.clear (Date.now () - 100);
expect (await blacklist.is_valid ('foo'))
expect (await blacklist.is_valid (token1))
.toBeTrue ();
expect (await blacklist.is_valid ('bar'))
expect (await blacklist.is_valid (token2))
.toBeTrue ();
expect (await blacklist.is_valid ('baz'))
expect (await blacklist.is_valid (token3))
.toBeFalse ();
});
it ('should clear all', async () => {
await blacklist.add_signature ('foo');
await blacklist.add_signature ('bar');
await blacklist.add_signature ('baz');
expect (await blacklist.is_valid ('foo'))
await blacklist.add_signature (token1);
await blacklist.add_signature (token2);
await blacklist.add_signature (token3);
expect (await blacklist.is_valid (token1))
.toBeFalse ();
expect (await blacklist.is_valid ('bar'))
expect (await blacklist.is_valid (token2))
.toBeFalse ();
expect (await blacklist.is_valid ('baz'))
expect (await blacklist.is_valid (token3))
.toBeFalse ();
await blacklist.clear ();
expect (await blacklist.is_valid ('foo'))
expect (await blacklist.is_valid (token1))
.toBeTrue ();
expect (await blacklist.is_valid ('bar'))
expect (await blacklist.is_valid (token2))
.toBeTrue ();
expect (await blacklist.is_valid ('baz'))
expect (await blacklist.is_valid (token3))
.toBeTrue ();
});
it ('should export and import data', async () => {
await blacklist.add_signature ('baz');
const exp = blacklist.export_blacklist ();
const time = new Date;
const token = generate_token_id (time);
await blacklist.add_signature (token);
// eslint-disable-next-line dot-notation
expect (blacklist['_signatures'])
.toEqual (exp);
.toEqual ([
{
token_id: token,
iat: time.getTime (),
valid_until: time
}
]);
const exp = blacklist.export_blacklist ();
expect (exp)
.toEqual ([ { token_id: token, iat: time.getTime () } ]);
const bl2 = (new Blacklist);
bl2.import_blacklist (exp);
// eslint-disable-next-line dot-notation
expect (bl2['_signatures'])
.toEqual (exp);
// eslint-disable-next-line dot-notation
.toEqual (blacklist['_signatures']);
});
});

View File

@ -192,7 +192,7 @@ describe ('gateway', () => {
expect (resp.statusCode)
.toEqual (200);
const blacklisted = blacklist.export_blacklist ()
.map ((v) => v.hash);
.map ((v) => v.token_id);
expect (blacklisted)
.toContain (token.id);
expect (blacklisted)

13
test/spec/token_id.ts Normal file
View File

@ -0,0 +1,13 @@
import { generate_token_id, parse_token_id } from '../../lib/token_id';
describe ('token_id', () => {
it ('should always generate valid tokens', () => {
for (let i = 0; i < 1000; i++) {
const date = new Date;
const token_id = generate_token_id (new Date);
const parsed = parse_token_id (token_id);
expect (parsed.valid_until)
.toEqual (date);
}
});
});