24 lines
1.5 KiB
JavaScript
24 lines
1.5 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import { SimSession, CONTEXT_ID } from "./sim-session.mjs";
|
|
|
|
let lastSeq = 0;
|
|
const core = {
|
|
_sim_protocol_reset() {},
|
|
_sim_protocol_accept(...args) { if (args[1] !== lastSeq + 1) return -101; lastSeq = args[1]; return 0; },
|
|
_sim_create() { return 0; },
|
|
};
|
|
const session = new SimSession(core);
|
|
const base = { schema_version: 1, context_id: CONTEXT_ID, session_id: "python-session-1" };
|
|
session.accept({ ...base, kind: "HELLO", seq: 1, payload: {} });
|
|
session.accept({ ...base, kind: "SESSION_ATTACH", seq: 2, payload: {} });
|
|
assert.equal(session.accept({ ...base, kind: "PYTHON_IMPORT", seq: 3, operation_id: "py-import", payload: { module: "hal" } }).payload.status, "verified");
|
|
assert.equal(session.accept({ ...base, kind: "PYTHON_CALL", seq: 4, operation_id: "py-call", payload: { module: "hal", symbol: "pin", args: ["demo.pin"] } }).payload.status, "verified");
|
|
const checkpointResponse = session.accept({ ...base, kind: "CHECKPOINT", seq: 5, operation_id: "checkpoint", payload: {} });
|
|
const checkpoint = checkpointResponse.payload.checkpoint;
|
|
session.accept({ ...base, kind: "PYTHON_CALL", seq: 6, operation_id: "py-call-2", payload: { module: "gstat", symbol: "state", args: [] } });
|
|
const expected = session.python.hash();
|
|
const result = session.restoreCheckpoint(checkpoint, session.timeline.export(), (operation) => operation);
|
|
assert.equal(result.status, "recovered");
|
|
assert.equal(session.python.hash(), expected);
|
|
console.log(`python_session=passed hash=${expected}`);
|