Pool host-approved restricted code with scoped and fair graph execution
This commit is contained in:
@@ -5,7 +5,7 @@ import { mkdtemp, writeFile, rm } from "node:fs/promises";
|
||||
import { tmpdir } from "node:os";
|
||||
import { join } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { serveRestrictedRegistry } from "./service.mjs";
|
||||
import { serveRestrictedRegistry, RestrictedEngineBudget } from "./service.mjs";
|
||||
|
||||
const workerd = process.env.QUIXOS_TEST_WORKERD;
|
||||
if (!workerd) throw Error("Set QUIXOS_TEST_WORKERD to the pinned engine");
|
||||
@@ -571,3 +571,28 @@ test("detached digest callbacks cannot use a completed frame or contaminate reus
|
||||
await f.close();
|
||||
}
|
||||
});
|
||||
|
||||
test("the shared engine budget evicts idle code families and rejects busy oversubscription", async () => {
|
||||
const engineBudget = new RestrictedEngineBudget(1);
|
||||
const a = await fixture(registry("return request.input;"), { engineBudget });
|
||||
const b = await fixture(
|
||||
registry("return await channel({portId:'read',action:{kind:'state',primitive:'read'},input:null});"),
|
||||
{ engineBudget },
|
||||
);
|
||||
try {
|
||||
a.start("first family");
|
||||
assert.equal((await a.receive()).output, "first family");
|
||||
const busy = b.start();
|
||||
const port = await b.receive();
|
||||
assert.equal(a.stats().engines, 0, "Idle foreign code is evicted before allocating another engine");
|
||||
assert.equal(engineBudget.stats().engines, 1);
|
||||
a.start("overload");
|
||||
assert.equal((await a.receive()).error.code, "RESTRICTED_ENGINE_LIMIT");
|
||||
assert.equal(engineBudget.stats().engines, 1);
|
||||
b.send({ kind: "port-result", ...busy, sequence: port.sequence, status: "returned", output: "survived" });
|
||||
assert.equal((await b.receive()).output, "survived");
|
||||
} finally {
|
||||
await Promise.all([a.close(), b.close()]);
|
||||
}
|
||||
assert.equal(engineBudget.stats().engines, 0);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user