Spracherkennung für: .ts vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]
import { beforeEach, describe, expect, it, vi } from "vitest";
import type { OpenClawConfig } from "../../config/config.js";
const dockerMocks = vi.hoisted(() => ({
dockerContainerState: vi.fn(),
ensureSandboxContainer: vi.fn(),
execDocker: vi.fn(),
execDockerRaw: vi.fn(),
}));
vi.mock("./docker.js", async () => {
const actual = await vi.importActual<typeof import("./docker.js")>("./docker.js");
return {
...actual,
dockerContainerState: dockerMocks.dockerContainerState,
ensureSandboxContainer: dockerMocks.ensureSandboxContainer,
execDocker: dockerMocks.execDocker,
execDockerRaw: dockerMocks.execDockerRaw,
};
});
const { dockerSandboxBackendManager } = await import("./docker-backend.js");
function createConfig(): OpenClawConfig {
return {
agents: {
defaults: {
sandbox: {
mode: "all",
scope: "session",
workspaceAccess: "none",
docker: {
image: "openclaw-sandbox:bookworm-slim",
},
browser: {
enabled: true,
image: "openclaw-sandbox-browser:bookworm-slim",
},
},
},
list: [],
},
};
}
describe("docker sandbox backend manager", () => {
beforeEach(() => {
vi.clearAllMocks();
dockerMocks.dockerContainerState.mockResolvedValue({
exists: true,
running: true,
});
dockerMocks.execDocker.mockResolvedValue({
code: 0,
stdout: "unused-image",
stderr: "",
});
});
it("matches ordinary sandbox runtimes against sandbox.docker.image", async () => {
dockerMocks.execDocker.mockResolvedValueOnce({
code: 0,
stdout: "openclaw-sandbox:bookworm-slim\n",
stderr: "",
});
const result = await dockerSandboxBackendManager.describeRuntime({
entry: {
containerName: "sandbox-1",
backendId: "docker",
runtimeLabel: "sandbox-1",
sessionKey: "agent:coder:main",
createdAtMs: 1,
lastUsedAtMs: 1,
image: "stale-entry-image",
configLabelKind: "Image",
},
config: createConfig(),
agentId: "coder",
});
expect(result).toEqual({
running: true,
actualConfigLabel: "openclaw-sandbox:bookworm-slim",
configLabelMatch: true,
});
});
it("matches browser runtimes against sandbox.browser.image", async () => {
dockerMocks.execDocker.mockResolvedValueOnce({
code: 0,
stdout: "openclaw-sandbox-browser:bookworm-slim\n",
stderr: "",
});
const result = await dockerSandboxBackendManager.describeRuntime({
entry: {
containerName: "browser-1",
backendId: "docker",
runtimeLabel: "browser-1",
sessionKey: "agent:coder:main",
createdAtMs: 1,
lastUsedAtMs: 1,
image: "stale-entry-image",
configLabelKind: "BrowserImage",
},
config: createConfig(),
agentId: "coder",
});
expect(result).toEqual({
running: true,
actualConfigLabel: "openclaw-sandbox-browser:bookworm-slim",
configLabelMatch: true,
});
});
it("defaults docker-backed runtime matching to sandbox.docker.image when label kind is missing", async () => {
dockerMocks.execDocker.mockResolvedValueOnce({
code: 0,
stdout: "openclaw-sandbox:bookworm-slim\n",
stderr: "",
});
const result = await dockerSandboxBackendManager.describeRuntime({
entry: {
containerName: "sandbox-legacy",
backendId: "docker",
runtimeLabel: "sandbox-legacy",
sessionKey: "agent:coder:main",
createdAtMs: 1,
lastUsedAtMs: 1,
image: "stale-entry-image",
},
config: createConfig(),
agentId: "coder",
});
expect(result).toEqual({
running: true,
actualConfigLabel: "openclaw-sandbox:bookworm-slim",
configLabelMatch: true,
});
});
});
¤ Dauer der Verarbeitung: 0.17 Sekunden
(vorverarbeitet am 2026-04-27)
¤
*© Formatika GbR, Deutschland
|
|