// kcp parity for under-4-cpus: internal/policyengine/spec/engine_test.go TestWorkPolicies // (matrix/under-4-cpus/...) and under-4-cpus.ts. import assert from "node:assert/strict"; import { test } from "node:test"; import { abiSuite, Bidder, loadPolicy, NSID, Requester, World } from "../../crates/policy/vectors.mjs"; const mod = await loadPolicy("policy-under-4-cpus"); abiSuite(mod); const allow = { allow: true, violations: [] }; const base = { selfDid: Bidder, counterpartyDid: Requester, mode: "full" }; function rfpFor(world, cpus) { const vm = world.put(Requester, NSID.vm, `vm-${cpus}`, { $type: NSID.vm, cpus }); return world.put(Requester, NSID.rfp, `rfp-${cpus}`, { $type: NSID.rfp, payload: vm }); } test("scope without demand allows; an rfp without payload allows (matrix no-demand, rfp-without-payload)", async () => { assert.deepEqual((await mod.evaluate({ ...base, mode: "scope" })).verdict, allow); const world = new World(); const rfp = world.put(Requester, NSID.rfp, "rfp-plain", { $type: NSID.rfp, policies: [] }); assert.deepEqual((await mod.evaluate({ ...base, rfp }, world)).verdict, allow); }); test("an unreadable payload denies (matrix payload-unreadable-denies)", async () => { const world = new World(); const vm = `at://${Requester}/computer.socialweb.temp.compute.vm/vm-8`; const rfp = world.put(Requester, NSID.rfp, "rfp-cpus", { $type: NSID.rfp, payload: { uri: vm, cid: "bafyreigh2akiscaildcqabsyg3dfr6chu3fgpregiymsck7e7aqa4s52zy" } }); const { verdict } = await mod.evaluate({ ...base, rfp }, world); assert.equal(verdict.allow, false); assert.match(verdict.violations[0].msg, /^failed to resolve demand payload/); assert.equal(verdict.violations[0].policyId, "under-4-cpus"); }); test("cpus over the cap deny, at or under allow; args.maxCpus only counts as a number", async () => { const world = new World(); assert.deepEqual((await mod.evaluate({ ...base, rfp: rfpFor(world, 4) }, world)).verdict, allow); assert.deepEqual((await mod.evaluate({ ...base, rfp: rfpFor(world, 8) }, world)).verdict, { allow: false, violations: [{ msg: "VM needs 8 cpus; this bidder's cap is 4", policyId: "under-4-cpus" }], }); assert.deepEqual((await mod.evaluate({ ...base, rfp: rfpFor(world, 8), args: { maxCpus: 8 } }, world)).verdict, allow); assert.equal((await mod.evaluate({ ...base, rfp: rfpFor(world, 8), args: { maxCpus: "8" } }, world)).verdict.allow, false); assert.deepEqual((await mod.evaluate({ ...base, rfp: rfpFor(world, 2.5), args: { maxCpus: 2 } }, world)).verdict.violations[0].msg, "VM needs 2.5 cpus; this bidder's cap is 2"); assert.deepEqual((await mod.evaluate({ ...base, rfp: rfpFor(world, "16") }, world)).verdict, allow, "non-number cpus allow"); }); test("rfp.payload inline is used without reading the payload record", async () => { const world = new World(); const rfp = { ...rfpFor(world, 2), payload: { cpus: 6 } }; const { verdict, reads } = await mod.evaluate({ ...base, rfp }, world); assert.equal(verdict.allow, false); assert.deepEqual(reads, [rfp.uri]); });