33 lines
3.8 KiB
JavaScript
33 lines
3.8 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"));
|
|
const sourceRevision = "b5a086fda59b0325fe0996147e6e9b344414f9bc";
|
|
const fixture = { module: "Cloud", entry: "src/Mod/Cloud/App/AppCloud.h", sourceRevision, readOnly: true };
|
|
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 run = (revision) => {
|
|
const result = { run: call("fc_web_cloud_python_api", "number", ["string"], [revision]), sourceRevision: call("fc_web_cloud_python_source_revision", "string"), summary: call("fc_web_cloud_python_summary", "string"), apiCount: call("fc_web_cloud_python_api_count"), callableCount: call("fc_web_cloud_python_callable_count"), moduleHandleAfterRelease: call("fc_web_cloud_python_module_handle_after_release"), documentsBefore: call("fc_web_cloud_python_document_count_before"), documentsAfter: call("fc_web_cloud_python_document_count_after") };
|
|
if (result.run !== 1) result.error = { code: call("fc_web_cloud_python_error_code", "string"), field: call("fc_web_cloud_python_error_field", "string"), message: call("fc_web_cloud_python_error_message", "string") };
|
|
return result;
|
|
};
|
|
const success = run(sourceRevision);
|
|
const invalid = run("wrong-revision");
|
|
const repeated = run(sourceRevision);
|
|
assert.equal(success.run, 1); assert.equal(success.apiCount, 8); assert.equal(success.callableCount, 8); assert.equal(success.moduleHandleAfterRelease, 0); assert.equal(success.documentsBefore, success.documentsAfter);
|
|
assert.equal(invalid.run, 0); assert.equal(invalid.error.code, "revision_mismatch"); assert.equal(invalid.error.field, "sourceRevision");
|
|
assert.deepEqual(repeated, success);
|
|
const report = { schema: "freecad-web-p6-cloud-action-03-kernel/v1", task_id: "FW-P6-CLD-ACT-03-C", module: "Cloud", action: "python-api", status: "pass", source_revision: sourceRevision, fixture: { ...fixture, input_sha256: crypto.createHash("sha256").update(JSON.stringify(fixture)).digest("hex") }, result: { success, invalid, repeated, result_sha256: crypto.createHash("sha256").update(JSON.stringify(success)).digest("hex") }, resources: { module_handle_after_release: success.moduleHandleAfterRelease, documents_unchanged: success.documentsBefore === success.documentsAfter }, commands: ["EM_CONFIG=$PWD/freecad-source/build-web/emscripten-config.py cmake --build freecad-source/build-web/cloud-configure-r2 --target FreeCADWebCloudKernelProbe -j 8", "node tools/run_p6_cloud_action03_kernel_smoke.mjs"], artifacts: { wasm: "freecad-source/build-web/cloud-configure-r2/bin/FreeCADWebCloudKernelProbe.wasm" }, boundaries: ["Only the eight Cloud App Python entry points are inspected; Save/Restore network transfer is not executed."] };
|
|
fs.writeFileSync(path.join(root, "docs/p6/cloud-action-03-kernel.json"), `${JSON.stringify(report, null, 2)}\n`);
|
|
fs.writeFileSync(path.join(root, "docs/freecad-p6-cloud-act03-c-kernel.log"), `${JSON.stringify({ result: report.status, apiCount: success.apiCount, invalidCode: invalid.error.code, resourcesReleased: true })}\n`);
|
|
console.log(JSON.stringify({ result: report.status, apiCount: success.apiCount, invalidCode: invalid.error.code }));
|