reguai-engine / tests /test_provenance.py
gitmodelmujtaba's picture
Deploy ReguAI: Neuro-Symbolic AI GRC & Automated Conformity Assessment Engine
ac8e628 verified
Raw
History Blame Contribute Delete
1.68 kB
"""
Tests for Cryptographic Provenance Ledger and W3C PROV-O Graph generation.
"""
from rdflib import Graph, URIRef, Literal, RDF
from src.core.models import SystemMetadata, SystemSpecification
from src.ledger.crypto import compute_sha256_text, compute_canonical_graph_sha256
from src.ledger.provenance import ProvenanceLedger
def test_canonical_graph_hash_deterministic():
g1 = Graph()
g2 = Graph()
s = URIRef("http://example.org/sys1")
p = URIRef("http://example.org/hasStatus")
o = Literal("Implemented")
# Add in different order if multiple triples
p2 = URIRef("http://example.org/domain")
o2 = Literal("Healthcare")
g1.add((s, p, o))
g1.add((s, p2, o2))
g2.add((s, p2, o2))
g2.add((s, p, o))
hash1 = compute_canonical_graph_sha256(g1)
hash2 = compute_canonical_graph_sha256(g2)
assert hash1 == hash2
assert len(hash1) == 64
def test_prov_o_generation():
ledger = ProvenanceLedger()
spec = SystemSpecification(
metadata=SystemMetadata(
system_id="sys-test-99",
name="Test Safety Model",
domain="Robotics",
intended_purpose="Collision avoidance",
),
raw_document_text="Autonomous collision avoidance model.",
)
g = Graph()
g.add((URIRef("http://example.org/test"), RDF.type, URIRef("http://example.org/System")))
prov = ledger.generate_provenance(spec, g, conforms=True, violations_count=0)
assert prov.digital_signature.startswith("REGU-EU2024-1689-")
assert len(prov.input_doc_sha256) == 64
assert len(prov.graph_triples_sha256) == 64
assert "prov:wasGeneratedBy" in prov.prov_o_rdf