72 lines
2.0 KiB
TypeScript
72 lines
2.0 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import {
|
|
createRuntimeCharacterizationPlan,
|
|
parseRuntimeCharacterizationPlan,
|
|
} from "../src/domain/runtimeCharacterization.js";
|
|
|
|
const digest = (character: string): string => character.repeat(64);
|
|
|
|
describe("provider-neutral runtime characterization plan", () => {
|
|
it("commits preparation separately from execution approval", () => {
|
|
const plan = createRuntimeCharacterizationPlan({
|
|
schema_version: 1,
|
|
preparation_sha256: digest("5"),
|
|
artifact: {
|
|
path: "/approved/app.js",
|
|
sha256: digest("1"),
|
|
byte_length: 100,
|
|
},
|
|
runtime: {
|
|
family: "ecmascript",
|
|
provider_id: "node-javascript",
|
|
executable_path: "/usr/bin/node",
|
|
executable_sha256: digest("2"),
|
|
version: "v24.18.0",
|
|
profile_sha256: digest("3"),
|
|
},
|
|
callable: {
|
|
callable_id: "bundle.module7.hidden",
|
|
module_id: "bundle.module7",
|
|
export_name: "selected",
|
|
semantic_evidence_id: null,
|
|
selector_sha256: digest("4"),
|
|
},
|
|
working_directory: "/owned/work",
|
|
isolated_home: "/owned/home",
|
|
expected_effect: "pure",
|
|
allowed_boundaries: [],
|
|
limits: {
|
|
max_calls: 2,
|
|
max_processes: 0,
|
|
max_files: 0,
|
|
max_bytes: 65_536,
|
|
max_handles: 32,
|
|
timeout_ms: 5_000,
|
|
idle_timeout_ms: 1_000,
|
|
},
|
|
determinism: {
|
|
clock: "fixed",
|
|
randomness: "seeded",
|
|
identifiers: "deterministic",
|
|
seed: 7,
|
|
},
|
|
authority: {
|
|
preparation_approved: true,
|
|
execution_approved: false,
|
|
network: "none",
|
|
provider_owned_process_only: true,
|
|
},
|
|
});
|
|
|
|
expect(parseRuntimeCharacterizationPlan(plan)).toEqual(plan);
|
|
expect(plan.authority.execution_approved).toBe(false);
|
|
expect(() =>
|
|
parseRuntimeCharacterizationPlan({
|
|
...plan,
|
|
expected_effect: "bounded-effects",
|
|
}),
|
|
).toThrow(/digest is invalid/u);
|
|
});
|
|
});
|