10 lines
3.0 KiB
JavaScript
10 lines
3.0 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 buildDirectory = path.resolve(process.argv[2] || path.join(root, "freecad-source/build-web/cloud-configure-r2/bin")); globalThis.__dirname = `${buildDirectory}${path.sep}`; globalThis.require = createRequire(import.meta.url); const loader = await import(pathToFileURL(path.join(buildDirectory, "FreeCADWebCloudKernelProbe.js")).href); const kernel = await loader.default({ wasmBinary: fs.readFileSync(path.join(buildDirectory, "FreeCADWebCloudKernelProbe.wasm")) }); const call = (name, type = "number", argTypes = [], args = []) => kernel.ccall(name, type, argTypes, args); const revision = "b5a086fda59b0325fe0996147e6e9b344414f9bc"; const replay = () => ({ run: call("fc_web_cloud_python_api", "number", ["string"], [revision]), summary: call("fc_web_cloud_python_summary", "string"), documentsBefore: call("fc_web_cloud_python_document_count_before"), documentsAfter: call("fc_web_cloud_python_document_count_after"), apiCount: call("fc_web_cloud_python_api_count") }); const first = replay(); const second = replay(); const firstHash = crypto.createHash("sha256").update(JSON.stringify(first)).digest("hex"); const secondHash = crypto.createHash("sha256").update(JSON.stringify(second)).digest("hex"); assert.equal(first.run, 1); assert.equal(first.apiCount, 8); assert.equal(first.documentsBefore, first.documentsAfter); assert.deepEqual(second, first); assert.equal(firstHash, secondHash);
|
|
const report = { schema: "freecad-web-p6-cloud-action-03-persistence/v1", task_id: "FW-P6-CLD-ACT-03-G", module: "Cloud", action: "python-api", status: "pass", applicable: false, reason: "Cloud python-api is a read-only method inventory and has no FCStd Document or save/reopen operation; Cloud Save/Restore requires a configured remote S3 service.", source_revision: revision, replay: { firstHash, secondHash, equal: firstHash === secondHash, runs: 2 }, state: { apiCount: first.apiCount, documentMutation: false, saveRequested: false, nativePointersExposed: false }, commands: ["node tools/run_p6_cloud_action03_persistence.mjs"], artifacts: { chrome: "docs/p6/cloud-action-03-chrome.json", kernel: "docs/p6/cloud-action-03-kernel.json" }, boundaries: ["No FCStd round-trip claim is made; remote Save/Restore is outside this deterministic offline fixture."] }; fs.writeFileSync(path.join(root, "docs/p6/cloud-action-03-persistence.json"), `${JSON.stringify(report, null, 2)}\n`); fs.writeFileSync(path.join(root, "docs/freecad-p6-cloud-act03-g-persistence.log"), `${JSON.stringify({ result: report.status, applicable: report.applicable, replayEqual: report.replay.equal, documentMutation: report.state.documentMutation })}\n`); console.log(JSON.stringify({ result: report.status, applicable: report.applicable, replayEqual: report.replay.equal }));
|