Files
linuxcncWebWASM/web/worker/test_source_config_s5.mjs

71 lines
3.8 KiB
JavaScript

import assert from "node:assert/strict";
import { createHash } from "node:crypto";
import { readFile } from "node:fs/promises";
import { ConfigurationBatchRuntime } from "../workspace/configuration-batch.mjs";
import { fnv1a64 } from "./replay.mjs";
const ROOT = new URL("../../", import.meta.url);
const CONTEXT_ID = "linuxcnc-2.10.0-pre0-wasm-m1-py-c1";
const matrix = JSON.parse(await readFile(new URL("../../coverage/full-configuration-startup-matrix.report.json", import.meta.url)));
const batch = new ConfigurationBatchRuntime({ context_id: CONTEXT_ID });
assert.equal(batch.load(matrix.matrix, { context_id: CONTEXT_ID }).status, "verified");
assert.deepEqual(batch.state.counts, {
total: 264,
ready: 56,
blocked: 208,
startup_preflight: { blocked_resource: 194, blocked_unindexed_resource_graph: 11, blocked_unregistered_kinematics: 3, static_ready: 56 },
resource_status: { blocked_missing: 147, blocked_missing_and_unresolved: 49, ready: 9, unindexed: 59 },
});
const diagnosticById = new Map(batch.state.diagnostics.map((row) => [row.config_id, row]));
const entrypointResults = [];
const hashes = [];
for (const row of matrix.matrix) {
const value = await readFile(new URL(`../../${row.path}`, import.meta.url));
const sourceHash = createHash("sha256").update(value).digest("hex");
const entry = batch.state.entrypoints.find((item) => item.config_id === row.config_id);
assert.ok(entry, row.config_id);
assert.equal(entry.status, row.status);
const diagnostic = row.status === "blocked" ? diagnosticById.get(row.config_id) : null;
entrypointResults.push({
config_id: row.config_id,
path: row.path,
source_sha256: sourceHash,
status: row.status === "ready" ? "READY" : "BLOCKED",
startup_preflight: row.startup_preflight,
resource_status: row.resource_status,
diagnostic_code: diagnostic?.code ?? null,
missing_count: row.missing_resources.length,
unresolved_count: row.unresolved_resources.length,
});
hashes.push(`${row.config_id}:${sourceHash}:${row.status}`);
}
entrypointResults.sort((left, right) => left.config_id.localeCompare(right.config_id));
hashes.sort();
const saved = batch.export();
const restored = new ConfigurationBatchRuntime({ context_id: CONTEXT_ID });
assert.deepEqual(restored.restore(saved), saved);
const simConfigCount = entrypointResults.filter((row) => row.path.startsWith("linuxcnc/configs/sim/")).length;
const testConfigCount = entrypointResults.filter((row) => row.path.startsWith("linuxcnc/tests/")).length;
assert.equal(simConfigCount, 216);
assert.equal(testConfigCount, 48);
const output = {
schema: "linuxcnc-source-config-startup-adapter.v1",
context_id: CONTEXT_ID,
matrix_report_sha256: createHash("sha256").update(await readFile(new URL("../../coverage/full-configuration-startup-matrix.report.json", import.meta.url))).digest("hex"),
registered_entries: matrix.counts.registered_entries,
reported_entrypoints: matrix.counts.entrypoints,
entrypoint_results: entrypointResults,
counts: { total: entrypointResults.length, sim_configs: simConfigCount, test_configs: testConfigCount, READY: batch.state.counts.ready, BLOCKED: batch.state.counts.blocked },
workflow: { batch_schema: saved.schema, batch_state_hash: saved.state_hash, restore_equal: JSON.stringify(restored.export()) === JSON.stringify(saved), diagnostic_count: batch.state.diagnostics.length, entrypoint_hash: fnv1a64(hashes) },
boundaries: [
"READY is static startup preflight, not an official LinuxCNC runtime oracle",
"BLOCKED rows retain resource/kinematics diagnostics and are never promoted",
"full native/WASM/Worker startup probes remain represented by configuration-startup-runtime evidence",
],
};
output.aggregate_hash = fnv1a64({ counts: output.counts, workflow: output.workflow, entrypoint_hash: output.workflow.entrypoint_hash });
console.log(JSON.stringify(output));