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"