mirror of
https://github.com/alkimake/paperclip.git
synced 2026-06-16 19:00:38 +09:00
97 lines
2.6 KiB
TypeScript
97 lines
2.6 KiB
TypeScript
|
|
import { describe, expect, it, vi } from "vitest";
|
||
|
|
|
||
|
|
import {
|
||
|
|
adapterExecutionTargetSessionIdentity,
|
||
|
|
adapterExecutionTargetToRemoteSpec,
|
||
|
|
runAdapterExecutionTargetProcess,
|
||
|
|
runAdapterExecutionTargetShellCommand,
|
||
|
|
type AdapterSandboxExecutionTarget,
|
||
|
|
} from "./execution-target.js";
|
||
|
|
|
||
|
|
describe("sandbox adapter execution targets", () => {
|
||
|
|
it("executes through the provider-neutral runner without a remote spec", async () => {
|
||
|
|
const runner = {
|
||
|
|
execute: vi.fn(async () => ({
|
||
|
|
exitCode: 0,
|
||
|
|
signal: null,
|
||
|
|
timedOut: false,
|
||
|
|
stdout: "ok\n",
|
||
|
|
stderr: "",
|
||
|
|
pid: null,
|
||
|
|
startedAt: new Date().toISOString(),
|
||
|
|
})),
|
||
|
|
};
|
||
|
|
const target: AdapterSandboxExecutionTarget = {
|
||
|
|
kind: "remote",
|
||
|
|
transport: "sandbox",
|
||
|
|
providerKey: "acme-sandbox",
|
||
|
|
environmentId: "env-1",
|
||
|
|
leaseId: "lease-1",
|
||
|
|
remoteCwd: "/workspace",
|
||
|
|
timeoutMs: 30_000,
|
||
|
|
runner,
|
||
|
|
};
|
||
|
|
|
||
|
|
expect(adapterExecutionTargetToRemoteSpec(target)).toBeNull();
|
||
|
|
|
||
|
|
const result = await runAdapterExecutionTargetProcess("run-1", target, "agent-cli", ["--json"], {
|
||
|
|
cwd: "/local/workspace",
|
||
|
|
env: { TOKEN: "token" },
|
||
|
|
stdin: "prompt",
|
||
|
|
timeoutSec: 5,
|
||
|
|
graceSec: 1,
|
||
|
|
onLog: async () => {},
|
||
|
|
});
|
||
|
|
|
||
|
|
expect(result.stdout).toBe("ok\n");
|
||
|
|
expect(runner.execute).toHaveBeenCalledWith(expect.objectContaining({
|
||
|
|
command: "agent-cli",
|
||
|
|
args: ["--json"],
|
||
|
|
cwd: "/workspace",
|
||
|
|
env: { TOKEN: "token" },
|
||
|
|
stdin: "prompt",
|
||
|
|
timeoutMs: 5000,
|
||
|
|
}));
|
||
|
|
expect(adapterExecutionTargetSessionIdentity(target)).toEqual({
|
||
|
|
transport: "sandbox",
|
||
|
|
providerKey: "acme-sandbox",
|
||
|
|
environmentId: "env-1",
|
||
|
|
leaseId: "lease-1",
|
||
|
|
remoteCwd: "/workspace",
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
it("runs shell commands through the same runner", async () => {
|
||
|
|
const runner = {
|
||
|
|
execute: vi.fn(async () => ({
|
||
|
|
exitCode: 0,
|
||
|
|
signal: null,
|
||
|
|
timedOut: false,
|
||
|
|
stdout: "/home/sandbox",
|
||
|
|
stderr: "",
|
||
|
|
pid: null,
|
||
|
|
startedAt: new Date().toISOString(),
|
||
|
|
})),
|
||
|
|
};
|
||
|
|
const target: AdapterSandboxExecutionTarget = {
|
||
|
|
kind: "remote",
|
||
|
|
transport: "sandbox",
|
||
|
|
remoteCwd: "/workspace",
|
||
|
|
runner,
|
||
|
|
};
|
||
|
|
|
||
|
|
await runAdapterExecutionTargetShellCommand("run-2", target, 'printf %s "$HOME"', {
|
||
|
|
cwd: "/local/workspace",
|
||
|
|
env: {},
|
||
|
|
timeoutSec: 7,
|
||
|
|
});
|
||
|
|
|
||
|
|
expect(runner.execute).toHaveBeenCalledWith(expect.objectContaining({
|
||
|
|
command: "sh",
|
||
|
|
args: ["-lc", 'printf %s "$HOME"'],
|
||
|
|
cwd: "/workspace",
|
||
|
|
timeoutMs: 7000,
|
||
|
|
}));
|
||
|
|
});
|
||
|
|
});
|