mirror of
https://github.com/morluto/rea.git
synced 2026-10-18 20:10:13 -05:00
Use one cleanup owner across browser, Frida and JEB verifiers. Attempt all independent cleanup tasks, retain primary failures, and emit successful reports only after cleanup. Remove the superseded browser helper and duplicate tests. Validation: cleanup aggregation and runtime fixture tests, build and static checks passed. No real Frida or JEB run.
71 lines
2.4 KiB
JavaScript
71 lines
2.4 KiB
JavaScript
#!/usr/bin/env node
|
|
import assert from "node:assert/strict";
|
|
import { mkdtemp, readFile, rm } from "node:fs/promises";
|
|
import { tmpdir } from "node:os";
|
|
import { join } from "node:path";
|
|
import { chromium } from "playwright-core";
|
|
import { startBrowserVerifierSite } from "./fixtures/browser-verifier-site.mjs";
|
|
import { verifyBrowserDomDestinations } from "./lib/browser-dom-destinations-e2e.mjs";
|
|
import { closeVerifierResources } from "./lib/verifier-cleanup.mjs";
|
|
import { requireOrdinaryWindowsVerifierCaller } from "./lib/windows-ordinary-user-verifier.mjs";
|
|
|
|
const executable = process.env.REA_BROWSER_EXECUTABLE;
|
|
if (!executable)
|
|
throw new Error("verify:browser:dom requires REA_BROWSER_EXECUTABLE");
|
|
await requireOrdinaryWindowsVerifierCaller();
|
|
let profile;
|
|
let site;
|
|
let context;
|
|
let report;
|
|
let primaryError;
|
|
try {
|
|
profile = await mkdtemp(join(tmpdir(), "rea-browser-dom-"));
|
|
site = await startBrowserVerifierSite();
|
|
context = await chromium.launchPersistentContext(profile, {
|
|
executablePath: executable,
|
|
headless: true,
|
|
args: ["--remote-debugging-port=0"],
|
|
});
|
|
const page = context.pages()[0] ?? (await context.newPage());
|
|
await page.goto(`${site.origin}/app?selected=fixture#section`);
|
|
const native = await page.evaluate(() =>
|
|
[
|
|
...document.querySelectorAll("form,button[formaction],input[formaction]"),
|
|
].map((element) =>
|
|
element.tagName === "FORM" ? element.action : element.formAction,
|
|
),
|
|
);
|
|
assert.deepEqual(native, Array(4).fill(page.url()));
|
|
const session = await context.newCDPSession(page);
|
|
const { targetInfo } = await session.send("Target.getTargetInfo");
|
|
await session.detach();
|
|
const [port] = (
|
|
await readFile(join(profile, "DevToolsActivePort"), "utf8")
|
|
).split("\n");
|
|
const result = await verifyBrowserDomDestinations(
|
|
{
|
|
cdp_endpoint: `http://127.0.0.1:${port}`,
|
|
target_id: targetInfo.targetId,
|
|
},
|
|
process.argv[2],
|
|
page.url(),
|
|
);
|
|
report = {
|
|
...result,
|
|
browser: context.browser().version(),
|
|
native_oracle: true,
|
|
verified: true,
|
|
};
|
|
} catch (cause) {
|
|
primaryError = cause;
|
|
throw cause;
|
|
} finally {
|
|
const cleanup = [];
|
|
if (context !== undefined) cleanup.push(() => context.close());
|
|
if (site !== undefined) cleanup.push(() => site.close());
|
|
if (profile !== undefined)
|
|
cleanup.push(() => rm(profile, { recursive: true, force: true }));
|
|
await closeVerifierResources(cleanup, primaryError);
|
|
}
|
|
process.stdout.write(`${JSON.stringify(report)}\n`);
|