chore(vendor): import pi 1.3.0
Imported as a linear vendor commit so forge rebases do not replay the upstream root tree. git-subtree-dir: third_party/pi git-subtree-split: 71023aec1546d6d677a65669c5665c0927ce0dd0
This commit is contained in:
8
third_party/pi/packages/codemode/test/fixtures/raw-worker.ts
vendored
Normal file
8
third_party/pi/packages/codemode/test/fixtures/raw-worker.ts
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
/**
|
||||
* Stands in for the real worker in host tests: posts the JSON message (or array of messages) passed
|
||||
* as the script source, so tests can send the host payloads the real prelude never produces.
|
||||
*/
|
||||
import { parentPort, workerData } from "node:worker_threads";
|
||||
|
||||
const messages: unknown = JSON.parse((workerData as { code: string }).code);
|
||||
for (const message of Array.isArray(messages) ? messages : [messages]) parentPort?.postMessage(message);
|
||||
51
third_party/pi/packages/codemode/test/fixtures/worker-process-exit.ts
vendored
Normal file
51
third_party/pi/packages/codemode/test/fixtures/worker-process-exit.ts
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
import { CodemodeSandbox } from "../../src/runtime/host.ts";
|
||||
|
||||
const how = process.argv[2];
|
||||
if (how !== "abort" && how !== "timeout" && how !== "close") throw new Error(`Unknown stop mode: ${how}`);
|
||||
const started = performance.now();
|
||||
process.on("exit", () => {
|
||||
console.log(JSON.stringify({ type: "exit", elapsedMs: performance.now() - started }));
|
||||
});
|
||||
const controller = new AbortController();
|
||||
let timer: ReturnType<typeof setTimeout> | undefined;
|
||||
let workerExited = false;
|
||||
const sandbox = new CodemodeSandbox({
|
||||
memoryLimitBytes: 256 * 1024 * 1024,
|
||||
onWorkerStarted: (exited) => {
|
||||
void exited.then(() => {
|
||||
workerExited = true;
|
||||
});
|
||||
},
|
||||
tools: [
|
||||
{
|
||||
name: "ready",
|
||||
execute: () => {
|
||||
if (how !== "timeout") {
|
||||
timer = setTimeout(() => {
|
||||
if (how === "abort") controller.abort();
|
||||
else void sandbox.close();
|
||||
}, 100);
|
||||
}
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
try {
|
||||
const result = await sandbox.execute(
|
||||
"await tools.ready(); return 'a'.repeat(300000).indexOf('a'.repeat(10000) + 'b')",
|
||||
{ signal: controller.signal, timeoutMs: how === "timeout" ? 300 : Number.POSITIVE_INFINITY },
|
||||
);
|
||||
if (result.ok) throw new Error("The script completed instead of being cancelled");
|
||||
await sandbox.close();
|
||||
console.log(
|
||||
JSON.stringify({
|
||||
type: "result",
|
||||
kind: result.error.kind,
|
||||
elapsedMs: performance.now() - started,
|
||||
workerExited,
|
||||
}),
|
||||
);
|
||||
} finally {
|
||||
clearTimeout(timer);
|
||||
await sandbox.close();
|
||||
}
|
||||
Reference in New Issue
Block a user