tests: Check if the right next-hop is shown (bgp_show_ip_bgp_fqdn)

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
This commit is contained in:
Donatas Abraitis 2020-04-16 10:37:21 +03:00
parent 2ba93fd65b
commit c3b426212f
5 changed files with 44 additions and 16 deletions

View File

@ -1,5 +1,4 @@
router bgp 65001 router bgp 65001
bgp default show-hostname bgp default show-hostname
neighbor 192.168.255.1 remote-as 65000 neighbor 192.168.255.1 remote-as 65000
address-family ipv4 unicast neighbor 192.168.254.1 remote-as 65001
redistribute connected

View File

@ -5,5 +5,8 @@ interface lo
interface r2-eth0 interface r2-eth0
ip address 192.168.255.2/24 ip address 192.168.255.2/24
! !
interface r2-eth1
ip address 192.168.254.2/24
!
ip forwarding ip forwarding
! !

View File

@ -0,0 +1,3 @@
router bgp 65001
bgp default show-hostname
neighbor 192.168.254.2 remote-as 65001

View File

@ -0,0 +1,6 @@
!
interface r3-eth0
ip address 192.168.254.1/24
!
ip forwarding
!

View File

@ -26,6 +26,13 @@
test_bgp_show_ip_bgp_fqdn.py: test_bgp_show_ip_bgp_fqdn.py:
Test if FQND is visible in `show [ip] bgp` output if Test if FQND is visible in `show [ip] bgp` output if
`bgp default show-hostname` is toggled. `bgp default show-hostname` is toggled.
Topology:
r1 <-- eBGP --> r2 <-- iBGP --> r3
1. Check if both hostname and ip are added to JSON output
for 172.16.255.254/32 on r2.
2. Check if only ip is added to JSON output for 172.16.255.254/32 on r3.
""" """
import os import os
@ -49,13 +56,17 @@ 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, 3): for routern in range(1, 4):
tgen.add_router("r{}".format(routern)) tgen.add_router("r{}".format(routern))
switch = tgen.add_switch("s1") switch = tgen.add_switch("s1")
switch.add_link(tgen.gears["r1"]) switch.add_link(tgen.gears["r1"])
switch.add_link(tgen.gears["r2"]) switch.add_link(tgen.gears["r2"])
switch = tgen.add_switch("s2")
switch.add_link(tgen.gears["r2"])
switch.add_link(tgen.gears["r3"])
def setup_module(mod): def setup_module(mod):
tgen = Topogen(TemplateTopo, mod.__name__) tgen = Topogen(TemplateTopo, mod.__name__)
@ -85,30 +96,36 @@ def test_bgp_show_ip_bgp_hostname():
if tgen.routers_have_failure(): if tgen.routers_have_failure():
pytest.skip(tgen.errors) pytest.skip(tgen.errors)
router = tgen.gears["r2"]
def _bgp_converge(router): def _bgp_converge(router):
output = json.loads(router.vtysh_cmd("show ip bgp neighbor 192.168.255.1 json")) output = json.loads(router.vtysh_cmd("show ip bgp 172.16.255.254/32 json"))
expected = { expected = {"prefix": "172.16.255.254/32"}
"192.168.255.1": {
"bgpState": "Established",
"addressFamilyInfo": {"ipv4Unicast": {"acceptedPrefixCounter": 2}},
}
}
return topotest.json_cmp(output, expected) return topotest.json_cmp(output, expected)
def _bgp_show_nexthop_hostname_and_ip(router): def _bgp_show_nexthop_hostname_and_ip(router):
output = json.loads(router.vtysh_cmd("show ip bgp json")) output = json.loads(router.vtysh_cmd("show ip bgp json"))
for nh in output["routes"]["172.16.255.253/32"][0]["nexthops"]: for nh in output["routes"]["172.16.255.254/32"][0]["nexthops"]:
if "hostname" in nh and "ip" in nh: if "hostname" in nh and "ip" in nh:
return True return True
return False return False
test_func = functools.partial(_bgp_converge, router) def _bgp_show_nexthop_ip_only(router):
output = json.loads(router.vtysh_cmd("show ip bgp json"))
for nh in output["routes"]["172.16.255.254/32"][0]["nexthops"]:
if "ip" in nh and not "hostname" in nh:
return True
return False
test_func = functools.partial(_bgp_converge, tgen.gears["r2"])
success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5) success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
assert result is None, 'Failed bgp convergence in "{}"'.format(router) test_func = functools.partial(_bgp_converge, tgen.gears["r3"])
assert _bgp_show_nexthop_hostname_and_ip(router) == True success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
assert result is None, 'Failed bgp convergence in "{}"'.format(tgen.gears["r2"])
assert _bgp_show_nexthop_hostname_and_ip(tgen.gears["r2"]) == True
assert result is None, 'Failed bgp convergence in "{}"'.format(tgen.gears["r3"])
assert _bgp_show_nexthop_ip_only(tgen.gears["r3"]) == True
if __name__ == "__main__": if __name__ == "__main__":