Advance M8-M11 parity workflows
This commit is contained in:
47
web/tests/e2e/m10-domain-browser-gates.spec.ts
Normal file
47
web/tests/e2e/m10-domain-browser-gates.spec.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
import { expect, test } from "@playwright/test";
|
||||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
|
||||
const root = path.resolve(import.meta.dirname, "../../..");
|
||||
const expected = JSON.parse(fs.readFileSync(path.join(root, "tests/golden/M10-15/domain-browser-gates.json"), "utf8"));
|
||||
|
||||
test("M10-15 gates GN, Shader, NLA and Simulation performance, OOM and malicious inputs", async ({ page }) => {
|
||||
test.setTimeout(60_000);
|
||||
await page.goto("/");
|
||||
const results = await page.evaluate(async () => {
|
||||
const domains = ["GN", "SHADER", "NLA", "SIMULATION"] as const;
|
||||
const run = (domain: typeof domains[number]) => new Promise<Record<string, unknown>>((resolve, reject) => {
|
||||
const worker = new Worker("/src/workers/m10-domain-gate-test.worker.ts", { type: "module" });
|
||||
worker.onmessage = (event: MessageEvent<{ ok: boolean; result?: Record<string, unknown>; error?: string }>) => {
|
||||
worker.terminate();
|
||||
if (event.data.ok && event.data.result) resolve(event.data.result);
|
||||
else reject(new Error(event.data.error ?? `${domain} gate failed`));
|
||||
};
|
||||
worker.onerror = (event) => { worker.terminate(); reject(new Error(event.message)); };
|
||||
worker.postMessage({ domain });
|
||||
});
|
||||
return Promise.all(domains.map(run));
|
||||
}) as Array<{
|
||||
domain: string;
|
||||
performanceMs: number;
|
||||
workUnits: number;
|
||||
oomCode: string;
|
||||
maliciousCode: string;
|
||||
recovered: boolean;
|
||||
performanceStatus: string;
|
||||
oomPreventedBeforeAllocation: boolean;
|
||||
}>;
|
||||
|
||||
expect(results.map((result) => result.domain)).toEqual(["GN", "SHADER", "NLA", "SIMULATION"]);
|
||||
for (const result of results) {
|
||||
const gate = expected.domains[result.domain];
|
||||
expect(result.workUnits).toBe(gate.workUnits);
|
||||
expect(result.performanceMs).toBeLessThan(gate.maximumMs);
|
||||
expect(result.performanceStatus).toBe(gate.performanceStatus);
|
||||
expect(result.oomCode).toBe(gate.oomCode);
|
||||
expect(result.maliciousCode).toBe(gate.maliciousCode);
|
||||
expect(result.oomPreventedBeforeAllocation).toBe(true);
|
||||
expect(result.recovered).toBe(true);
|
||||
}
|
||||
console.log("m10-domain-browser-gates", JSON.stringify(results));
|
||||
});
|
||||
Reference in New Issue
Block a user