


























@@ -1,4 +1,4 @@
1-import { mkdtempSync, rmSync } from "node:fs";
1+import { existsSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
22import { readFile } from "node:fs/promises";
33import { tmpdir } from "node:os";
44import path, { win32 } from "node:path";
@@ -73,6 +73,45 @@ describe("telegram user credential IO", () => {
7373});
7474});
757576+it.runIf(process.platform !== "win32")(
77+"waits for timed-out child processes to exit before rejecting",
78+async () => {
79+const dir = makeTempDir("openclaw-telegram-credential-timeout-");
80+const terminatedPath = path.join(dir, "terminated.txt");
81+const scriptPath = path.join(dir, "ignore-term.cjs");
82+writeFileSync(
83+scriptPath,
84+`
85+const fs = require("node:fs");
86+process.on("SIGTERM", () => {
87+ setTimeout(() => {
88+ fs.writeFileSync(process.argv[2], "terminated");
89+ process.exit(0);
90+ }, 75);
91+});
92+setInterval(() => {}, 1000);
93+`,
94+"utf8",
95+);
96+97+const runPromise = runCommand(process.execPath, [scriptPath, terminatedPath], undefined, {
98+timeoutKillGraceMs: 1_000,
99+timeoutMs: 100,
100+});
101+const runError = runPromise.catch((error: unknown) => error);
102+103+try {
104+const error = (await runError) as Error & { code?: string };
105+expect(error).toBeInstanceOf(Error);
106+expect(error.code).toBe("ETIMEDOUT");
107+expect(error.message).toContain("timed out after 100ms");
108+expect(existsSync(terminatedPath)).toBe(true);
109+} finally {
110+await runPromise.catch(() => {});
111+}
112+},
113+);
114+76115it("aborts broker fetches that never return", async () => {
77116let signal: AbortSignal | undefined;
78117await expect(
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。