import { mkdir, mkdtemp, rm } from "node:fs/promises" ;
import os from "node:os" ;
import path from "node:path" ;
import { describe, expect, it } from "vitest" ;
import { resolveSandboxWorkdir } from "./bash-tools.shared.js" ;
async function withTempDir(run: (dir: string) => Promise<void >) {
const dir = await mkdtemp(path.join(os.tmpdir(), "openclaw-bash-workdir-" ));
try {
await run(dir);
} finally {
await rm(dir, { recursive: true , force: true });
}
}
describe("resolveSandboxWorkdir" , () => {
it("maps container root workdir to host workspace" , async () => {
await withTempDir(async (workspaceDir) => {
const warnings: string[] = [];
const resolved = await resolveSandboxWorkdir({
workdir: "/workspace" ,
sandbox: {
containerName: "sandbox-1" ,
workspaceDir,
containerWorkdir: "/workspace" ,
},
warnings,
});
expect(resolved.hostWorkdir).toBe(workspaceDir);
expect(resolved.containerWorkdir).toBe("/workspace" );
expect(warnings).toEqual([]);
});
});
it("maps nested container workdir under the container workspace" , async () => {
await withTempDir(async (workspaceDir) => {
const nested = path.join(workspaceDir, "scripts" , "runner" );
await mkdir(nested, { recursive: true });
const warnings: string[] = [];
const resolved = await resolveSandboxWorkdir({
workdir: "/workspace/scripts/runner" ,
sandbox: {
containerName: "sandbox-2" ,
workspaceDir,
containerWorkdir: "/workspace" ,
},
warnings,
});
expect(resolved.hostWorkdir).toBe(nested);
expect(resolved.containerWorkdir).toBe("/workspace/scripts/runner" );
expect(warnings).toEqual([]);
});
});
it("supports custom container workdir prefixes" , async () => {
await withTempDir(async (workspaceDir) => {
const nested = path.join(workspaceDir, "project" );
await mkdir(nested, { recursive: true });
const warnings: string[] = [];
const resolved = await resolveSandboxWorkdir({
workdir: "/sandbox-root/project" ,
sandbox: {
containerName: "sandbox-3" ,
workspaceDir,
containerWorkdir: "/sandbox-root" ,
},
warnings,
});
expect(resolved.hostWorkdir).toBe(nested);
expect(resolved.containerWorkdir).toBe("/sandbox-root/project" );
expect(warnings).toEqual([]);
});
});
});
Messung V0.5 in Prozent C=100 H=97 G=98
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-05-26)
¤
*© Formatika GbR, Deutschland