mirror of
https://github.com/garrytan/gstack.git
synced 2026-09-22 12:50:50 +02:00
v1.87.5.0 perf: remove idle waits from tests and CI planning (#2897)
* v1.87.5.0 perf: remove idle waits from tests and CI planning * fix: settle split PTY redraws before routing input * docs: record final burst-safe test benchmarks * fix: keep cold-setup snapshot metadata dependency-free * fix: avoid early-reader pipe races in artifact URL parsing * fix: preserve safety matches for multiline command payloads * fix: recognize concurrent CSO publication removal * test: preload the UI design-review target before invocation * docs: record validation blocker fixes * fix: bind plan observer rejection to the invoked command * fix: count only native design decisions in the UI gate * docs: clarify UI-positive eval evidence requirements * test: recognize native UI decisions without weakening finding counts * test: decouple native UI evidence from question punctuation * test: recognize concrete native UI decisions independently of prose format * fix: retain failed eval logs under the hidden CI cache * test: await telemetry completion instead of racing disk writes
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
* they're kept in a separate file to keep the in-process suite fast.
|
||||
*/
|
||||
|
||||
import { afterEach, beforeEach, describe, expect, test } from "bun:test";
|
||||
import { afterEach, beforeEach, describe, expect, spyOn, test } from "bun:test";
|
||||
import { spawn } from "child_process";
|
||||
import fs from "fs";
|
||||
import os from "os";
|
||||
@@ -95,6 +95,22 @@ describe("daemon-state helpers", () => {
|
||||
test("verifyIdentity returns false for dead pids", async () => {
|
||||
expect(verifyIdentity(999_999_999, CMDLINE_MARKER)).toBe(false);
|
||||
});
|
||||
|
||||
test.each(["SIGTERM", "SIGKILL"] as const)("fixture cleanup does not signal an already-exited %s child", async (signal) => {
|
||||
const d = await spawn1();
|
||||
const exited = new Promise<void>((resolve) => d.proc.once("exit", () => resolve()));
|
||||
d.proc.kill(signal);
|
||||
await exited;
|
||||
expect(isProcessAlive(d.proc.pid!)).toBe(false);
|
||||
|
||||
const kill = spyOn(d.proc, "kill");
|
||||
try {
|
||||
await d.stop();
|
||||
expect(kill).not.toHaveBeenCalled();
|
||||
} finally {
|
||||
kill.mockRestore();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// ─── ensureDaemon ────────────────────────────────────────────────
|
||||
|
||||
@@ -115,9 +115,14 @@ export async function spawnDaemonForTest(
|
||||
port,
|
||||
stateFile,
|
||||
stop: async () => {
|
||||
proc.kill("SIGTERM");
|
||||
if (proc.exitCode !== null || proc.signalCode !== null) return;
|
||||
await new Promise<void>((r) => {
|
||||
const onExit = () => {
|
||||
clearTimeout(t);
|
||||
r();
|
||||
};
|
||||
const t = setTimeout(() => {
|
||||
proc.removeListener("exit", onExit);
|
||||
try {
|
||||
proc.kill("SIGKILL");
|
||||
} catch {
|
||||
@@ -125,10 +130,8 @@ export async function spawnDaemonForTest(
|
||||
}
|
||||
r();
|
||||
}, 2000);
|
||||
proc.on("exit", () => {
|
||||
clearTimeout(t);
|
||||
r();
|
||||
});
|
||||
proc.once("exit", onExit);
|
||||
proc.kill("SIGTERM");
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user