test: share sandbox fs bridge seeded workspace

This commit is contained in:
Peter Steinberger
2026-03-14 02:18:40 +00:00
parent 6a61d5504c
commit 013ad58f3c
3 changed files with 35 additions and 21 deletions

View File

@@ -4,6 +4,7 @@ import { describe, expect, it } from "vitest";
import {
createSandbox,
createSandboxFsBridge,
createSeededSandboxFsBridge,
dockerExecResult,
findCallsByScriptFragment,
findCallByDockerArg,
@@ -103,17 +104,7 @@ describe("sandbox fs bridge anchored ops", () => {
it.each(pinnedCases)("$name", async (testCase) => {
await withTempDir("openclaw-fs-bridge-contract-write-", async (stateDir) => {
const workspaceDir = path.join(stateDir, "workspace");
await fs.mkdir(path.join(workspaceDir, "nested"), { recursive: true });
await fs.writeFile(path.join(workspaceDir, "from.txt"), "hello", "utf8");
await fs.writeFile(path.join(workspaceDir, "nested", "file.txt"), "bye", "utf8");
const bridge = createSandboxFsBridge({
sandbox: createSandbox({
workspaceDir,
agentWorkspaceDir: workspaceDir,
}),
});
const { bridge } = await createSeededSandboxFsBridge(stateDir);
await testCase.invoke(bridge);

View File

@@ -4,6 +4,7 @@ import { describe, expect, it } from "vitest";
import {
createSandbox,
createSandboxFsBridge,
createSeededSandboxFsBridge,
getScriptsFromCalls,
installFsBridgeTestHarness,
mockedExecDockerRaw,
@@ -140,16 +141,8 @@ describe("sandbox fs bridge shell compatibility", () => {
it("routes mkdirp, remove, and rename through the pinned mutation helper", async () => {
await withTempDir("openclaw-fs-bridge-shell-write-", async (stateDir) => {
const workspaceDir = path.join(stateDir, "workspace");
await fs.mkdir(path.join(workspaceDir, "nested"), { recursive: true });
await fs.writeFile(path.join(workspaceDir, "a.txt"), "hello", "utf8");
await fs.writeFile(path.join(workspaceDir, "nested", "file.txt"), "bye", "utf8");
const bridge = createSandboxFsBridge({
sandbox: createSandbox({
workspaceDir,
agentWorkspaceDir: workspaceDir,
}),
const { bridge } = await createSeededSandboxFsBridge(stateDir, {
rootFileName: "a.txt",
});
await bridge.mkdirp({ filePath: "nested" });

View File

@@ -79,6 +79,36 @@ export function createSandbox(overrides?: Partial<SandboxContext>): SandboxConte
});
}
export async function createSeededSandboxFsBridge(
stateDir: string,
params?: {
rootFileName?: string;
rootContents?: string;
nestedFileName?: string;
nestedContents?: string;
},
) {
const workspaceDir = path.join(stateDir, "workspace");
await fs.mkdir(path.join(workspaceDir, "nested"), { recursive: true });
await fs.writeFile(
path.join(workspaceDir, params?.rootFileName ?? "from.txt"),
params?.rootContents ?? "hello",
"utf8",
);
await fs.writeFile(
path.join(workspaceDir, "nested", params?.nestedFileName ?? "file.txt"),
params?.nestedContents ?? "bye",
"utf8",
);
const bridge = createSandboxFsBridge({
sandbox: createSandbox({
workspaceDir,
agentWorkspaceDir: workspaceDir,
}),
});
return { workspaceDir, bridge };
}
export async function withTempDir<T>(
prefix: string,
run: (stateDir: string) => Promise<T>,