Files
openclaw/test/vitest-config.test.ts
2026-03-26 22:03:18 +00:00

194 lines
5.1 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
resolveExecutionBudget,
resolveRuntimeCapabilities,
} from "../scripts/test-planner/runtime-profile.mjs";
import { resolveLocalVitestMaxWorkers } from "../vitest.config.ts";
function resolveHighMemoryLocalRuntime() {
return resolveRuntimeCapabilities(
{
RUNNER_OS: "macOS",
},
{
cpuCount: 16,
totalMemoryBytes: 128 * 1024 ** 3,
platform: "darwin",
mode: "local",
loadAverage: [0.2, 0.2, 0.2],
},
);
}
describe("resolveLocalVitestMaxWorkers", () => {
it("derives a mid-tier local cap for 64 GiB hosts", () => {
expect(
resolveLocalVitestMaxWorkers(
{
RUNNER_OS: "macOS",
},
{
cpuCount: 10,
totalMemoryBytes: 64 * 1024 ** 3,
platform: "darwin",
loadAverage: [0.1, 0.1, 0.1],
},
),
).toBe(4);
});
it("lets OPENCLAW_VITEST_MAX_WORKERS override the inferred cap", () => {
expect(
resolveLocalVitestMaxWorkers(
{
OPENCLAW_VITEST_MAX_WORKERS: "2",
},
{
cpuCount: 10,
totalMemoryBytes: 128 * 1024 ** 3,
platform: "darwin",
},
),
).toBe(2);
});
it("maps the legacy low profile to serial intent for compatibility", () => {
const runtime = resolveRuntimeCapabilities(
{
OPENCLAW_TEST_PROFILE: "low",
RUNNER_OS: "Linux",
},
{
cpuCount: 8,
totalMemoryBytes: 32 * 1024 ** 3,
platform: "linux",
mode: "local",
},
);
expect(runtime.intentProfile).toBe("serial");
});
it("classifies 64 GiB local macOS hosts as mid-memory capabilities", () => {
const runtime = resolveRuntimeCapabilities(
{
RUNNER_OS: "macOS",
},
{
cpuCount: 10,
totalMemoryBytes: 64 * 1024 ** 3,
platform: "darwin",
mode: "local",
loadAverage: [0.2, 0.2, 0.2],
},
);
expect(runtime.runtimeProfileName).toBe("local-darwin");
expect(runtime.memoryBand).toBe("mid");
expect(runtime.loadBand).toBe("idle");
});
it("does not classify 64 GiB non-macOS hosts as constrained locals", () => {
const runtime = resolveRuntimeCapabilities(
{
RUNNER_OS: "Linux",
},
{
cpuCount: 16,
totalMemoryBytes: 64 * 1024 ** 3,
platform: "linux",
mode: "local",
loadAverage: [0.2, 0.2, 0.2],
},
);
expect(runtime.memoryBand).toBe("mid");
expect(runtime.runtimeProfileName).toBe("local-linux");
});
it("reduces local budgets when the host is busy", () => {
const runtime = resolveRuntimeCapabilities(
{
RUNNER_OS: "Linux",
},
{
cpuCount: 10,
totalMemoryBytes: 16 * 1024 ** 3,
platform: "linux",
mode: "local",
loadAverage: [9.5, 9.5, 9.5],
},
);
const budget = resolveExecutionBudget(runtime);
expect(runtime.memoryBand).toBe("constrained");
expect(runtime.loadBand).toBe("busy");
expect(budget.vitestMaxWorkers).toBe(1);
expect(budget.topLevelParallelLimit).toBe(1);
});
it("keeps 64 GiB hosts mid-tier but scales them down under saturation", () => {
const runtime = resolveRuntimeCapabilities(
{
RUNNER_OS: "Linux",
},
{
cpuCount: 10,
totalMemoryBytes: 64 * 1024 ** 3,
platform: "linux",
mode: "local",
loadAverage: [11.5, 11.5, 11.5],
},
);
const budget = resolveExecutionBudget(runtime);
expect(runtime.memoryBand).toBe("mid");
expect(runtime.loadBand).toBe("saturated");
expect(budget.vitestMaxWorkers).toBe(2);
expect(budget.deferredRunConcurrency).toBe(1);
});
it("keeps CI windows policy constrained independently of host load", () => {
const runtime = resolveRuntimeCapabilities(
{
CI: "true",
RUNNER_OS: "Windows",
},
{
cpuCount: 32,
totalMemoryBytes: 128 * 1024 ** 3,
platform: "win32",
mode: "ci",
loadAverage: [0, 0, 0],
},
);
const budget = resolveExecutionBudget(runtime);
expect(runtime.runtimeProfileName).toBe("ci-windows");
expect(budget.vitestMaxWorkers).toBe(2);
expect(budget.topLevelParallelLimit).toBe(2);
});
it("enables shared channel batching on high-memory local hosts", () => {
const runtime = resolveHighMemoryLocalRuntime();
const budget = resolveExecutionBudget(runtime);
expect(runtime.memoryBand).toBe("high");
expect(runtime.loadBand).toBe("idle");
expect(budget.channelsBatchTargetMs).toBe(30_000);
expect(budget.channelSharedWorkers).toBe(5);
expect(budget.deferredRunConcurrency).toBe(8);
expect(budget.topLevelParallelLimitNoIsolate).toBe(14);
});
it("uses a coarser shared extension batch target on high-memory local hosts", () => {
const runtime = resolveHighMemoryLocalRuntime();
const budget = resolveExecutionBudget(runtime);
expect(runtime.memoryBand).toBe("high");
expect(runtime.loadBand).toBe("idle");
expect(budget.extensionsBatchTargetMs).toBe(300_000);
expect(budget.extensionWorkers).toBe(5);
});
});