mirror of
https://github.com/morluto/rea.git
synced 2026-10-11 21:39:55 +00:00
* feat(firmware): integrate Binwalk and Unblob analysis * fix(firmware): verify published files and namespace source references * test(firmware): isolate extractor dependency failure from process cleanup * fix(firmware): retain actionable report and cleanup diagnostics * test: assert retained batch output failure diagnostics
56 lines
2.2 KiB
TypeScript
56 lines
2.2 KiB
TypeScript
import { Client, InMemoryTransport } from "@modelcontextprotocol/client";
|
|
import { expect, it as test, onTestFinished } from "vitest";
|
|
import { FIRMWARE_TOOL_CONTRACTS } from "../../../src/contracts/firmwareToolContracts.js";
|
|
import { parseEvidence } from "../../../src/domain/evidence.js";
|
|
import { createServer } from "../../../src/server/createServer.js";
|
|
import { createTestBinarySession } from "../../fixtures/binarySession.js";
|
|
import {
|
|
firmwareFixture,
|
|
assertFirmwareCleanup,
|
|
} from "../../fixtures/firmware/provider.js";
|
|
|
|
const it = test.skipIf(process.platform !== "linux");
|
|
|
|
it("executes named firmware contracts with inline Evidence and no native binary admission", async () => {
|
|
const fixture = await firmwareFixture();
|
|
const session = createTestBinarySession(() => {
|
|
throw new Error("Firmware inspection must not acquire a native provider");
|
|
});
|
|
const server = createServer(session, session, {
|
|
firmwareAnalysis: fixture.provider,
|
|
});
|
|
const client = new Client({ name: "firmware-regression", version: "1" });
|
|
onTestFinished(async () => {
|
|
await client.close();
|
|
await server.close();
|
|
await session.close();
|
|
});
|
|
const [clientTransport, serverTransport] =
|
|
InMemoryTransport.createLinkedPair();
|
|
await server.connect(serverTransport);
|
|
await client.connect(clientTransport);
|
|
const advertised = await client.listTools();
|
|
for (const contract of FIRMWARE_TOOL_CONTRACTS) {
|
|
expect(
|
|
advertised.tools.find((tool) => tool.name === contract.name)?.annotations,
|
|
).toMatchObject(contract.annotations);
|
|
const response = await client.callTool({
|
|
name: contract.name,
|
|
arguments: {
|
|
path: fixture.path,
|
|
...(contract.name === "extract_firmware"
|
|
? { output_directory: fixture.output }
|
|
: {}),
|
|
},
|
|
});
|
|
expect(response.isError, JSON.stringify(response)).not.toBe(true);
|
|
const result = contract.outputSchema.parse(response.structuredContent);
|
|
const evidence = parseEvidence(result.evidence);
|
|
expect(result.result).toEqual(evidence.normalized_result);
|
|
expect(result.evidence_id).toBe(evidence.evidence_id);
|
|
expect(evidence.operation).toBe(contract.name);
|
|
expect(evidence.raw_result).not.toBeNull();
|
|
}
|
|
await assertFirmwareCleanup(fixture.launches);
|
|
});
|