agent-orchestrator/frontend/scripts/blockmap.test.mjs

33 lines
1.3 KiB
JavaScript

// @vitest-environment node
// frontend/scripts/blockmap.test.mjs
import { describe, it, expect } from "vitest";
import { writeBlockmap } from "./blockmap.mjs";
import { mkdtempSync, writeFileSync, existsSync, readFileSync, statSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { createHash } from "node:crypto";
describe("writeBlockmap", () => {
it("writes a gzip sidecar and returns the file's base64 sha512 + size", async () => {
const dir = mkdtempSync(join(tmpdir(), "bm-"));
const file = join(dir, "artifact.bin");
// ~200KB of varied bytes so the chunker produces multiple chunks.
const buf = Buffer.alloc(200_000);
for (let i = 0; i < buf.length; i++) buf[i] = (i * 37) % 256;
writeFileSync(file, buf);
const { sha512, size } = await writeBlockmap(file);
expect(size).toBe(buf.length);
// Must match electron-updater's expectation: base64 SHA-512 of the raw file.
expect(sha512).toBe(createHash("sha512").update(buf).digest("base64"));
// Sidecar exists, is non-empty, and is gzip (magic bytes 1f 8b).
expect(existsSync(`${file}.blockmap`)).toBe(true);
const sidecar = readFileSync(`${file}.blockmap`);
expect(sidecar.length).toBeGreaterThan(0);
expect(sidecar[0]).toBe(0x1f);
expect(sidecar[1]).toBe(0x8b);
expect(statSync(`${file}.blockmap`).size).toBe(sidecar.length);
});
});