mirror of
https://github.com/Youzini-afk/ST-Bionic-Memory-Ecology.git
synced 2026-05-15 22:30:38 +08:00
257 lines
9.0 KiB
JavaScript
257 lines
9.0 KiB
JavaScript
import assert from "node:assert/strict";
|
|
|
|
import {
|
|
buildPersistDelta,
|
|
evaluatePersistNativeDeltaGate,
|
|
resetPersistRecordSerializationCaches,
|
|
resolvePersistNativeDeltaBridgeMode,
|
|
resolvePersistNativeDeltaGateOptions,
|
|
shouldUseNativePersistDeltaForSnapshots,
|
|
} from "../sync/bme-db.js";
|
|
|
|
const beforeSnapshot = {
|
|
meta: { chatId: "chat-native", revision: 1, lastModified: 1 },
|
|
state: { lastProcessedFloor: 1, extractionCount: 1 },
|
|
nodes: [{ id: "n1", type: "event", fields: { text: "before" }, updatedAt: 1 }],
|
|
edges: [],
|
|
tombstones: [],
|
|
};
|
|
|
|
const afterSnapshot = {
|
|
meta: { chatId: "chat-native", revision: 2, lastModified: 2 },
|
|
state: { lastProcessedFloor: 2, extractionCount: 2 },
|
|
nodes: [{ id: "n1", type: "event", fields: { text: "after" }, updatedAt: 2 }],
|
|
edges: [],
|
|
tombstones: [],
|
|
};
|
|
|
|
let fallbackDiagnostics = null;
|
|
const fallbackDelta = buildPersistDelta(beforeSnapshot, afterSnapshot, {
|
|
onDiagnostics(snapshot) {
|
|
fallbackDiagnostics = snapshot;
|
|
},
|
|
});
|
|
assert.equal(fallbackDelta.upsertNodes.length, 1);
|
|
assert.equal(fallbackDelta.deleteNodeIds.length, 0);
|
|
assert.equal(fallbackDiagnostics.path, "js");
|
|
assert.equal(fallbackDiagnostics.requestedNative, false);
|
|
assert.equal(fallbackDiagnostics.usedNative, false);
|
|
assert.equal(Number.isFinite(fallbackDiagnostics.buildMs), true);
|
|
assert.equal(Number.isFinite(fallbackDiagnostics.prepareMs), true);
|
|
assert.equal(Number.isFinite(fallbackDiagnostics.lookupMs), true);
|
|
assert.equal(Number.isFinite(fallbackDiagnostics.jsDiffMs), true);
|
|
assert.equal(fallbackDiagnostics.serializationCacheMisses > 0, true);
|
|
|
|
const defaultGate = resolvePersistNativeDeltaGateOptions({});
|
|
assert.equal(defaultGate.minSnapshotRecords, 20000);
|
|
assert.equal(defaultGate.minStructuralDelta, 600);
|
|
assert.equal(defaultGate.minCombinedSerializedChars, 4000000);
|
|
assert.equal(resolvePersistNativeDeltaBridgeMode({}), "json");
|
|
assert.equal(resolvePersistNativeDeltaBridgeMode({ persistNativeDeltaBridgeMode: "hash" }), "hash");
|
|
assert.equal(resolvePersistNativeDeltaBridgeMode({ persistNativeDeltaBridgeMode: "unknown" }), "json");
|
|
assert.equal(
|
|
shouldUseNativePersistDeltaForSnapshots(beforeSnapshot, afterSnapshot, defaultGate),
|
|
false,
|
|
);
|
|
const payloadGate = evaluatePersistNativeDeltaGate(beforeSnapshot, afterSnapshot, {
|
|
minSnapshotRecords: 0,
|
|
minStructuralDelta: 0,
|
|
minCombinedSerializedChars: 200,
|
|
measuredCombinedSerializedChars: 120,
|
|
});
|
|
assert.equal(payloadGate.allowed, false);
|
|
assert.deepEqual(payloadGate.reasons, ["below-serialized-chars-threshold"]);
|
|
assert.equal(
|
|
shouldUseNativePersistDeltaForSnapshots(beforeSnapshot, afterSnapshot, {
|
|
minSnapshotRecords: 1,
|
|
minStructuralDelta: 0,
|
|
}),
|
|
true,
|
|
);
|
|
|
|
const largeBeforeSnapshot = {
|
|
nodes: new Array(20500).fill(0),
|
|
edges: new Array(200).fill(0),
|
|
tombstones: [],
|
|
};
|
|
const largeAfterSnapshot = {
|
|
nodes: new Array(21120).fill(0),
|
|
edges: new Array(200).fill(0),
|
|
tombstones: [],
|
|
};
|
|
assert.equal(
|
|
shouldUseNativePersistDeltaForSnapshots(
|
|
largeBeforeSnapshot,
|
|
largeAfterSnapshot,
|
|
defaultGate,
|
|
),
|
|
true,
|
|
);
|
|
|
|
const originalNativeBuilder = globalThis.__stBmeNativeBuildPersistDelta;
|
|
|
|
globalThis.__stBmeNativeBuildPersistDelta = () => ({
|
|
upsertNodes: [{ id: "native-node" }],
|
|
upsertEdges: [{ id: "native-edge" }],
|
|
deleteNodeIds: ["native-delete-node"],
|
|
deleteEdgeIds: ["native-delete-edge"],
|
|
tombstones: [{ id: "node:native-delete-node", kind: "node", targetId: "native-delete-node" }],
|
|
runtimeMetaPatch: { native: true },
|
|
});
|
|
|
|
let nativeDiagnostics = null;
|
|
const nativeDelta = buildPersistDelta(beforeSnapshot, afterSnapshot, {
|
|
useNativeDelta: true,
|
|
minSnapshotRecords: 0,
|
|
minStructuralDelta: 0,
|
|
minCombinedSerializedChars: 0,
|
|
runtimeMetaPatch: { jsPatch: true },
|
|
onDiagnostics(snapshot) {
|
|
nativeDiagnostics = snapshot;
|
|
},
|
|
});
|
|
assert.deepEqual(nativeDelta.upsertNodes, [{ id: "native-node" }]);
|
|
assert.deepEqual(nativeDelta.deleteNodeIds, ["native-delete-node"]);
|
|
assert.equal(nativeDelta.runtimeMetaPatch.native, true);
|
|
assert.equal(nativeDelta.runtimeMetaPatch.jsPatch, true);
|
|
assert.equal(nativeDiagnostics.path, "native-full");
|
|
assert.equal(nativeDiagnostics.requestedNative, true);
|
|
assert.equal(nativeDiagnostics.usedNative, true);
|
|
assert.equal(Number.isFinite(nativeDiagnostics.prepareMs), true);
|
|
assert.equal(Number.isFinite(nativeDiagnostics.nativeAttemptMs), true);
|
|
assert.equal(Number.isFinite(nativeDiagnostics.hydrateMs), true);
|
|
|
|
let payloadGateDiagnostics = null;
|
|
let payloadGateBuilderCalled = false;
|
|
globalThis.__stBmeNativeBuildPersistDelta = () => {
|
|
payloadGateBuilderCalled = true;
|
|
return { upsertNodes: [] };
|
|
};
|
|
const payloadGatedDelta = buildPersistDelta(beforeSnapshot, afterSnapshot, {
|
|
useNativeDelta: true,
|
|
minSnapshotRecords: 0,
|
|
minStructuralDelta: 0,
|
|
minCombinedSerializedChars: 1000,
|
|
onDiagnostics(snapshot) {
|
|
payloadGateDiagnostics = snapshot;
|
|
},
|
|
});
|
|
assert.equal(payloadGateBuilderCalled, false);
|
|
assert.equal(payloadGatedDelta.upsertNodes.length, 1);
|
|
assert.equal(payloadGateDiagnostics.path, "js");
|
|
assert.equal(payloadGateDiagnostics.nativeAttemptStatus, "gated-out");
|
|
assert.equal(payloadGateDiagnostics.gateAllowed, false);
|
|
assert.deepEqual(payloadGateDiagnostics.gateReasons, ["below-serialized-chars-threshold"]);
|
|
assert.equal(Number.isFinite(payloadGateDiagnostics.lookupMs), true);
|
|
assert.equal(Number.isFinite(payloadGateDiagnostics.jsDiffMs), true);
|
|
|
|
globalThis.__stBmeNativeBuildPersistDelta = (_before, _after, options = {}) => {
|
|
assert.equal(Boolean(options?.preparedDeltaInput), true);
|
|
return {
|
|
upsertNodeIds: ["n1"],
|
|
upsertEdgeIds: [],
|
|
deleteNodeIds: [],
|
|
deleteEdgeIds: [],
|
|
upsertTombstoneIds: [],
|
|
};
|
|
};
|
|
|
|
let compactDiagnostics = null;
|
|
const compactNativeDelta = buildPersistDelta(beforeSnapshot, afterSnapshot, {
|
|
useNativeDelta: true,
|
|
minSnapshotRecords: 0,
|
|
minStructuralDelta: 0,
|
|
minCombinedSerializedChars: 0,
|
|
runtimeMetaPatch: { compact: true },
|
|
onDiagnostics(snapshot) {
|
|
compactDiagnostics = snapshot;
|
|
},
|
|
});
|
|
assert.deepEqual(compactNativeDelta.upsertNodes, [
|
|
{ id: "n1", type: "event", fields: { text: "after" }, updatedAt: 2 },
|
|
]);
|
|
assert.deepEqual(compactNativeDelta.upsertEdges, []);
|
|
assert.deepEqual(compactNativeDelta.deleteNodeIds, []);
|
|
assert.equal(compactNativeDelta.runtimeMetaPatch.compact, true);
|
|
assert.equal(compactNativeDelta.runtimeMetaPatch.chatId, "chat-native");
|
|
assert.equal(compactDiagnostics.path, "native-compact-json");
|
|
assert.equal(compactDiagnostics.preparedBridgeMode, "json");
|
|
assert.equal(compactDiagnostics.requestedBridgeMode, "json");
|
|
assert.equal(compactDiagnostics.usedNative, true);
|
|
assert.equal(Number.isFinite(compactDiagnostics.nativeAttemptMs), true);
|
|
assert.equal(Number.isFinite(compactDiagnostics.hydrateMs), true);
|
|
|
|
let hashDiagnostics = null;
|
|
const hashNativeDelta = buildPersistDelta(beforeSnapshot, afterSnapshot, {
|
|
useNativeDelta: true,
|
|
minSnapshotRecords: 0,
|
|
minStructuralDelta: 0,
|
|
minCombinedSerializedChars: 0,
|
|
persistNativeDeltaBridgeMode: "hash",
|
|
runtimeMetaPatch: { hashMode: true },
|
|
onDiagnostics(snapshot) {
|
|
hashDiagnostics = snapshot;
|
|
},
|
|
});
|
|
assert.deepEqual(hashNativeDelta.upsertNodes, [
|
|
{ id: "n1", type: "event", fields: { text: "after" }, updatedAt: 2 },
|
|
]);
|
|
assert.equal(hashNativeDelta.runtimeMetaPatch.hashMode, true);
|
|
assert.equal(hashDiagnostics.path, "native-compact-hash");
|
|
assert.equal(hashDiagnostics.preparedBridgeMode, "hash");
|
|
assert.equal(hashDiagnostics.requestedBridgeMode, "hash");
|
|
assert.equal(hashDiagnostics.usedNative, true);
|
|
assert.equal(Number.isFinite(hashDiagnostics.nativeAttemptMs), true);
|
|
assert.equal(Number.isFinite(hashDiagnostics.hydrateMs), true);
|
|
|
|
let tokenCacheDiagnostics = null;
|
|
buildPersistDelta(
|
|
JSON.parse(JSON.stringify(beforeSnapshot)),
|
|
JSON.parse(JSON.stringify(afterSnapshot)),
|
|
{
|
|
onDiagnostics(snapshot) {
|
|
tokenCacheDiagnostics = snapshot;
|
|
},
|
|
},
|
|
);
|
|
assert.equal(tokenCacheDiagnostics.serializationCacheTokenHits > 0, true);
|
|
|
|
resetPersistRecordSerializationCaches();
|
|
let preparedCacheColdDiagnostics = null;
|
|
buildPersistDelta(beforeSnapshot, afterSnapshot, {
|
|
onDiagnostics(snapshot) {
|
|
preparedCacheColdDiagnostics = snapshot;
|
|
},
|
|
});
|
|
let preparedCacheWarmDiagnostics = null;
|
|
buildPersistDelta(beforeSnapshot, afterSnapshot, {
|
|
onDiagnostics(snapshot) {
|
|
preparedCacheWarmDiagnostics = snapshot;
|
|
},
|
|
});
|
|
assert.equal(preparedCacheColdDiagnostics.preparedRecordSetCacheMisses > 0, true);
|
|
assert.equal(preparedCacheWarmDiagnostics.preparedRecordSetCacheHits > 0, true);
|
|
|
|
delete globalThis.__stBmeNativeBuildPersistDelta;
|
|
|
|
let threwUnavailable = false;
|
|
try {
|
|
buildPersistDelta(beforeSnapshot, afterSnapshot, {
|
|
useNativeDelta: true,
|
|
minSnapshotRecords: 0,
|
|
minStructuralDelta: 0,
|
|
minCombinedSerializedChars: 0,
|
|
nativeFailOpen: false,
|
|
});
|
|
} catch (error) {
|
|
threwUnavailable =
|
|
String(error?.message || "") === "native-persist-delta-builder-unavailable";
|
|
}
|
|
assert.equal(threwUnavailable, true);
|
|
|
|
if (typeof originalNativeBuilder === "function") {
|
|
globalThis.__stBmeNativeBuildPersistDelta = originalNativeBuilder;
|
|
}
|
|
|
|
console.log("native-persist-delta-hook tests passed");
|