Files
memind/release-gate/runner.test.mjs
T
john 291178d2c3
Memind CI / Test, build, and release guards (push) Failing after 9m20s
chore: stop tracking generated runtime artifacts
2026-07-27 09:08:55 +08:00

75 lines
2.2 KiB
JavaScript

import assert from 'node:assert/strict';
import test from 'node:test';
import {
filterGeneratedWorktreeStatus,
parseRunnerArgs,
runSuitesWithConcurrency,
runWithConcurrency,
} from './runner.mjs';
test('runner accepts a bounded suite concurrency and rejects unsafe values', () => {
assert.equal(
parseRunnerArgs(['node', 'runner', '--suite-concurrency', '3']).suiteConcurrency,
3,
);
assert.throws(
() => parseRunnerArgs(['node', 'runner', '--suite-concurrency', '0']),
/between 1 and 16/,
);
assert.throws(
() => parseRunnerArgs(['node', 'runner', '--suite-concurrency', '17']),
/between 1 and 16/,
);
});
test('runWithConcurrency preserves result order and never exceeds its worker budget', async () => {
let active = 0;
let peak = 0;
const results = await runWithConcurrency([40, 5, 20, 1], 2, async (delay, index) => {
active += 1;
peak = Math.max(peak, active);
await new Promise((resolve) => setTimeout(resolve, delay));
active -= 1;
return `result-${index}`;
});
assert.deepEqual(results, ['result-0', 'result-1', 'result-2', 'result-3']);
assert.equal(peak, 2);
});
test('exclusive suites finish before parallel suites start', async () => {
const events = [];
const results = await runSuitesWithConcurrency(
[
{ id: 'mutating', exclusive: true },
{ id: 'parallel-a' },
{ id: 'parallel-b' },
],
2,
async (suite) => {
events.push(`start:${suite.id}`);
await new Promise((resolve) => setTimeout(resolve, 5));
events.push(`end:${suite.id}`);
return suite.id;
},
);
assert.deepEqual(results, ['mutating', 'parallel-a', 'parallel-b']);
assert.ok(events.indexOf('end:mutating') < events.indexOf('start:parallel-a'));
assert.ok(events.indexOf('end:mutating') < events.indexOf('start:parallel-b'));
});
test('worktree cleanliness ignores release-gate output but keeps runtime changes', () => {
const status = [
'?? .release-gate/ea07f6f/report.json',
' D .runtime/portal/public/plaza-covers/cover.jpg',
' M release-gate/runner.mjs',
].join('\n');
assert.equal(
filterGeneratedWorktreeStatus(status),
[
' D .runtime/portal/public/plaza-covers/cover.jpg',
' M release-gate/runner.mjs',
].join('\n'),
);
});