Files
FreeCADWasmDev/tools/run_p6_cloud_action04_persistence.mjs
wangdequan 9a7c4f0335 Save FreeCAD Web workspace sources and user validation evidence
IFC native binding remains incomplete; preserve accurate test results.
2026-09-15 22:01:58 +08:00

4 lines
2.7 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"), applicable: call("fc_web_cloud_persistence_applicable"), reason: call("fc_web_cloud_persistence_reason", "string"), before: call("fc_web_cloud_persistence_state_before", "string"), after: call("fc_web_cloud_persistence_state_after", "string"), replayEqual: call("fc_web_cloud_persistence_replay_equal") }); const first = run(); const second = run(); assert.equal(first.run, 1); assert.equal(first.applicable, 0); assert.equal(first.before, first.after); assert.equal(first.replayEqual, 1); assert.deepEqual(second, first); const firstHash = crypto.createHash("sha256").update(JSON.stringify(first)).digest("hex"); const secondHash = crypto.createHash("sha256").update(JSON.stringify(second)).digest("hex"); const report = { schema: "freecad-web-p6-cloud-action-04-persistence/v1", task_id: "FW-P6-CLD-ACT-04-G", module: "Cloud", action: "save/reopen", status: "pass", applicable: false, reason: first.reason, source_revision: "b5a086fda59b0325fe0996147e6e9b344414f9bc", replay: { firstHash, secondHash, equal: firstHash === secondHash, runs: 2 }, state: { documentMutation: false, localFcstdRoundTrip: false, remoteSaveRestore: false }, commands: ["node tools/run_p6_cloud_action04_persistence.mjs"], artifacts: { kernel: "docs/p6/cloud-action-04-kernel.json", chrome: "docs/p6/cloud-action-04-chrome.json" }, boundaries: ["Cloud persistence is remote S3-style Save/Restore and is not a local FCStd save/reopen action; no credentials or network request is used."] }; fs.writeFileSync(path.join(root, "docs/p6/cloud-action-04-persistence.json"), `${JSON.stringify(report, null, 2)}\n`); fs.writeFileSync(path.join(root, "docs/freecad-p6-cloud-act04-g-persistence.log"), `${JSON.stringify({ result: report.status, applicable: report.applicable, replayEqual: report.replay.equal })}\n`); console.log(JSON.stringify({ result: report.status, applicable: report.applicable, replayEqual: report.replay.equal }));