Files
imagefind/tests/test_model_bundle.py
T

36 lines
1.4 KiB
Python

import hashlib
import json
import runpy
import sys
import tarfile
from pathlib import Path
def test_model_bundle_embeds_manifest_without_mutating_source(tmp_path: Path, monkeypatch):
source = tmp_path / "source"
image_dir = source / "visual" / "image"
text_dir = source / "visual" / "text"
image_dir.mkdir(parents=True)
text_dir.mkdir(parents=True)
model = image_dir / "model.bin"
model.write_bytes(b"image model")
(text_dir / "config.json").write_text("{}", encoding="utf-8")
source_manifest = source / "manifest.json"
source_manifest.write_text("source sentinel", encoding="utf-8")
output = tmp_path / "models.tar.gz"
script = Path(__file__).parents[1] / "scripts" / "build-model-bundle.py"
namespace = runpy.run_path(str(script))
monkeypatch.setattr(sys, "argv", [str(script), str(source), str(output), "--version", "test-v1"])
namespace["main"]()
assert source_manifest.read_text(encoding="utf-8") == "source sentinel"
with tarfile.open(output, "r:gz") as archive:
assert archive.getnames().count("manifest.json") == 1
manifest_file = archive.extractfile("manifest.json")
assert manifest_file is not None
manifest = json.load(manifest_file)
assert manifest["version"] == "test-v1"
assert "manifest.json" not in manifest["files"]
assert manifest["files"]["visual/image/model.bin"] == hashlib.sha256(model.read_bytes()).hexdigest()