49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
import { execFile } from "node:child_process";
|
|
import { promisify } from "node:util";
|
|
|
|
import { expect, it } from "vitest";
|
|
|
|
import { createStrippedAsarAddon } from "../../fixtures/strippedAsarAddon.js";
|
|
|
|
const execute = promisify(execFile);
|
|
const run = async (arguments_: readonly string[]): Promise<unknown> => {
|
|
const { stdout } = await execute(
|
|
process.execPath,
|
|
["scripts/rea.mjs", ...arguments_, "--json"],
|
|
{ cwd: process.cwd(), maxBuffer: 16 * 1024 * 1024 },
|
|
);
|
|
return JSON.parse(stdout);
|
|
};
|
|
|
|
it.each(["analyze-javascript-application", "analyze"])(
|
|
"%s carries the integrity policy into shared JavaScript analysis",
|
|
async (command) => {
|
|
const { archive, addon } = await createStrippedAsarAddon();
|
|
const result = await run([
|
|
command,
|
|
archive,
|
|
"--integrity-policy",
|
|
"record-and-continue",
|
|
]);
|
|
expect(result).toMatchObject({
|
|
operation: "analyze_javascript_application",
|
|
parameters: { integrity_policy: "record-and-continue" },
|
|
normalized_result: {
|
|
integrity_contradictions: [
|
|
{ logical_path: addon, trust: "observed-untrusted" },
|
|
],
|
|
graph: { coverage: { status: "partial" } },
|
|
},
|
|
});
|
|
},
|
|
);
|
|
|
|
it("rejects the JavaScript integrity policy on binary-only inspection", async () => {
|
|
await expect(
|
|
run(["inspect", "unused.asar", "--integrityPolicy", "record-and-continue"]),
|
|
).rejects.toMatchObject({
|
|
code: 1,
|
|
stdout: expect.stringContaining("Unknown flag: --integrityPolicy"),
|
|
});
|
|
});
|