~ knotless Search/
↑↓ move↵ open⇧↵ all results

johnandersen777.bsky.social/atlibs-socialweb-computer-requester

socialweb.computer market requester and policy modules for atlibs, with its web pages and lexicons

0
0
53 lines · 3.0 KB Raw History
// 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]);
});