30 lines
1.9 KiB
JavaScript
30 lines
1.9 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import { MemoryStorage, WorkspaceJournal } from "../workspace/journal.mjs";
|
|
import { verifyOfflinePackage } from "../workspace/migration.mjs";
|
|
import { ProjectWorkflow } from "../app/project-workflow.mjs";
|
|
import { ReplayTimeline } from "./replay.mjs";
|
|
import { createCheckpoint, recoverSimulation } from "../workspace/recovery.mjs";
|
|
|
|
const contextId = "linuxcnc-2.10.0-pre0-wasm-m1-py-c1";
|
|
const storage = new MemoryStorage();
|
|
const journal = new WorkspaceJournal(storage, { projectId: "faults" });
|
|
journal.prepare("op-1", [{ path: "config/main.ini", data: "[EMC]\n" }]);
|
|
journal.commit("op-1");
|
|
const half = new MemoryStorage(Object.fromEntries(storage.entries()));
|
|
const halfJournal = new WorkspaceJournal(half, { projectId: "faults" });
|
|
halfJournal.prepare("op-half", [{ path: "programs/main.ngc", data: "G0 X1\n" }]);
|
|
assert.equal(halfJournal.recover().half_commits.length, 1);
|
|
const timeline = new ReplayTimeline();
|
|
timeline.appendEvent(1, 0, "SESSION_READY", {});
|
|
timeline.checkpoint(1, 0, { tick: 0 });
|
|
const checkpoint = createCheckpoint({ contextId, timeline, state: { tick: 0 }, operations: [] });
|
|
const damaged = structuredClone(checkpoint); damaged.state.tick = 9;
|
|
assert.equal(recoverSimulation({ checkpoint: damaged }).status, "blocked");
|
|
const workflow = new ProjectWorkflow({ contextId, storage: new MemoryStorage(), projectId: "offline" });
|
|
workflow.importFiles([{ path: "config/main.ini", data: "[EMC]\n" }]);
|
|
const pkg = workflow.package({ timeline, checkpoint, committedSeq: 1 });
|
|
const offline = workflow.offline(pkg, [{ path: "ui/index.html", data: "<main>" }]);
|
|
assert.throws(() => verifyOfflinePackage(offline, { contextId, workspacePackage: pkg, available: [], online: false }), /offline_resource_invalid/);
|
|
assert.equal(verifyOfflinePackage(offline, { contextId, workspacePackage: pkg, available: [], online: true }).status, "network_required");
|
|
console.log("recovery_offline_faults=passed scenarios=5");
|