38 tests covering the pure worker-line logic: Classifyline rules, Routeline TLP/country/incident-type gates, Sealine seal/unseal round-trip, Proofline confidence scoring, Mapline CVEResolver escalation, Trainline dataset well-posedness (the v1/v3 input-signal bugs are now regression-guarded), and the Scoutline feed parsers. pytest added as a dev extra. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
"""Proofline confidence-scoring tests."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from psyc.lines.proof import prove
|
|
from conftest import make_case
|
|
|
|
|
|
def test_kev_source_is_high_confidence():
|
|
case = prove(make_case(feed="cisa-kev", cves=["CVE-2026-0001"], age_days=1))
|
|
assert case.confidence.source_reliability == "A"
|
|
assert case.confidence.level == "high"
|
|
|
|
|
|
def test_urlhaus_source_is_medium_confidence():
|
|
case = prove(make_case(feed="urlhaus", urls=["http://1.2.3.4/x"], age_days=1))
|
|
assert case.confidence.source_reliability == "B"
|
|
assert case.confidence.level == "medium"
|
|
|
|
|
|
def test_freshness_buckets():
|
|
assert prove(make_case(age_days=1)).confidence.freshness == "new"
|
|
assert prove(make_case(age_days=7)).confidence.freshness == "recent"
|
|
assert prove(make_case(age_days=30)).confidence.freshness == "stale"
|
|
assert prove(make_case(age_days=200)).confidence.freshness == "resurfaced"
|
|
|
|
|
|
def test_stale_kev_case_is_docked_to_medium():
|
|
case = prove(make_case(feed="cisa-kev", cves=["CVE-2026-0001"], age_days=200))
|
|
assert case.confidence.level == "medium" # high docked by staleness
|
|
|
|
|
|
def test_malformed_ioc_drops_confidence_to_low():
|
|
case = make_case(feed="cisa-kev", ips=["999.999.0.1"], age_days=1)
|
|
proved = prove(case)
|
|
assert proved.confidence.iocs_valid is False
|
|
assert proved.confidence.level == "low"
|
|
|
|
|
|
def test_valid_iocs_pass():
|
|
case = prove(make_case(feed="urlhaus", ips=["8.8.8.8"], cves=["CVE-2026-1234"], age_days=1))
|
|
assert case.confidence.iocs_valid is True
|