3 lines
3.3 KiB
JavaScript
3 lines
3.3 KiB
JavaScript
#!/usr/bin/env node
|
|
import assert from "node:assert/strict";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 fp=process.argv[2];if(!fp)throw Error("compiled Sandbox save facade required");const f=await import(pathToFileURL(path.resolve(fp)));const e=await import(pathToFileURL(path.join(path.dirname(path.resolve(fp)),"facade-envelope.js")));const build=path.resolve(process.argv[3]??path.join(root,"freecad-source/build-web/configure/bin"));globalThis.__dirname=`${build}${path.sep}`;globalThis.require=createRequire(import.meta.url);const l=await import(pathToFileURL(path.join(build,"FreeCADWebSandboxRuntimeProbe.js")));const k=await l.default({wasmBinary:fs.readFileSync(path.join(build,"FreeCADWebSandboxRuntimeProbe.wasm"))});const q=new e.FacadeSerialQueue();let active=0,maxActive=0;async function d(r,source=k){const out=await q.dispatch(r,async(p,sig)=>{active++;maxActive=Math.max(maxActive,active);try{return await f.handleSandboxSave(p,sig,source)}finally{active--}});return out}const success=await d(f.createSandboxSaveRequest("sdb-act04-e-success"));const expectedError=await d(f.createSandboxSaveRequest("sdb-act04-e-error",{...f.SANDBOX_SAVE_FIXTURE,path:"/tmp/SandboxMissing.FCStd"}));const duplicate=await d(f.createSandboxSaveRequest("sdb-act04-e-success"));const delayed=new Promise(r=>setTimeout(()=>r(k),0));const cancelRequest=f.createSandboxSaveRequest("sdb-act04-e-cancel");const cancelPromise=d(cancelRequest,delayed);const cancelAccepted=q.cancel(e.createCancel("sdb-act04-e-cancel-message",cancelRequest.requestId,"sandbox-save"));const cancelled=await cancelPromise;const afterCancel=await d(f.createSandboxSaveRequest("sdb-act04-e-after-cancel"));assert.equal(success.kind,"result");assert.equal(success.result.roundTrip,true);assert.equal(expectedError.error.code,"invalid_fixture");assert.equal(duplicate.error.code,"duplicate_request");assert.equal(cancelAccepted,true);assert.equal(cancelled.error.code,"cancelled");assert.deepEqual(afterCancel.result,success.result);assert.equal(maxActive,1);const report={schema:"freecad-web-p6-sandbox-action-04-facade/v1",taskId:"FW-P6-SDB-ACT-04-E",module:"Sandbox",action:f.SANDBOX_SAVE_COMMAND,result:"pass",envelopeSchema:"freecad-web-facade/v1",typedSchema:f.SANDBOX_SAVE_SCHEMA,responses:{success,expectedError,duplicate,cancelled,afterCancel},sequencing:{maxActive,requestCount:5,responseCount:5,cancelAccepted},state:{unchangedAfterCancel:true},schemaChecks:{request:true,result:true,expectedError:true,duplicate:true,cancel:true,noNativePointers:!JSON.stringify({success,expectedError,duplicate,cancelled,afterCancel}).match(/pointer|native|handle/i)},artifacts:{kernel:"docs/p6/sandbox-action-04-kernel.json",recovery:"docs/p6/sandbox-action-04-recovery.json",workerLog:"docs/freecad-p6-sandbox-action-04-e-facade.log"}};fs.writeFileSync(path.join(root,"docs/p6/sandbox-action-04-facade.json"),`${JSON.stringify(report,null,2)}\n`);fs.writeFileSync(path.join(root,"docs/freecad-p6-sandbox-action-04-e-facade.log"),`${JSON.stringify({result:report.result,maxActive,requests:5,cancelAccepted})}\n`);console.log(JSON.stringify({result:report.result,maxActive,requests:5,cancelAccepted}));
|