test: reuse Frida SDK setup across status scenarios
This commit is contained in:
1 parent
4f3d486d8f
commit
5feac72c79
1 file changed
+57
-55
@@ -94,58 +94,60 @@ const createFridaTestProvider = (
|
||||
...overrides,
|
||||
});
|
||||
|
||||
it.each([false, true])(
|
||||
"delivers Frida status summaries with complete retained Evidence (truncated=%s)",
|
||||
async (truncated) => {
|
||||
const id = "00000000-0000-4000-8000-000000000001";
|
||||
const messages = [
|
||||
{
|
||||
type: "send",
|
||||
payload: { token: "caller-selected-nonsecret", rows: [1, 2] },
|
||||
},
|
||||
];
|
||||
let reads = 0;
|
||||
const session = createTestBinarySession(() => {
|
||||
throw new Error("No binary provider");
|
||||
});
|
||||
const server = createServer(
|
||||
{ kind: "session", session },
|
||||
{
|
||||
fridaInstrumentation: createFridaTestProvider({
|
||||
status(sessionId) {
|
||||
reads++;
|
||||
return {
|
||||
sessionId,
|
||||
deviceId: "local",
|
||||
target: "fixture",
|
||||
pid: 10,
|
||||
mode: "attach",
|
||||
state: "running",
|
||||
targetResumeObserved: false,
|
||||
scripts: [],
|
||||
messages,
|
||||
messagesTruncated: truncated,
|
||||
};
|
||||
},
|
||||
}),
|
||||
},
|
||||
);
|
||||
const client = new Client({ name: "frida-status-summary", version: "1" });
|
||||
onTestFinished(async () => {
|
||||
await client.close();
|
||||
await server.close();
|
||||
await session.close();
|
||||
});
|
||||
const [ct, st] = InMemoryTransport.createLinkedPair();
|
||||
await server.connect(st);
|
||||
await client.connect(ct);
|
||||
const tools = (await client.listTools()).tools;
|
||||
const tool = tools.find((t) => t.name === "frida_session_status");
|
||||
if (!tool?.outputSchema) throw new Error("Missing Frida status schema");
|
||||
const ajv = new Ajv2020({ strict: false, validateFormats: false });
|
||||
expect(ajv.validateSchema(tool.inputSchema)).toBe(true);
|
||||
const outputSchema: Record<string, unknown> = tool.outputSchema;
|
||||
expect(ajv.validateSchema(outputSchema)).toBe(true);
|
||||
it("delivers Frida status summaries with complete retained Evidence for both truncation states", async () => {
|
||||
const id = "00000000-0000-4000-8000-000000000001";
|
||||
const messages = [
|
||||
{
|
||||
type: "send",
|
||||
payload: { token: "caller-selected-nonsecret", rows: [1, 2] },
|
||||
},
|
||||
];
|
||||
let reads = 0;
|
||||
let statusTruncated = false;
|
||||
const session = createTestBinarySession(() => {
|
||||
throw new Error("No binary provider");
|
||||
});
|
||||
const server = createServer(
|
||||
{ kind: "session", session },
|
||||
{
|
||||
fridaInstrumentation: createFridaTestProvider({
|
||||
status(sessionId) {
|
||||
reads++;
|
||||
return {
|
||||
sessionId,
|
||||
deviceId: "local",
|
||||
target: "fixture",
|
||||
pid: 10,
|
||||
mode: "attach",
|
||||
state: "running",
|
||||
targetResumeObserved: false,
|
||||
scripts: [],
|
||||
messages,
|
||||
messagesTruncated: statusTruncated,
|
||||
};
|
||||
},
|
||||
}),
|
||||
},
|
||||
);
|
||||
const client = new Client({ name: "frida-status-summary", version: "1" });
|
||||
onTestFinished(async () => {
|
||||
await client.close();
|
||||
await server.close();
|
||||
await session.close();
|
||||
});
|
||||
const [ct, st] = InMemoryTransport.createLinkedPair();
|
||||
await server.connect(st);
|
||||
await client.connect(ct);
|
||||
const tools = (await client.listTools()).tools;
|
||||
const tool = tools.find((t) => t.name === "frida_session_status");
|
||||
if (!tool?.outputSchema) throw new Error("Missing Frida status schema");
|
||||
const ajv = new Ajv2020({ strict: false, validateFormats: false });
|
||||
expect(ajv.validateSchema(tool.inputSchema)).toBe(true);
|
||||
const outputSchema: Record<string, unknown> = tool.outputSchema;
|
||||
expect(ajv.validateSchema(outputSchema)).toBe(true);
|
||||
for (const truncated of [false, true]) {
|
||||
statusTruncated = truncated;
|
||||
const readsBefore = reads;
|
||||
const complete = await client.callTool({
|
||||
name: tool.name,
|
||||
arguments: { session_id: id },
|
||||
@@ -199,7 +201,7 @@ it.each([false, true])(
|
||||
},
|
||||
});
|
||||
expect(retained.structuredContent).toEqual(evidence);
|
||||
expect(reads).toBe(3);
|
||||
expect(reads - readsBefore).toBe(3);
|
||||
const discovered = await client.callTool({
|
||||
name: "get_evidence_bundle",
|
||||
arguments: {
|
||||
@@ -243,8 +245,8 @@ it.each([false, true])(
|
||||
},
|
||||
});
|
||||
expect(rejected.isError).toBe(true);
|
||||
},
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
const expectFridaToolsAvailable = async (client: Client) => {
|
||||
const inventory = await client.callTool({
|
||||
|
||||
Reference in new issue
Block a user