import assert from "node:assert/strict"; import test from "node:test"; import { createServerJobResourceReceipt, parseServerJobResourceBudget, SERVER_JOB_RESOURCE_LIMITS } from "../../../tools/web/server-job-resource-budget.mjs"; const budget = { schemaVersion: 1, ...SERVER_JOB_RESOURCE_LIMITS }; const usage = { cpuMs: 10, memoryBytes: 1024, processCount: 1, fileCount: 2, wallMs: 20, outputBytes: 512 }; test("M13-04C accepts bounded usage and marks enforcement", () => { assert.deepEqual(parseServerJobResourceBudget(budget), budget); assert.deepEqual(createServerJobResourceReceipt(budget, usage), { schemaVersion: 1, status: "SUCCEEDED", budget, usage, enforced: true, exceeded: [] }); }); test("M13-04C rejects each resource overage with a stable code", () => { for (const field of Object.keys(SERVER_JOB_RESOURCE_LIMITS)) { assert.throws(() => createServerJobResourceReceipt(budget, { ...usage, [field]: SERVER_JOB_RESOURCE_LIMITS[field] + 1 }), new RegExp(`SERVER_JOB_BUDGET_EXCEEDED.*${field}`)); } assert.throws(() => parseServerJobResourceBudget({ ...budget, unknown: 1 }), /SERVER_JOB_BUDGET_INVALID/); });