mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-05-04 00:41:33 -07:00
6607b06437
- Ignore background stats daemons during regular app startup - Split standalone grammar endings before applying annotations - Clear helper-span annotations for auxiliary-only tokens
87 lines
2.6 KiB
TypeScript
87 lines
2.6 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import { createEnsureStatsServerUrlHandler } from './stats-server-routing';
|
|
|
|
function createHarness(options?: {
|
|
state?: { pid: number; port: number; startedAtMs: number } | null;
|
|
processAlive?: boolean;
|
|
localServerStarted?: boolean;
|
|
}) {
|
|
const calls: string[] = [];
|
|
let localServerStarted = options?.localServerStarted ?? false;
|
|
const handler = createEnsureStatsServerUrlHandler({
|
|
currentPid: 100,
|
|
readBackgroundState: () => {
|
|
calls.push('readBackgroundState');
|
|
return options?.state ?? null;
|
|
},
|
|
removeBackgroundState: () => {
|
|
calls.push('removeBackgroundState');
|
|
},
|
|
isProcessAlive: () => {
|
|
calls.push('isProcessAlive');
|
|
return options?.processAlive ?? true;
|
|
},
|
|
hasLocalStatsServer: () => localServerStarted,
|
|
startLocalStatsServer: () => {
|
|
calls.push('startLocalStatsServer');
|
|
localServerStarted = true;
|
|
},
|
|
getConfiguredPort: () => 6969,
|
|
});
|
|
|
|
return {
|
|
calls,
|
|
handler,
|
|
};
|
|
}
|
|
|
|
test('stats server routing ignores a live background daemon from another process', () => {
|
|
const { calls, handler } = createHarness({
|
|
state: { pid: 200, port: 7979, startedAtMs: 1 },
|
|
processAlive: true,
|
|
});
|
|
|
|
assert.deepEqual(handler(), { url: 'http://127.0.0.1:6969', source: 'local' });
|
|
assert.deepEqual(calls, ['readBackgroundState', 'isProcessAlive', 'startLocalStatsServer']);
|
|
});
|
|
|
|
test('stats server routing clears dead daemon state and starts local server', () => {
|
|
const { calls, handler } = createHarness({
|
|
state: { pid: 200, port: 7979, startedAtMs: 1 },
|
|
processAlive: false,
|
|
});
|
|
|
|
assert.deepEqual(handler(), { url: 'http://127.0.0.1:6969', source: 'local' });
|
|
assert.deepEqual(calls, [
|
|
'readBackgroundState',
|
|
'isProcessAlive',
|
|
'removeBackgroundState',
|
|
'startLocalStatsServer',
|
|
]);
|
|
});
|
|
|
|
test('stats server routing clears self-owned stale state and starts local server', () => {
|
|
const { calls, handler } = createHarness({
|
|
state: { pid: 100, port: 7979, startedAtMs: 1 },
|
|
processAlive: true,
|
|
});
|
|
|
|
assert.deepEqual(handler(), { url: 'http://127.0.0.1:6969', source: 'local' });
|
|
assert.deepEqual(calls, [
|
|
'readBackgroundState',
|
|
'removeBackgroundState',
|
|
'startLocalStatsServer',
|
|
]);
|
|
});
|
|
|
|
test('stats server routing reuses a started local stats server', () => {
|
|
const { calls, handler } = createHarness({
|
|
state: null,
|
|
localServerStarted: true,
|
|
});
|
|
|
|
assert.deepEqual(handler(), { url: 'http://127.0.0.1:6969', source: 'local' });
|
|
assert.deepEqual(calls, ['readBackgroundState', 'removeBackgroundState']);
|
|
});
|