39 lines
1.2 KiB
JavaScript
39 lines
1.2 KiB
JavaScript
import { describe, it, expect, beforeEach } from 'vitest';
|
|
import fs from 'node:fs/promises';
|
|
import path from 'node:path';
|
|
import os from 'node:os';
|
|
import { BlobStore } from '../../lib/ingest/blob_store.js';
|
|
|
|
let root, store;
|
|
beforeEach(async () => {
|
|
root = await fs.mkdtemp(path.join(os.tmpdir(), 'void-blob-'));
|
|
store = new BlobStore(root);
|
|
});
|
|
|
|
describe('blob_store', () => {
|
|
it('hashes content and resolves a sharded path', async () => {
|
|
const buf = Buffer.from('void');
|
|
const sha = await store.hash(buf);
|
|
expect(sha).toMatch(/^[0-9a-f]{64}$/);
|
|
const p = store.path(sha);
|
|
expect(p.startsWith(root)).toBe(true);
|
|
expect(p.includes(sha.slice(0, 2))).toBe(true);
|
|
});
|
|
|
|
it('write is idempotent on identical content', async () => {
|
|
const buf = Buffer.from('void');
|
|
const a = await store.write(buf);
|
|
const b = await store.write(buf);
|
|
expect(a.path).toBe(b.path);
|
|
expect(a.sha).toBe(b.sha);
|
|
const onDisk = await fs.readFile(a.path);
|
|
expect(onDisk.equals(buf)).toBe(true);
|
|
});
|
|
|
|
it('distinct content gets distinct paths', async () => {
|
|
const a = await store.write(Buffer.from('void-one'));
|
|
const b = await store.write(Buffer.from('void-two'));
|
|
expect(a.path).not.toBe(b.path);
|
|
});
|
|
});
|