Some checks failed
Tests / test (push) Failing after 2s
- Merged all unique darkplex-core modules into cortex: - intelligence/ subfolder (anticipator, collective, shared_memory, knowledge_cleanup, temporal, llm_extractor, loop) - governance/ subfolder (policy engine, risk scorer, evidence, enforcer, report generator) - entity_manager.py, knowledge_extractor.py - Fixed bare 'from intelligence.' imports to 'from cortex.intelligence.' - Added 'darkplex' CLI alias alongside 'cortex' - Package renamed to darkplex-core v0.2.0 - 405 tests passing (was 234) - 14 new test files covering all merged modules
86 lines
2.9 KiB
Python
86 lines
2.9 KiB
Python
"""Tests for governance/evidence.py — Evidence Collector & Control Mapping."""
|
|
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
import yaml
|
|
import pytest
|
|
|
|
sys.path.insert(0, str(Path.home() / "repos" / "darkplex-core"))
|
|
|
|
from governance.evidence import EvidenceCollector, EvidenceRecord, ControlMapping
|
|
|
|
|
|
class TestControlMapping:
|
|
def test_missing_file(self):
|
|
m = ControlMapping(mapping_path="/nonexistent/path.yaml")
|
|
assert m.get_controls("anything") == []
|
|
|
|
def test_load_mapping(self, tmp_path):
|
|
mapping_file = tmp_path / "mapping.yaml"
|
|
mapping_file.write_text(yaml.dump({
|
|
"mappings": [
|
|
{"event_types": ["policy_evaluation"], "controls": ["A.5.1", "A.8.1"]},
|
|
{"event_types": ["access_request", "data_export"], "controls": ["A.9.1"]},
|
|
]
|
|
}))
|
|
m = ControlMapping(mapping_path=str(mapping_file))
|
|
assert "A.5.1" in m.get_controls("policy_evaluation")
|
|
assert "A.9.1" in m.get_controls("access_request")
|
|
assert m.get_controls("unknown_event") == []
|
|
|
|
|
|
class TestEvidenceRecord:
|
|
def test_to_dict(self):
|
|
r = EvidenceRecord(
|
|
timestamp="2026-01-01T00:00:00Z",
|
|
event_type="test",
|
|
agent="claudia",
|
|
action="read",
|
|
verdict="allow",
|
|
risk_score=2,
|
|
risk_level="low",
|
|
controls=["A.5.1"],
|
|
)
|
|
d = r.to_dict()
|
|
assert d["agent"] == "claudia"
|
|
assert d["controls"] == ["A.5.1"]
|
|
|
|
|
|
class TestEvidenceCollector:
|
|
def setup_method(self):
|
|
self.collector = EvidenceCollector(control_mapping=ControlMapping("/dev/null"))
|
|
|
|
def test_record(self):
|
|
rec = self.collector.record(
|
|
event_type="policy_evaluation",
|
|
agent="claudia",
|
|
action="send_email",
|
|
verdict="allow",
|
|
risk_score=3,
|
|
risk_level="low",
|
|
)
|
|
assert rec.agent == "claudia"
|
|
assert len(self.collector.evidence) == 1
|
|
|
|
def test_filter_by_agent(self):
|
|
self.collector.record(event_type="e", agent="a", action="x", verdict="allow")
|
|
self.collector.record(event_type="e", agent="b", action="x", verdict="deny")
|
|
assert len(self.collector.get_evidence(agent="a")) == 1
|
|
|
|
def test_filter_by_verdict(self):
|
|
self.collector.record(event_type="e", agent="a", action="x", verdict="allow")
|
|
self.collector.record(event_type="e", agent="a", action="y", verdict="deny")
|
|
assert len(self.collector.get_evidence(verdict="deny")) == 1
|
|
|
|
def test_export_json(self):
|
|
self.collector.record(event_type="e", agent="a", action="x", verdict="allow")
|
|
exported = self.collector.export_json()
|
|
data = json.loads(exported)
|
|
assert len(data) == 1
|
|
assert data[0]["agent"] == "a"
|
|
|
|
def test_empty_evidence(self):
|
|
assert self.collector.get_evidence() == []
|
|
assert json.loads(self.collector.export_json()) == []
|