* fix(test): honor Ghidra startup budgets in file-offset verification * fix(test): preserve selected startup budgets in direct Ghidra verification * test(ghidra): cover verifier timeout budgets * fix(test): preserve Ghidra MCP request budgets
32 lines
1.3 KiB
JavaScript
32 lines
1.3 KiB
JavaScript
import { parseConfig } from "../../dist/config/parseConfig.js";
|
|
|
|
const FILE_OFFSET_OPERATION_TIMEOUT_MS = 240_000;
|
|
const MAX_TIMER_DELAY_MS = 2_147_483_647;
|
|
|
|
/** Resolve one verifier-owned timeout policy before target I/O or allocation. */
|
|
export function resolveGhidraVerifierTimeouts(environment) {
|
|
const configuration = parseConfig(environment);
|
|
if (!configuration.ok) throw configuration.error;
|
|
const startupTimeoutMs = configuration.value.ghidraStartupTimeoutMs;
|
|
// A cold public query includes provider startup before its analysis request.
|
|
// Preserve the operation budget after the caller-selected startup deadline.
|
|
const publicRequestTimeoutMs =
|
|
startupTimeoutMs + FILE_OFFSET_OPERATION_TIMEOUT_MS;
|
|
if (publicRequestTimeoutMs > MAX_TIMER_DELAY_MS)
|
|
throw new RangeError(
|
|
"The Ghidra startup and verification operation budgets exceed the Node.js timer limit.",
|
|
);
|
|
return {
|
|
clientOptions: { startupTimeoutMs },
|
|
requestOptions: { timeout: publicRequestTimeoutMs },
|
|
};
|
|
}
|
|
|
|
/** Bind every verifier MCP operation to the same owned request budget. */
|
|
export function createGhidraVerifierMcpOperations(client, requestOptions) {
|
|
return {
|
|
connect: (transport) => client.connect(transport, requestOptions),
|
|
callTool: (request) => client.callTool(request, requestOptions),
|
|
};
|
|
}
|