acpx/test/queue-ipc.test.ts
Onur Solmaz be510ba918
refactor: add acpx runtime embedding API (#220)
* refactor: add acpx runtime embedding API

* fix: preserve session state on replay failure

* fix: honor startup controls in runtime manager

* Runtime: deduplicate shared session engine

* Runtime: honor oneshot and steer inputs

* Runtime: keep persistent sessions stable

* Runtime: initialize embedded event logs

* Runtime: drop unsupported ensure env

* Refactor: reorganize ACPX source layout

* refactor: finish ACPX source layout cleanup

* docs: note runtime embedding API
2026-04-06 00:52:21 +02:00

68 lines
1.9 KiB
TypeScript

import assert from "node:assert/strict";
import test from "node:test";
import {
cleanupOwnerArtifacts,
closeServer,
createSingleRequestServer,
listenServer,
queuePaths,
startKeeperProcess,
stopProcess,
withTempHome,
writeQueueOwnerLock,
} from "./queue-test-helpers.js";
type SessionModule = typeof import("../src/session/session.js");
const SESSION_MODULE_URL = new URL("../src/session/session.js", import.meta.url);
test("cancelSessionPrompt sends cancel request to active queue owner", async () => {
await withTempHome(async (homeDir) => {
const session = await loadSessionModule();
const sessionId = "cancel-session";
const keeper = await startKeeperProcess();
const { lockPath, socketPath } = queuePaths(homeDir, sessionId);
await writeQueueOwnerLock({
lockPath,
pid: keeper.pid,
sessionId,
socketPath,
});
const server = createSingleRequestServer((socket, request) => {
assert.equal(request.type, "cancel_prompt");
socket.write(
`${JSON.stringify({
type: "accepted",
requestId: request.requestId,
})}\n`,
);
socket.write(
`${JSON.stringify({
type: "cancel_result",
requestId: request.requestId,
cancelled: true,
})}\n`,
);
socket.end();
});
await listenServer(server, socketPath);
try {
const result = await session.cancelSessionPrompt({ sessionId });
assert.equal(result.cancelled, true);
assert.equal(result.sessionId, sessionId);
} finally {
await closeServer(server);
await cleanupOwnerArtifacts({ socketPath, lockPath });
stopProcess(keeper);
}
});
});
async function loadSessionModule(): Promise<SessionModule> {
const cacheBuster = `${Date.now()}-${Math.random()}`;
return (await import(`${SESSION_MODULE_URL.href}?session_test=${cacheBuster}`)) as SessionModule;
}