mirror of
https://github.com/whyour/qinglong.git
synced 2026-09-21 00:17:47 +08:00
66 lines
1.9 KiB
JavaScript
66 lines
1.9 KiB
JavaScript
const assert = require('node:assert/strict');
|
|
const { test } = require('node:test');
|
|
const {
|
|
WorkerCredentialUnavailableError,
|
|
} = require('@qinglong/runtime-core/worker-credential');
|
|
const {
|
|
PostgresWorkerCredentialRepository,
|
|
} = require('../dist/entrypoints/workerIngress');
|
|
|
|
function row(overrides = {}) {
|
|
return {
|
|
credentialId: 'worker_primary',
|
|
version: '2',
|
|
state: 'active',
|
|
workerId: 'edge-1',
|
|
secretDigest: 'a'.repeat(64),
|
|
createdAtMs: '100',
|
|
notBeforeAtMs: '100',
|
|
expiresAtMs: '1000',
|
|
...overrides,
|
|
};
|
|
}
|
|
|
|
test('resolves only the latest normalized Worker credential', async () => {
|
|
const calls = [];
|
|
const repository = new PostgresWorkerCredentialRepository({
|
|
async query(text, values) {
|
|
calls.push({ text, values });
|
|
return { rows: [row(), row({ version: '1' })] };
|
|
},
|
|
});
|
|
assert.deepEqual(await repository.resolve('worker_primary'), {
|
|
credentialId: 'worker_primary',
|
|
version: 2,
|
|
state: 'active',
|
|
workerId: 'edge-1',
|
|
secretDigest: 'a'.repeat(64),
|
|
createdAtMs: 100,
|
|
notBeforeAtMs: 100,
|
|
expiresAtMs: 1000,
|
|
});
|
|
assert.deepEqual(calls[0].values, ['worker_primary']);
|
|
assert.match(calls[0].text, /ORDER BY version DESC/);
|
|
assert.match(calls[0].text, /LIMIT 2/);
|
|
});
|
|
|
|
test('returns null for absence and fails closed on corrupt or unordered rows', async () => {
|
|
const empty = new PostgresWorkerCredentialRepository({
|
|
async query() { return { rows: [] }; },
|
|
});
|
|
assert.equal(await empty.resolve('worker_primary'), null);
|
|
for (const rows of [
|
|
[row({ secretDigest: 'corrupt' })],
|
|
[row({ version: '1' }), row({ version: '2' })],
|
|
]) {
|
|
const repository = new PostgresWorkerCredentialRepository({
|
|
async query() { return { rows }; },
|
|
});
|
|
await assert.rejects(
|
|
repository.resolve('worker_primary'),
|
|
WorkerCredentialUnavailableError,
|
|
);
|
|
}
|
|
await assert.rejects(empty.resolve('../escape'), TypeError);
|
|
});
|