tests/test_embed.py
1.8 KB · 46 lines · python Raw
1 """Tests for embed/extract helpers."""
2
3 from __future__ import annotations
4
5 import pytest
6
7 from pqc_content_provenance import embed_manifest, extract_manifest
8 from pqc_content_provenance.errors import InvalidManifestError
9
10
11 def test_sidecar_roundtrip(signer, sample_manifest, sample_content) -> None:
12 signed = signer.sign(sample_manifest)
13 envelope = embed_manifest(sample_content, signed, mode="sidecar")
14 assert isinstance(envelope, bytes)
15 recovered_manifest, recovered_content = extract_manifest(envelope, mode="sidecar")
16 assert recovered_content == sample_content
17 assert recovered_manifest.manifest_id == signed.manifest_id
18 assert recovered_manifest.signature == signed.signature
19
20
21 def test_text_header_roundtrip(signer, sample_manifest, sample_content) -> None:
22 signed = signer.sign(sample_manifest)
23 envelope = embed_manifest(sample_content, signed, mode="text-header")
24 assert isinstance(envelope, bytes)
25 recovered_manifest, recovered_content = extract_manifest(envelope, mode="text-header")
26 assert recovered_content == sample_content
27 assert recovered_manifest.manifest_id == signed.manifest_id
28
29
30 def test_text_header_missing_markers_raises() -> None:
31 with pytest.raises(InvalidManifestError):
32 extract_manifest(b"this blob has no provenance markers at all", mode="text-header")
33
34
35 def test_unknown_mode_raises(signer, sample_manifest, sample_content) -> None:
36 signed = signer.sign(sample_manifest)
37 with pytest.raises(ValueError):
38 embed_manifest(sample_content, signed, mode="not-a-mode")
39 with pytest.raises(ValueError):
40 extract_manifest(b"irrelevant", mode="not-a-mode")
41
42
43 def test_sidecar_invalid_envelope_raises() -> None:
44 with pytest.raises(InvalidManifestError):
45 extract_manifest(b"{invalid json]]", mode="sidecar")
46