feat: add bgp observability and admin ui improvements
This commit is contained in:
74
backend/tests/test_bgp.py
Normal file
74
backend/tests/test_bgp.py
Normal file
@@ -0,0 +1,74 @@
|
||||
"""Tests for BGP observability helpers."""
|
||||
|
||||
from app.models.bgp_anomaly import BGPAnomaly
|
||||
from app.services.collectors.bgp_common import normalize_bgp_event
|
||||
from app.services.collectors.bgpstream import BGPStreamBackfillCollector
|
||||
|
||||
|
||||
def test_normalize_bgp_event_from_live_payload():
|
||||
event = normalize_bgp_event(
|
||||
{
|
||||
"collector": "rrc00",
|
||||
"peer_asn": "3333",
|
||||
"peer_ip": "2001:db8::1",
|
||||
"type": "UPDATE",
|
||||
"event_type": "announcement",
|
||||
"prefix": "203.0.113.0/24",
|
||||
"path": ["3333", "64500", "64496"],
|
||||
"communities": ["3333:100"],
|
||||
"timestamp": "2026-03-26T08:00:00Z",
|
||||
},
|
||||
project="ris-live",
|
||||
)
|
||||
|
||||
assert event["name"] == "203.0.113.0/24"
|
||||
assert event["metadata"]["collector"] == "rrc00"
|
||||
assert event["metadata"]["peer_asn"] == 3333
|
||||
assert event["metadata"]["origin_asn"] == 64496
|
||||
assert event["metadata"]["as_path_length"] == 3
|
||||
assert event["metadata"]["prefix_length"] == 24
|
||||
assert event["metadata"]["is_more_specific"] is False
|
||||
|
||||
|
||||
def test_bgpstream_transform_preserves_broker_record():
|
||||
collector = BGPStreamBackfillCollector()
|
||||
transformed = collector.transform(
|
||||
[
|
||||
{
|
||||
"project": "routeviews",
|
||||
"collector": "route-views.sg",
|
||||
"filename": "rib.20260326.0800.gz",
|
||||
"startTime": "2026-03-26T08:00:00Z",
|
||||
"prefix": "198.51.100.0/24",
|
||||
"origin_asn": 64512,
|
||||
}
|
||||
]
|
||||
)
|
||||
|
||||
assert len(transformed) == 1
|
||||
record = transformed[0]
|
||||
assert record["name"] == "rib.20260326.0800.gz"
|
||||
assert record["metadata"]["project"] == "bgpstream"
|
||||
assert record["metadata"]["broker_record"]["filename"] == "rib.20260326.0800.gz"
|
||||
|
||||
|
||||
def test_bgp_anomaly_to_dict():
|
||||
anomaly = BGPAnomaly(
|
||||
source="ris_live_bgp",
|
||||
anomaly_type="origin_change",
|
||||
severity="critical",
|
||||
status="active",
|
||||
entity_key="origin_change:203.0.113.0/24:64497",
|
||||
prefix="203.0.113.0/24",
|
||||
origin_asn=64496,
|
||||
new_origin_asn=64497,
|
||||
summary="Origin ASN changed",
|
||||
confidence=0.9,
|
||||
evidence={"previous_origins": [64496], "current_origins": [64497]},
|
||||
)
|
||||
|
||||
data = anomaly.to_dict()
|
||||
assert data["source"] == "ris_live_bgp"
|
||||
assert data["anomaly_type"] == "origin_change"
|
||||
assert data["new_origin_asn"] == 64497
|
||||
assert data["evidence"]["previous_origins"] == [64496]
|
||||
Reference in New Issue
Block a user