fix(engine): lazy-promisify execFile in psnr so partial child_process mocks don't crash at import

This commit is contained in:
Vance Ingalls
2026-07-23 17:57:15 -07:00
parent 92ffd0476d
commit 4889b779c9
2 changed files with 19 additions and 2 deletions
+14
View File
@@ -123,6 +123,20 @@ vi.mock("../telemetry/config.js", () => ({
configState.cache = { ...configState.disk }; configState.cache = { ...configState.disk };
return { ...configState.disk }; return { ...configState.disk };
}), }),
recordRecentRender: vi.fn((id: string, ok: boolean) => {
// Mirrors the real ring update (readConfigFresh → append, cap 5 → write)
// against the mock's disk state, so a render's recent-renders write is
// modeled like every other config mutation here. Fixed timestamp keeps it
// deterministic (tests never assert on `at`).
const disk = configState.disk as Record<string, unknown>;
const ring = [
...((disk.recentRenders as unknown[]) ?? []),
{ id, at: "2026-01-01T00:00:00Z", ok },
];
const next = { ...disk, recentRenders: ring.slice(-5) };
configState.disk = next;
configState.cache = { ...next };
}),
writeConfig: vi.fn((config: Record<string, unknown>) => { writeConfig: vi.fn((config: Record<string, unknown>) => {
configState.writeConfigCalls.push({ ...config }); configState.writeConfigCalls.push({ ...config });
if (configState.failWrites > 0) { if (configState.failWrites > 0) {
+5 -2
View File
@@ -5,14 +5,17 @@ import { join } from "node:path";
import { promisify } from "node:util"; import { promisify } from "node:util";
import { getFfmpegBinary } from "./ffmpegBinaries.js"; import { getFfmpegBinary } from "./ffmpegBinaries.js";
const execFileP = promisify(execFile);
/** /**
* PSNR (average, dB) between two same-dimension encoded images via ffmpeg. * PSNR (average, dB) between two same-dimension encoded images via ffmpeg.
* Infinity means bit-identical pixels. Single source of truth for every * Infinity means bit-identical pixels. Single source of truth for every
* drawElement self-verify comparison (streaming drain + parallel disk path). * drawElement self-verify comparison (streaming drain + parallel disk path).
*/ */
export async function psnrDb(a: Buffer, b: Buffer): Promise<number> { export async function psnrDb(a: Buffer, b: Buffer): Promise<number> {
// promisify(execFile) lazily, not at module load: this module is in the
// engine's parallel-capture import chain, and a top-level call to a builtin
// crashes any downstream test that partially mocks node:child_process
// without an execFile export (vitest surfaces it as a load-time error).
const execFileP = promisify(execFile);
const dir = await mkdtemp(join(tmpdir(), "hf-de-verify-")); const dir = await mkdtemp(join(tmpdir(), "hf-de-verify-"));
try { try {
const pa = join(dir, "a.jpg"); const pa = join(dir, "a.jpg");