mirror of
https://github.com/quantum5/bird-filter.git
synced 2025-04-24 09:01:57 -04:00
Compare commits
No commits in common. "6e1d2e9fc5c6aa58defa9b8b752f0499d35174a5" and "e75dd1a667da4a5013365967d94c03830c9709db" have entirely different histories.
6e1d2e9fc5
...
e75dd1a667
33
aspa/test.py
33
aspa/test.py
|
@ -62,33 +62,33 @@ class PeerTest(unittest.TestCase):
|
|||
])
|
||||
|
||||
def test_all_valid(self):
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64501, 64500]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64502, 64501, 64500]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64503, 64502, 64501, 64500]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64504, 64503, 64502, 64501]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64504, 64503, 64502]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64504, 64503]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64504]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64501, [64501, 64500]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64502, [64502, 64501, 64500]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64503, [64503, 64502, 64501, 64500]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64504, [64504, 64503, 64502, 64501]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64504, [64504, 64503, 64502]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64504, [64504, 64503]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64504, [64504]))
|
||||
|
||||
def test_prepend_valid(self):
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64501, 64500, 64500]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64502, 64502, 64501, 64501, 64500]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64503, 64502, 64502, 64501, 64500, 64500]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64501, [64501, 64500, 64500]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64502, [64502, 64502, 64501, 64501, 64500]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64503, [64503, 64502, 64502, 64501, 64500, 64500]))
|
||||
|
||||
def test_some_unknown(self):
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64505, 64504, 64503, 64502]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64503, 64503, 64502, 64505]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64505, [64505, 64504, 64503, 64502]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64503, [64503, 64503, 64502, 64505]))
|
||||
|
||||
def test_all_unknown(self):
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64506, 64507, 64508]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_customer(64506, [64506, 64507, 64508]))
|
||||
|
||||
def test_some_invalid(self):
|
||||
self.assertTrue(self.validator.is_aspa_invalid_peer([64505, 64505, 64503, 64503]))
|
||||
self.assertTrue(self.validator.is_aspa_invalid_peer([64504, 64503, 64506, 64500]))
|
||||
self.assertTrue(self.validator.is_aspa_invalid_peer(64505, [64505, 64505, 64503, 64503]))
|
||||
self.assertTrue(self.validator.is_aspa_invalid_peer(64504, [64504, 64503, 64506, 64500]))
|
||||
|
||||
def test_peer_originated(self):
|
||||
for i in [64500, 64501, 64502, 64503, 64504, 64505]:
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([i]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(i, [i]))
|
||||
|
||||
|
||||
class UpstreamTest(unittest.TestCase):
|
||||
|
@ -118,7 +118,6 @@ class UpstreamTest(unittest.TestCase):
|
|||
|
||||
def test_valid_edge(self):
|
||||
self.assertFalse(self.validator.is_aspa_invalid_upstream(64530, [64520, 64510]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_upstream(64530, [64520, 64521]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_upstream(64530, [64520]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_upstream(64520, [64510]))
|
||||
|
||||
|
|
|
@ -24,8 +24,10 @@ class Validator:
|
|||
|
||||
return False
|
||||
|
||||
def is_aspa_invalid_peer(self, bgp_path: list[int]) -> bool:
|
||||
for prev_asn, asn in zip(bgp_path, bgp_path[1:]):
|
||||
def is_aspa_invalid_peer(self, peer_asn: int, bgp_path: list[int]) -> bool:
|
||||
remove_peer = list(dropwhile(lambda asn: asn != peer_asn, bgp_path))
|
||||
|
||||
for prev_asn, asn in zip(chain([peer_asn], remove_peer), remove_peer):
|
||||
if prev_asn == asn:
|
||||
continue
|
||||
|
||||
|
@ -64,11 +66,11 @@ class BirdValidator(Validator):
|
|||
|
||||
return False
|
||||
|
||||
def is_aspa_invalid_peer(self, bgp_path: list[int]) -> bool:
|
||||
prev_asn = bgp_path[0]
|
||||
def is_aspa_invalid_peer(self, peer_asn: int, bgp_path: list[int]) -> bool:
|
||||
prev_asn = peer_asn
|
||||
|
||||
for asn in bgp_path:
|
||||
if prev_asn != asn and self.is_invalid_pair(prev_asn, asn):
|
||||
if asn != peer_asn and prev_asn != asn and self.is_invalid_pair(prev_asn, asn):
|
||||
return True
|
||||
prev_asn = asn
|
||||
|
||||
|
|
|
@ -10,11 +10,12 @@ function is_aspa_invalid_customer() {
|
|||
return false;
|
||||
}
|
||||
|
||||
function is_aspa_invalid_peer() {
|
||||
int prev_asn = bgp_path.first;
|
||||
function is_aspa_invalid_peer(int peer_asn) {
|
||||
int prev_asn = peer_asn;
|
||||
|
||||
for int cur_asn in bgp_path do {
|
||||
if prev_asn != cur_asn && is_aspa_invalid_pair(prev_asn, cur_asn) then
|
||||
if cur_asn != peer_asn && prev_asn != cur_asn &&
|
||||
is_aspa_invalid_pair(prev_asn, cur_asn) then
|
||||
return true;
|
||||
prev_asn = cur_asn;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue