Files
linuxcncWebWASM/python-runtime/test_runtime.mjs

42 lines
2.2 KiB
JavaScript

import assert from "node:assert/strict";
import { createHash } from "node:crypto";
import { writeFile } from "node:fs/promises";
import { createVirtualEnvironment, manifest, manifestHash, runtimeCapabilities, validateCapability, validateImport } from "./compat.mjs";
assert.equal(manifest.schema, "python-runtime-manifest.v1");
assert.equal(manifest.runtime, "Pyodide");
assert.equal(manifest.version, "0.29.4");
assert.equal(manifest.python_version, "3.13.2");
assert.equal(manifest.abi_version, "2025_0");
assert.equal(manifest.platform, "emscripten_4_0_9");
assert.equal(manifest.artifacts.length, 2);
assert.equal(new Set(manifest.artifacts.map((artifact) => `${artifact.name}@${artifact.version}`)).size, 2);
for (const artifact of manifest.artifacts) {
assert.match(artifact.sha256, /^[0-9a-f]{64}$/);
assert.ok(artifact.bytes > 0);
assert.equal(artifact.mirror_kind, "official");
}
assert.equal(validateImport("linuxcnc").status, "accepted");
assert.equal(validateImport("os").code, "python_unsupported");
assert.equal(validateImport("").code, "python_import_invalid");
assert.equal(validateCapability("subprocess").status, "REAL-EXCLUDED");
assert.equal(validateCapability("arbitrary_host_paths").status, "REAL-EXCLUDED");
assert.equal(validateCapability("math").status, "accepted");
const environment = createVirtualEnvironment();
assert.equal(environment.capabilities.manifest_sha256, manifestHash());
assert.equal(environment.importModule("hal").symbols.includes("component"), true);
assert.equal(runtimeCapabilities().denied_capabilities.includes("socket"), true);
const report = {
schema: "python-runtime-report.v1",
status: "passed",
runtime: manifest.runtime,
version: manifest.version,
manifest_sha256: manifestHash(),
artifacts: manifest.artifacts.map(({ name, version, bytes, sha256 }) => ({ name, version, bytes, sha256 })),
virtual_modules: Object.keys(manifest.virtual_modules).length,
denied_capabilities: manifest.denied_capabilities.length,
};
await writeFile(new URL("../coverage/python-runtime.report.json", import.meta.url), `${JSON.stringify(report, null, 2)}\n`);
console.log(`python_runtime=passed version=${manifest.version} modules=${report.virtual_modules}`);