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:
Donatas Abraitis 2019-12-19 10:53:05 +02:00
parent e0df4c04a0
commit 886b8172e0
5 changed files with 72 additions and 19 deletions

View File

@ -0,0 +1,5 @@
router bgp 65000
neighbor 192.168.255.2 remote-as 65000
address-family ipv4 unicast
redistribute connected
!

View 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
!

View File

@ -0,0 +1,3 @@
router bgp 65000
bgp ebgp-requires-policy
neighbor 192.168.255.1 remote-as 65000

View File

@ -0,0 +1,6 @@
!
interface r6-eth0
ip address 192.168.255.2/24
!
ip forwarding
!

View File

@ -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:]