mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-16 11:52:26 +03:00
Chains `npm run test:unit:serial` onto the plain `npm test` script, so the quarantined serial suite is no longer skipped when contributors run `npm test` (#13286). The existing `test-serial-quarantine` guard now covers `test` too. Validated in one consolidated batch of this series (37 PRs boarded together on `release/v3.8.51`): `typecheck:core`, `check:open-sse-typecheck` and `check:dashboard-typecheck` clean; ESLint clean on every changed file; file-size, complexity, cognitive-complexity, changelog-integrity, docs-counts, docs-sync and migration-numbering gates green (only the pre-existing `open-sse/utils/stream.ts` file-size red remains, inherited from the base); 3,743 focused `node:test` cases plus 34 vitest cases green. Thanks @KooshaPari!
73 lines
3.5 KiB
TypeScript
73 lines
3.5 KiB
TypeScript
import { test } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { readFileSync, readdirSync } from "node:fs";
|
|
import { fileURLToPath } from "node:url";
|
|
import path from "node:path";
|
|
|
|
// Quarentena de flakes de concorrência (plano melhorias v3.8.46, P0.3).
|
|
// Os arquivos em tests/unit/serial/ falham sob contenção de CPU (--test-concurrency>1
|
|
// com a suíte inteira) mas passam isolados — classe glm-3580 / quota-division /
|
|
// provider-health-autopilot, que custava re-runs de ~28min por rodada de CI.
|
|
// Este guard garante que a quarentena continua ligada em TODOS os runners.
|
|
|
|
const ROOT = path.join(path.dirname(fileURLToPath(import.meta.url)), "../..");
|
|
const pkg = JSON.parse(readFileSync(path.join(ROOT, "package.json"), "utf8"));
|
|
const scripts: Record<string, string> = pkg.scripts;
|
|
|
|
const SERIAL_GLOB = 'tests/unit/serial/**/*.test.ts';
|
|
|
|
test("test:unit:serial existe e roda o diretório de quarentena com concurrency=1", () => {
|
|
const s = scripts["test:unit:serial"];
|
|
assert.ok(s, "script test:unit:serial deve existir");
|
|
assert.ok(s.includes("--test-concurrency=1"), "quarentena deve rodar serial");
|
|
assert.ok(s.includes(SERIAL_GLOB), "quarentena deve apontar para tests/unit/serial/");
|
|
});
|
|
|
|
test("todos os runners paralelos terminam com o passo serial", () => {
|
|
for (const key of ["test", "test:unit", "test:unit:ci", "test:unit:fast", "test:coverage:runner"]) {
|
|
assert.ok(
|
|
scripts[key].endsWith("&& npm run test:unit:serial"),
|
|
`${key} deve encadear o passo serial no fim`
|
|
);
|
|
}
|
|
for (const [key, shard] of [
|
|
["test:unit:ci:shard", "$TEST_SHARD"],
|
|
["test:unit:shard:1", "1/2"],
|
|
["test:unit:shard:2", "2/2"],
|
|
] as const) {
|
|
const s = scripts[key];
|
|
const serialPart = s.slice(s.lastIndexOf("&&"));
|
|
assert.ok(serialPart.includes("--test-concurrency=1"), `${key}: passo serial ausente`);
|
|
assert.ok(
|
|
serialPart.includes(`--test-shard=${shard}`),
|
|
`${key}: o passo serial deve ser SHARDADO (${shard}) — sem isso os dois shards rodam ` +
|
|
`os mesmos arquivos ao mesmo tempo e recriam a colisão que a quarentena elimina`
|
|
);
|
|
assert.ok(serialPart.includes(SERIAL_GLOB), `${key}: glob da quarentena ausente`);
|
|
}
|
|
});
|
|
|
|
test("os globs paralelos NÃO capturam tests/unit/serial/ (sem dupla execução)", () => {
|
|
const parallel = scripts["test:unit"].split("&& npm run test:unit:serial")[0];
|
|
assert.ok(!parallel.includes("serial"), "parte paralela não deve referenciar serial/");
|
|
// o glob de subdiretórios é uma brace-list explícita — 'serial' não pode entrar nela
|
|
const braceList = parallel.match(/tests\/unit\/\{([^}]+)\}/)?.[1] ?? "";
|
|
assert.ok(!braceList.split(",").includes("serial"), "brace-list não deve conter 'serial'");
|
|
});
|
|
|
|
test("a quarentena contém os 3 flakes conhecidos e os gates de discovery/TIA a conhecem", () => {
|
|
const files = readdirSync(path.join(ROOT, "tests/unit/serial"));
|
|
for (const f of [
|
|
"glm-coding-plan-monthly-3580.test.ts",
|
|
"quota-division-blocks.test.ts",
|
|
"provider-health-autopilot.test.ts",
|
|
"combo-health-autopilot.test.ts",
|
|
]) {
|
|
assert.ok(files.includes(f), `${f} deve estar na quarentena`);
|
|
}
|
|
const discovery = readFileSync(path.join(ROOT, "scripts/check/check-test-discovery.mjs"), "utf8");
|
|
assert.ok(discovery.includes(SERIAL_GLOB), "check-test-discovery deve listar o glob serial");
|
|
const tia = readFileSync(path.join(ROOT, "scripts/quality/build-test-impact-map.mjs"), "utf8");
|
|
assert.ok(tia.includes(SERIAL_GLOB), "build-test-impact-map deve listar o glob serial");
|
|
});
|