import type { ChildProcess } from "node:child_process"; import { EventEmitter } from "node:events"; import { PassThrough } from "node:stream"; import { describe, expect, it, vi } from "vitest"; import { createRestartIterationHook } from "./restart-recovery.js"; import { spawnWithFallback } from "./spawn-utils.js";
function createStubChild() { const child = new EventEmitter() as ChildProcess;
child.stdin = new PassThrough() as ChildProcess["stdin"];
child.stdout = new PassThrough() as ChildProcess["stdout"];
child.stderr = new PassThrough() as ChildProcess["stderr"];
Object.defineProperty(child, "pid", { value: 1234, configurable: true });
Object.defineProperty(child, "killed", { value: false, configurable: true, writable: true });
child.kill = vi.fn(() => true) as ChildProcess["kill"];
queueMicrotask(() => {
child.emit("spawn");
}); return child;
}
describe("spawnWithFallback", () => {
it("retries on EBADF using fallback options", async () => { const spawnMock = vi
.fn()
.mockImplementationOnce(() => { const err = new Error("spawn EBADF");
(err as NodeJS.ErrnoException).code = "EBADF"; throw err;
})
.mockImplementationOnce(() => createStubChild());
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.