Preserve reported Program PDB identity, explicit omissions and nullable load state, retaining declared CodeView facts when equivalence is unknown. Bound JSON locator expansion and advance PE/workflow replay revisions without discarding historical Evidence. Main already contains the shared canonical workflow collector. Integrate its unknown-PDB repair and fix the CLI fixture for the new artifact-session dependency. No unrelated pcap repair is included. Validation: 309 focused tests across 15 files pass (2 Windows-only skips), runtime build and check:fast/pre-push pass. Real Windows Ghidra 12.1.4 PUBLIC/JDK 21.0.12.1 uses the public where.exe/PDB pair; 17 relevant production files match verified ca24903f. MCP cold/warm normalized results match and the backward graph has 3 successful nodes. Inputs are unchanged and no owned Java/Node processes remain. CLI inspection keeps its earlier exact-source scope. NB10 omission uses regression fixtures, without a real NB10 provider claim. Tests keep 2-core affinity and 512 MiB Node/Java heaps. Retain the 600s analysis and 30s initialization timeout observations alongside the successful test-only extended-budget run; no product-default or cross-revision speedup claim. Fixes #2259
56 lines
1.7 KiB
TypeScript
56 lines
1.7 KiB
TypeScript
import { expect, it } from "vitest";
|
|
import { parseConfig } from "../../src/config/parseConfig.js";
|
|
import { runDirectAnalysis } from "../../src/application/DirectAnalysis.js";
|
|
import { createAnalysisExecution } from "../../src/application/AnalysisProvider.js";
|
|
import { ok } from "../../src/domain/result.js";
|
|
import {
|
|
createBinarySessionTargets,
|
|
createTestBinarySession,
|
|
} from "../fixtures/binarySession.js";
|
|
|
|
it("retains provider coverage caveats in a composed CLI result and closes the session", async () => {
|
|
const [path] = await createBinarySessionTargets();
|
|
const limitation = "Companion PDB symbol coverage is unverified.";
|
|
let reads = 0;
|
|
let closed = 0;
|
|
const createSession = () =>
|
|
createTestBinarySession(() => ({
|
|
execute: async (operation) => {
|
|
reads++;
|
|
return ok(
|
|
createAnalysisExecution(
|
|
operation === "current_document" ? "fixture" : [],
|
|
{ id: "fixture", name: "Fixture", version: "1" },
|
|
{ limitations: [limitation] },
|
|
),
|
|
);
|
|
},
|
|
close: async () => {
|
|
closed++;
|
|
return ok(null);
|
|
},
|
|
}));
|
|
const output = await runDirectAnalysis(
|
|
{
|
|
readConfiguration: () => parseConfig({}),
|
|
createBinarySession: createSession,
|
|
createManagedBinarySession: createSession,
|
|
createArtifactBinarySession: createSession,
|
|
},
|
|
path,
|
|
"binary_overview",
|
|
{},
|
|
);
|
|
expect(output).toMatchObject({
|
|
limitations: ["Derived by an REA composed workflow.", limitation],
|
|
normalized_result: {
|
|
document: "fixture",
|
|
segment_count: 0,
|
|
procedure_count: 0,
|
|
string_count: 0,
|
|
},
|
|
});
|
|
expect(reads).toBe(5);
|
|
expect(closed).toBe(1);
|
|
});
|