mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-17 21:38:11 +00:00
tests: Test if eBGP policy is not applied to iBGP peers
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
This commit is contained in:
parent
e0df4c04a0
commit
886b8172e0
5
tests/topotests/bgp_ebgp_requires_policy/r5/bgpd.conf
Normal file
5
tests/topotests/bgp_ebgp_requires_policy/r5/bgpd.conf
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
router bgp 65000
|
||||||
|
neighbor 192.168.255.2 remote-as 65000
|
||||||
|
address-family ipv4 unicast
|
||||||
|
redistribute connected
|
||||||
|
!
|
9
tests/topotests/bgp_ebgp_requires_policy/r5/zebra.conf
Normal file
9
tests/topotests/bgp_ebgp_requires_policy/r5/zebra.conf
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
!
|
||||||
|
interface lo
|
||||||
|
ip address 172.16.255.254/32
|
||||||
|
!
|
||||||
|
interface r5-eth0
|
||||||
|
ip address 192.168.255.1/24
|
||||||
|
!
|
||||||
|
ip forwarding
|
||||||
|
!
|
3
tests/topotests/bgp_ebgp_requires_policy/r6/bgpd.conf
Normal file
3
tests/topotests/bgp_ebgp_requires_policy/r6/bgpd.conf
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
router bgp 65000
|
||||||
|
bgp ebgp-requires-policy
|
||||||
|
neighbor 192.168.255.1 remote-as 65000
|
6
tests/topotests/bgp_ebgp_requires_policy/r6/zebra.conf
Normal file
6
tests/topotests/bgp_ebgp_requires_policy/r6/zebra.conf
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
!
|
||||||
|
interface r6-eth0
|
||||||
|
ip address 192.168.255.2/24
|
||||||
|
!
|
||||||
|
ip forwarding
|
||||||
|
!
|
@ -5,7 +5,7 @@
|
|||||||
# Part of NetDEF Topology Tests
|
# Part of NetDEF Topology Tests
|
||||||
#
|
#
|
||||||
# Copyright (c) 2019 by
|
# Copyright (c) 2019 by
|
||||||
# Network Device Education Foundation, Inc. ("NetDEF")
|
# Donatas Abraitis <donatas.abraitis@gmail.com>
|
||||||
#
|
#
|
||||||
# Permission to use, copy, modify, and/or distribute this software
|
# Permission to use, copy, modify, and/or distribute this software
|
||||||
# for any purpose with or without fee is hereby granted, provided
|
# for any purpose with or without fee is hereby granted, provided
|
||||||
@ -34,6 +34,7 @@ import sys
|
|||||||
import json
|
import json
|
||||||
import time
|
import time
|
||||||
import pytest
|
import pytest
|
||||||
|
import functools
|
||||||
|
|
||||||
CWD = os.path.dirname(os.path.realpath(__file__))
|
CWD = os.path.dirname(os.path.realpath(__file__))
|
||||||
sys.path.append(os.path.join(CWD, '../'))
|
sys.path.append(os.path.join(CWD, '../'))
|
||||||
@ -48,7 +49,7 @@ class TemplateTopo(Topo):
|
|||||||
def build(self, *_args, **_opts):
|
def build(self, *_args, **_opts):
|
||||||
tgen = get_topogen(self)
|
tgen = get_topogen(self)
|
||||||
|
|
||||||
for routern in range(1, 5):
|
for routern in range(1, 7):
|
||||||
tgen.add_router('r{}'.format(routern))
|
tgen.add_router('r{}'.format(routern))
|
||||||
|
|
||||||
switch = tgen.add_switch('s1')
|
switch = tgen.add_switch('s1')
|
||||||
@ -59,6 +60,10 @@ class TemplateTopo(Topo):
|
|||||||
switch.add_link(tgen.gears['r3'])
|
switch.add_link(tgen.gears['r3'])
|
||||||
switch.add_link(tgen.gears['r4'])
|
switch.add_link(tgen.gears['r4'])
|
||||||
|
|
||||||
|
switch = tgen.add_switch('s3')
|
||||||
|
switch.add_link(tgen.gears['r5'])
|
||||||
|
switch.add_link(tgen.gears['r6'])
|
||||||
|
|
||||||
def setup_module(mod):
|
def setup_module(mod):
|
||||||
tgen = Topogen(TemplateTopo, mod.__name__)
|
tgen = Topogen(TemplateTopo, mod.__name__)
|
||||||
tgen.start_topology()
|
tgen.start_topology()
|
||||||
@ -81,32 +86,57 @@ def teardown_module(mod):
|
|||||||
tgen = get_topogen()
|
tgen = get_topogen()
|
||||||
tgen.stop_topology()
|
tgen.stop_topology()
|
||||||
|
|
||||||
def test_bgp_remove_private_as():
|
def test_ebgp_requires_policy():
|
||||||
tgen = get_topogen()
|
tgen = get_topogen()
|
||||||
|
|
||||||
if tgen.routers_have_failure():
|
if tgen.routers_have_failure():
|
||||||
pytest.skip(tgen.errors)
|
pytest.skip(tgen.errors)
|
||||||
|
|
||||||
def _bgp_converge(router):
|
def _bgp_converge(router):
|
||||||
while True:
|
output = json.loads(tgen.gears[router].vtysh_cmd("show ip bgp neighbor 192.168.255.1 json"))
|
||||||
cmd = "show ip bgp neighbor 192.168.255.1 json"
|
expected = {
|
||||||
output = json.loads(tgen.gears[router].vtysh_cmd(cmd))
|
'192.168.255.1': {
|
||||||
if output['192.168.255.1']['bgpState'] == 'Established':
|
'bgpState': 'Established'
|
||||||
time.sleep(3)
|
}
|
||||||
return True
|
}
|
||||||
|
return topotest.json_cmp(output, expected)
|
||||||
|
|
||||||
def _bgp_ebgp_requires_policy(router):
|
def _bgp_has_routes(router):
|
||||||
cmd = "show ip bgp 172.16.255.254/32 json"
|
output = json.loads(tgen.gears[router].vtysh_cmd("show ip bgp neighbor 192.168.255.1 routes json"))
|
||||||
output = json.loads(tgen.gears[router].vtysh_cmd(cmd))
|
expected = {
|
||||||
if 'prefix' in output:
|
'routes': {
|
||||||
return True
|
'172.16.255.254/32': [
|
||||||
return False
|
{
|
||||||
|
'valid': True
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return topotest.json_cmp(output, expected)
|
||||||
|
|
||||||
if _bgp_converge('r2'):
|
test_func = functools.partial(_bgp_converge, 'r2')
|
||||||
assert _bgp_ebgp_requires_policy('r2') == True
|
success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
|
||||||
|
assert success is True, 'Failed bgp convergence (r2) in "{}"'.format(router)
|
||||||
|
|
||||||
if _bgp_converge('r4'):
|
test_func = functools.partial(_bgp_has_routes, 'r2')
|
||||||
assert _bgp_ebgp_requires_policy('r4') == False
|
success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
|
||||||
|
assert success is True, 'eBGP policy is not working (r2) in "{}"'.format(router)
|
||||||
|
|
||||||
|
test_func = functools.partial(_bgp_converge, 'r4')
|
||||||
|
success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
|
||||||
|
assert success is True, 'Failed bgp convergence (r4) in "{}"'.format(router)
|
||||||
|
|
||||||
|
test_func = functools.partial(_bgp_has_routes, 'r4')
|
||||||
|
success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
|
||||||
|
assert success is False, 'eBGP policy is not working (r4) in "{}"'.format(router)
|
||||||
|
|
||||||
|
test_func = functools.partial(_bgp_converge, 'r6')
|
||||||
|
success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
|
||||||
|
assert success is True, 'Failed bgp convergence (r6) in "{}"'.format(router)
|
||||||
|
|
||||||
|
test_func = functools.partial(_bgp_has_routes, 'r6')
|
||||||
|
success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
|
||||||
|
assert success is True, 'eBGP policy is not working (r6) in "{}"'.format(router)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
args = ["-s"] + sys.argv[1:]
|
args = ["-s"] + sys.argv[1:]
|
||||||
|
Loading…
Reference in New Issue
Block a user