diff --git a/src/agents/sandbox/fs-bridge.anchored-ops.test.ts b/src/agents/sandbox/fs-bridge.anchored-ops.test.ts index 48e7e9e23f8..f92e99cc3c6 100644 --- a/src/agents/sandbox/fs-bridge.anchored-ops.test.ts +++ b/src/agents/sandbox/fs-bridge.anchored-ops.test.ts @@ -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); diff --git a/src/agents/sandbox/fs-bridge.shell.test.ts b/src/agents/sandbox/fs-bridge.shell.test.ts index 1685759ad38..1e870ef0268 100644 --- a/src/agents/sandbox/fs-bridge.shell.test.ts +++ b/src/agents/sandbox/fs-bridge.shell.test.ts @@ -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" }); diff --git a/src/agents/sandbox/fs-bridge.test-helpers.ts b/src/agents/sandbox/fs-bridge.test-helpers.ts index 87a184154af..0747371478d 100644 --- a/src/agents/sandbox/fs-bridge.test-helpers.ts +++ b/src/agents/sandbox/fs-bridge.test-helpers.ts @@ -79,6 +79,36 @@ export function createSandbox(overrides?: Partial): 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( prefix: string, run: (stateDir: string) => Promise,