mirror of
https://github.com/whyour/qinglong.git
synced 2026-09-21 01:32:44 +08:00
feat(ql3): cut alpha.1 candidate milestone
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
const assert = require('node:assert/strict');
|
||||
const test = require('node:test');
|
||||
|
||||
const {
|
||||
PostgresApiCredentialPepperReferenceRepository,
|
||||
} = require('../dist/security/apiCredentialPepperReferenceRepository.js');
|
||||
|
||||
test('returns bounded current pepper references using database time', async () => {
|
||||
const calls = [];
|
||||
const repository = new PostgresApiCredentialPepperReferenceRepository({
|
||||
async query(sql, parameters) {
|
||||
calls.push({ sql, parameters });
|
||||
return {
|
||||
rows: [
|
||||
{ observedAtMs: '1000', credentialId: 'credential-a' },
|
||||
{ observedAtMs: '1000', credentialId: 'credential-b' },
|
||||
{ observedAtMs: '1000', credentialId: 'credential-c' },
|
||||
],
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
assert.deepEqual(await repository.inspect('legacy-v1', 2), {
|
||||
pepperKeyId: 'legacy-v1',
|
||||
observedAtMs: 1000,
|
||||
credentialIds: ['credential-a', 'credential-b'],
|
||||
hasMore: true,
|
||||
});
|
||||
assert.deepEqual(calls[0].parameters, ['legacy-v1', 3]);
|
||||
assert.match(calls[0].sql, /statement_timestamp\(\)/);
|
||||
assert.match(calls[0].sql, /newer\.version > credential\.version/);
|
||||
});
|
||||
|
||||
test('represents an empty reference set without losing database time', async () => {
|
||||
const repository = new PostgresApiCredentialPepperReferenceRepository({
|
||||
async query() {
|
||||
return { rows: [{ observedAtMs: 1000, credentialId: null }] };
|
||||
},
|
||||
});
|
||||
assert.deepEqual(await repository.inspect('retired-v1'), {
|
||||
pepperKeyId: 'retired-v1',
|
||||
observedAtMs: 1000,
|
||||
credentialIds: [],
|
||||
hasMore: false,
|
||||
});
|
||||
});
|
||||
|
||||
test('fails closed on invalid input and malformed database rows', async () => {
|
||||
const repository = new PostgresApiCredentialPepperReferenceRepository({
|
||||
async query() {
|
||||
return { rows: [{ observedAtMs: 'invalid', credentialId: null }] };
|
||||
},
|
||||
});
|
||||
await assert.rejects(() => repository.inspect('legacy-v1'), /unavailable/);
|
||||
await assert.rejects(() => repository.inspect('legacy-v1', 65));
|
||||
await assert.rejects(() => repository.inspect('bad key'));
|
||||
|
||||
for (const credentialId of [42, null, 'bad credential']) {
|
||||
const malformedRepository =
|
||||
new PostgresApiCredentialPepperReferenceRepository({
|
||||
async query() {
|
||||
return {
|
||||
rows: [
|
||||
{ observedAtMs: 1000, credentialId: 'credential-a' },
|
||||
{ observedAtMs: 1000, credentialId },
|
||||
],
|
||||
};
|
||||
},
|
||||
});
|
||||
await assert.rejects(
|
||||
() => malformedRepository.inspect('legacy-v1'),
|
||||
/unavailable/,
|
||||
);
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user