tests/test_event.py
2.1 KB · 74 lines · python Raw
1 """Tests for InferenceEvent."""
2
3 from __future__ import annotations
4
5 import hashlib
6
7 from pqc_audit_log_fs.event import InferenceEvent
8
9
10 def test_create_produces_stable_hashes() -> None:
11 event = InferenceEvent.create(
12 model_did="did:pqaid:abc",
13 model_version="1.0",
14 input_bytes=b"hello",
15 output_bytes=b"world",
16 )
17 assert event.input_hash == hashlib.sha3_256(b"hello").hexdigest()
18 assert event.output_hash == hashlib.sha3_256(b"world").hexdigest()
19 # reasoning_chain_hash defaults empty when no reasoning_bytes provided
20 assert event.reasoning_chain_hash == ""
21
22
23 def test_leaf_hash_deterministic() -> None:
24 event = InferenceEvent(
25 event_id="urn:evt:1",
26 timestamp="2026-04-20T00:00:00+00:00",
27 model_did="did:pqaid:m",
28 model_version="1.0",
29 input_hash="a" * 64,
30 output_hash="b" * 64,
31 )
32 h1 = event.leaf_hash()
33 h2 = event.leaf_hash()
34 assert h1 == h2
35 assert len(h1) == 64 # SHA3-256 hex
36
37
38 def test_canonical_bytes_deterministic() -> None:
39 e1 = InferenceEvent(
40 event_id="urn:evt:1",
41 timestamp="2026-04-20T00:00:00+00:00",
42 model_did="did:pqaid:m",
43 model_version="1.0",
44 input_hash="a" * 64,
45 output_hash="b" * 64,
46 metadata={"b": 1, "a": 2},
47 )
48 e2 = InferenceEvent(
49 event_id="urn:evt:1",
50 timestamp="2026-04-20T00:00:00+00:00",
51 model_did="did:pqaid:m",
52 model_version="1.0",
53 input_hash="a" * 64,
54 output_hash="b" * 64,
55 metadata={"a": 2, "b": 1},
56 )
57 # metadata dicts declared in different order, but canonical_bytes is sorted
58 assert e1.canonical_bytes() == e2.canonical_bytes()
59
60
61 def test_to_from_dict_roundtrip() -> None:
62 original = InferenceEvent.create(
63 model_did="did:pqaid:m",
64 model_version="1.0",
65 input_bytes=b"x",
66 output_bytes=b"y",
67 decision_label="approve",
68 metadata={"k": "v"},
69 )
70 d = original.to_dict()
71 restored = InferenceEvent.from_dict(d)
72 assert restored == original
73 assert restored.leaf_hash() == original.leaf_hash()
74