33 lines
1.3 KiB
JavaScript
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);
|
|
});
|
|
});
|