Ctrl K
ComunidadGuías…

scripts/build-windows-browser-vendor.test.mjs

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import { readFileSync } from "node:fs";
import { createHash } from "node:crypto";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { describe, expect, it } from "vitest";
import { WINDOWS_VENDOR_PATCH_SHA256, WINDOWS_VENDOR_PNPM, WINDOWS_VENDOR_RUST, WINDOWS_VENDOR_SOURCE, WINDOWS_VENDOR_TARGET, WINDOWS_VENDOR_VERSION, parseVendorBuildArgs, verifyVendorCandidate, verifyVendorPatch } from "./build-windows-browser-vendor.mjs";
import { verifyAssetBytes } from "./prepare-browser.mjs";

describe("reviewed Windows browser dependency build", () => {
  it("pins the released base, toolchain, vendor revision and exact patch bytes", () => {
    expect(WINDOWS_VENDOR_SOURCE.commit).toBe("eb05921bad874cd2a1b4fa5d1149f1ed26576cae");
    expect(WINDOWS_VENDOR_SOURCE.url).toContain(WINDOWS_VENDOR_SOURCE.commit);
    expect(WINDOWS_VENDOR_TARGET).toBe("x86_64-pc-windows-gnu");
    expect(WINDOWS_VENDOR_VERSION).toBe("0.36.0-omb.2");
    expect(WINDOWS_VENDOR_RUST).toBe("1.97.1");
    expect(WINDOWS_VENDOR_PNPM).toBe("11.1.3");
    expect(WINDOWS_VENDOR_PATCH_SHA256).toMatch(/^[0-9a-f]{64}$/);
    const patch = readFileSync(new URL("../third_party/browser/agent-browser-windows-stdio.patch", import.meta.url));
    expect(() => verifyVendorPatch(patch)).not.toThrow();
    expect(() => verifyVendorPatch(Buffer.concat([patch, Buffer.from("\n")]))).toThrow(/SHA-256/);
    const changed = [...patch.toString().matchAll(/^diff --git a\/(\S+) /gm)].map((match) => match[1]);
    expect(changed).toEqual(["cli/Cargo.lock", "cli/Cargo.toml", "cli/src/connection.rs", "cli/src/main.rs", "cli/src/native/cdp/chrome.rs"]);
    expect(patch.toString()).toContain("SetHandleInformation(handle as isize, HANDLE_FLAG_INHERIT, 0)");
    expect(patch.toString()).not.toContain("run_command_returns_partial_output");
  });

  it("refuses unreviewed source archive bytes", () => {
    expect(() => verifyAssetBytes(Buffer.from("unreviewed source"), WINDOWS_VENDOR_SOURCE)).toThrow(/SHA-256/);
  });

  it("rejects changed candidate bytes or provenance instead of weakening normal release pins", () => {
    const bytes = Buffer.from("synthetic candidate, never executed");
    const provenance = {
      version: WINDOWS_VENDOR_VERSION, target: WINDOWS_VENDOR_TARGET,
      source: WINDOWS_VENDOR_SOURCE, patch: { sha256: WINDOWS_VENDOR_PATCH_SHA256 },
      executable: { asset: "agent-browser-win32-x64.exe", bytes: bytes.length, sha256: createHash("sha256").update(bytes).digest("hex") },
    };
    expect(() => verifyVendorCandidate(provenance, bytes)).not.toThrow();
    expect(() => verifyVendorCandidate(provenance, Buffer.from("wrong"))).toThrow();
    expect(() => verifyVendorCandidate({ ...provenance, version: "0.36.0" }, bytes)).toThrow();
    expect(() => verifyVendorCandidate({ ...provenance, source: { ...WINDOWS_VENDOR_SOURCE, commit: "unreviewed" } }, bytes)).toThrow();
    expect(() => verifyVendorCandidate({ ...provenance, patch: { sha256: "0".repeat(64) } }, bytes)).toThrow();
    expect(() => verifyVendorCandidate({ ...provenance, executable: { ...provenance.executable, sha256: "0".repeat(64) } }, bytes)).toThrow();
  });

  it("requires an explicit absolute output without accepting extra options", () => {
    const output = join(tmpdir(), "omb-vendor-output");
    expect(parseVendorBuildArgs(["--output", output])).toBe(output);
    for (const args of [[], ["--output", "relative"], ["--output", output, "--skip-verify"], ["--source", output]]) {
      expect(() => parseVendorBuildArgs(args)).toThrow(/Usage/);
    }
  });
});