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>((resolve, reject) => { const worker = new Worker("/src/workers/m10-domain-gate-test.worker.ts", { type: "module" }); worker.onmessage = (event: MessageEvent<{ ok: boolean; result?: Record; 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)); });