GitNexus/gitnexus/test/unit/worker-pool-options.test.ts
Gergő Magyar 38ccf7ceb1
fix: recover worker parse stalls (#1121)
* fix(ingestion): recover worker parse stalls

Made-with: Cursor

* test(ingestion): cover worker timeout controls

Made-with: Cursor

* docs: document analyze worker timeout controls

Made-with: Cursor

* fix(ingestion): fail fast after worker pool hard failure

Made-with: Cursor

* test(ingestion): stabilize worker stall recovery tests

Made-with: Cursor

---------

Co-authored-by: GitNexus Maintainer <maintainer@gitnexus.local>
2026-04-27 20:07:03 +01:00

44 lines
1.5 KiB
TypeScript

import { afterEach, describe, expect, it } from 'vitest';
import { resolveWorkerPoolOptions } from '../../src/core/ingestion/workers/worker-pool.js';
const ORIGINAL_TIMEOUT = process.env.GITNEXUS_WORKER_SUB_BATCH_TIMEOUT_MS;
const ORIGINAL_MAX_BYTES = process.env.GITNEXUS_WORKER_SUB_BATCH_MAX_BYTES;
describe('resolveWorkerPoolOptions', () => {
afterEach(() => {
if (ORIGINAL_TIMEOUT === undefined) {
delete process.env.GITNEXUS_WORKER_SUB_BATCH_TIMEOUT_MS;
} else {
process.env.GITNEXUS_WORKER_SUB_BATCH_TIMEOUT_MS = ORIGINAL_TIMEOUT;
}
if (ORIGINAL_MAX_BYTES === undefined) {
delete process.env.GITNEXUS_WORKER_SUB_BATCH_MAX_BYTES;
} else {
process.env.GITNEXUS_WORKER_SUB_BATCH_MAX_BYTES = ORIGINAL_MAX_BYTES;
}
});
it('reads worker timeout and byte budget from environment variables', () => {
process.env.GITNEXUS_WORKER_SUB_BATCH_TIMEOUT_MS = '5000';
process.env.GITNEXUS_WORKER_SUB_BATCH_MAX_BYTES = '4096';
const options = resolveWorkerPoolOptions();
expect(options.subBatchIdleTimeoutMs).toBe(5000);
expect(options.subBatchMaxBytes).toBe(4096);
});
it('prefers explicit options over environment variables', () => {
process.env.GITNEXUS_WORKER_SUB_BATCH_TIMEOUT_MS = '5000';
process.env.GITNEXUS_WORKER_SUB_BATCH_MAX_BYTES = '4096';
const options = resolveWorkerPoolOptions({
subBatchIdleTimeoutMs: 7000,
subBatchMaxBytes: 8192,
});
expect(options.subBatchIdleTimeoutMs).toBe(7000);
expect(options.subBatchMaxBytes).toBe(8192);
});
});