mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-16 12:30:49 +00:00
test: share sandbox fs bridge seeded workspace
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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" });
|
||||
|
||||
@@ -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>,
|
||||
|
||||
Reference in New Issue
Block a user