Files
ln-bi/src/server/source-telemetry.test.ts
T

59 lines
2.1 KiB
TypeScript

import assert from 'node:assert/strict';
import test from 'node:test';
import {
clearDataSourceTelemetry,
getDataSourceTelemetry,
observeDataSource,
recordDataSourceOutcome,
} from './source-telemetry.js';
test('reports unobserved sources without treating them as failures', () => {
clearDataSourceTelemetry();
const report = getDataSourceTelemetry(new Date('2026-08-07T08:00:00Z'));
assert.ok(report.sources.every(source => source.state === 'unobserved'));
assert.ok(report.sources.every(source => source.failureRate === null));
});
test('publishes rolling outcomes and last success/failure timestamps', () => {
clearDataSourceTelemetry();
recordDataSourceOutcome('oneOsMileage', true, 1_000);
recordDataSourceOutcome('oneOsMileage', false, 2_000);
const source = getDataSourceTelemetry().sources.find(item => item.source === 'oneOsMileage');
assert.deepEqual(source && {
state: source.state,
attempts: source.attempts,
failures: source.failures,
failureRate: source.failureRate,
lastSuccessAt: source.lastSuccessAt,
lastFailureAt: source.lastFailureAt,
}, {
state: 'failing',
attempts: 2,
failures: 1,
failureRate: 0.5,
lastSuccessAt: '1970-01-01T00:00:01.000Z',
lastFailureAt: '1970-01-01T00:00:02.000Z',
});
});
test('observes final operation outcomes without retaining error details', async () => {
clearDataSourceTelemetry();
await assert.rejects(observeDataSource('hydrogenDatabase', async () => {
throw new Error('sensitive connection detail');
}));
const serialized = JSON.stringify(getDataSourceTelemetry());
assert.equal(serialized.includes('sensitive connection detail'), false);
});
test('keeps only the latest 100 outcomes', () => {
clearDataSourceTelemetry();
recordDataSourceOutcome('etcDatabase', false, 1);
for (let index = 0; index < 100; index += 1) {
recordDataSourceOutcome('etcDatabase', true, index + 2);
}
const source = getDataSourceTelemetry().sources.find(item => item.source === 'etcDatabase');
assert.equal(source?.attempts, 100);
assert.equal(source?.failures, 0);
assert.equal(source?.failureRate, 0);
});