Files
mimic-big/backend/tests/unit/test_storage_blob.py

50 lines
1.5 KiB
Python
Raw Normal View History

"""Content-addressed gzip blob store (D-012)."""
from __future__ import annotations
import gzip
import hashlib
import pytest
from mimic.storage.blob import blob_path, store_blob
def test_blob_path_uses_two_byte_pairs(tmp_path) -> None:
digest = "ab" + "cd" + "ef" * 30
path = blob_path(tmp_path, digest)
assert path == tmp_path / "ab" / "cd" / f"{digest}.gz"
def test_blob_path_rejects_invalid_digest(tmp_path) -> None:
with pytest.raises(ValueError, match="invalid sha256"):
blob_path(tmp_path, "not-a-digest")
def test_store_blob_writes_gzip_and_returns_digest(tmp_path) -> None:
payload = b"hello world\n"
expected = hashlib.sha256(payload).hexdigest()
digest, path = store_blob(tmp_path, payload)
assert digest == expected
assert path == tmp_path / expected[0:2] / expected[2:4] / f"{expected}.gz"
with gzip.open(path, "rb") as fh:
assert fh.read() == payload
def test_store_blob_is_idempotent(tmp_path) -> None:
payload = b"same content"
digest1, path1 = store_blob(tmp_path, payload)
mtime_before = path1.stat().st_mtime_ns
digest2, path2 = store_blob(tmp_path, payload)
assert digest1 == digest2
assert path1 == path2
assert path2.stat().st_mtime_ns == mtime_before
def test_store_blob_dedupes_distinct_payloads(tmp_path) -> None:
_, p1 = store_blob(tmp_path, b"alpha")
_, p2 = store_blob(tmp_path, b"beta")
assert p1 != p2
assert p1.exists()
assert p2.exists()