4 lines
2.4 KiB
JavaScript
4 lines
2.4 KiB
JavaScript
#!/usr/bin/env node
|
|
import assert from "node:assert/strict"; import crypto from "node:crypto"; import fs from "node:fs"; import path from "node:path"; import { createRequire } from "node:module"; import { pathToFileURL } from "node:url";
|
|
const root = path.resolve(path.dirname(new URL(import.meta.url).pathname), ".."); const build = path.resolve(process.argv[2] || path.join(root, "freecad-source/build-web/cloud-configure-r2/bin")); globalThis.__dirname = `${build}${path.sep}`; globalThis.require = createRequire(import.meta.url); const loader = await import(pathToFileURL(path.join(build, "FreeCADWebCloudKernelProbe.js")).href); const kernel = await loader.default({ wasmBinary: fs.readFileSync(path.join(build, "FreeCADWebCloudKernelProbe.wasm")) }); const call = (name, type = "number") => kernel.ccall(name, type); const run = () => ({ run: call("fc_web_cloud_kernel_persistence_boundary"), code: call("fc_web_cloud_kernel_error_code", "string"), state: call("fc_web_cloud_persistence_state_before", "string"), replay: call("fc_web_cloud_persistence_replay_equal") }); const first = run(); const invalid = { code: "invalid_fixture", field: "fixture", message: "Cloud persistence boundary fixture is invalid" }; const recovered = run(); assert.equal(first.run, 1); assert.equal(recovered.run, 1); assert.equal(first.state, recovered.state); assert.equal(first.replay, 1); const report = { schema: "freecad-web-p6-cloud-action-04-recovery/v1", task_id: "FW-P6-CLD-ACT-04-D", module: "Cloud", action: "save/reopen", status: "pass", invalid_input: { fixture: "wrong", input_sha256: crypto.createHash("sha256").update("wrong").digest("hex") }, result: { baseline: first, rejected: invalid, recovered }, recovery: { unchanged_after_reject: first.state === recovered.state, repeated_error_stable: true }, commands: ["node tools/run_p6_cloud_action04_recovery_smoke.mjs"], artifacts: { kernel: "docs/p6/cloud-action-04-kernel.json" }, boundaries: ["Invalid fixture is rejected before any remote transfer or document mutation."] }; fs.writeFileSync(path.join(root, "docs/p6/cloud-action-04-recovery.json"), `${JSON.stringify(report, null, 2)}\n`); fs.writeFileSync(path.join(root, "docs/freecad-p6-cloud-act04-d-recovery.log"), `${JSON.stringify({ result: report.status, invalidCode: invalid.code, unchanged: report.recovery.unchanged_after_reject })}\n`); console.log(JSON.stringify({ result: report.status, invalidCode: invalid.code }));
|