NODEDC_MISSION_CORE/tests/test_session_lab_cache.py

90 lines
2.8 KiB
Python

from __future__ import annotations
import hashlib
import json
from pathlib import Path
from k1link.sessions.lab_cache import publish_lab_replay_cache
from k1link.sessions.recording import (
CACHE_SCHEMA,
RECORDING_CACHE_FILENAME,
RECORDING_CACHE_SIDECAR_FILENAME,
)
def canonical_json(value: object) -> bytes:
return json.dumps(
value,
ensure_ascii=False,
sort_keys=True,
separators=(",", ":"),
allow_nan=False,
).encode()
def test_publish_lab_replay_cache_hardlinks_rrd_and_rebinds_sidecars(
tmp_path: Path,
) -> None:
data = tmp_path / "mission-core"
recordings = data / "recordings"
source = recordings / "source-session"
source.mkdir(parents=True)
source_rrd = source / RECORDING_CACHE_FILENAME
source_rrd.write_bytes(b"RRF2immutable")
source_sidecar = {
"schema_version": CACHE_SCHEMA,
"session_id": source.name,
"recording_byte_length": source_rrd.stat().st_size,
"recording_mtime_ns": source_rrd.stat().st_mtime_ns,
"recording_sha256": hashlib.sha256(source_rrd.read_bytes()).hexdigest(),
}
(source / RECORDING_CACHE_SIDECAR_FILENAME).write_text(
json.dumps(source_sidecar),
encoding="utf-8",
)
media_root = data / "recorded-media-preparations"
media_root.mkdir()
media_body = {
"schema_version": "missioncore.recorded-media-preparation/v1",
"session_id": source.name,
"artifact_id": "recorded-video-1",
"generation": "accepted",
}
(media_root / "source.json").write_text(
json.dumps(
{
**media_body,
"checksum_sha256": hashlib.sha256(canonical_json(media_body)).hexdigest(),
}
),
encoding="utf-8",
)
publish_lab_replay_cache(
data,
source_session_id=source.name,
lab_session_id="lab-e21-result",
)
lab = recordings / "lab-e21-result"
lab_rrd = lab / RECORDING_CACHE_FILENAME
assert lab_rrd.read_bytes() == source_rrd.read_bytes()
assert lab_rrd.stat().st_ino == source_rrd.stat().st_ino
assert lab_rrd.stat().st_nlink == 2
cloned_cache = json.loads(
(lab / RECORDING_CACHE_SIDECAR_FILENAME).read_text(encoding="utf-8")
)
assert cloned_cache["session_id"] == "lab-e21-result"
cloned_media = [
json.loads(path.read_text(encoding="utf-8"))
for path in media_root.iterdir()
if path.name != "source.json"
]
assert len(cloned_media) == 1
assert cloned_media[0]["session_id"] == "lab-e21-result"
cloned_checksum = cloned_media[0].pop("checksum_sha256")
assert cloned_checksum == hashlib.sha256(canonical_json(cloned_media[0])).hexdigest()
lab_rrd.unlink()
assert source_rrd.read_bytes() == b"RRF2immutable"