From c3b426212f9130644825d19794964dcfd4d88abe Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Thu, 16 Apr 2020 10:37:21 +0300 Subject: [PATCH] tests: Check if the right next-hop is shown (bgp_show_ip_bgp_fqdn) Signed-off-by: Donatas Abraitis --- .../bgp_show_ip_bgp_fqdn/r2/bgpd.conf | 3 +- .../bgp_show_ip_bgp_fqdn/r2/zebra.conf | 3 ++ .../bgp_show_ip_bgp_fqdn/r3/bgpd.conf | 3 ++ .../bgp_show_ip_bgp_fqdn/r3/zebra.conf | 6 +++ .../test_bgp_show_ip_bgp_fqdn.py | 45 +++++++++++++------ 5 files changed, 44 insertions(+), 16 deletions(-) create mode 100644 tests/topotests/bgp_show_ip_bgp_fqdn/r3/bgpd.conf create mode 100644 tests/topotests/bgp_show_ip_bgp_fqdn/r3/zebra.conf diff --git a/tests/topotests/bgp_show_ip_bgp_fqdn/r2/bgpd.conf b/tests/topotests/bgp_show_ip_bgp_fqdn/r2/bgpd.conf index c05bfd5a6b..21698790f5 100644 --- a/tests/topotests/bgp_show_ip_bgp_fqdn/r2/bgpd.conf +++ b/tests/topotests/bgp_show_ip_bgp_fqdn/r2/bgpd.conf @@ -1,5 +1,4 @@ router bgp 65001 bgp default show-hostname neighbor 192.168.255.1 remote-as 65000 - address-family ipv4 unicast - redistribute connected + neighbor 192.168.254.1 remote-as 65001 diff --git a/tests/topotests/bgp_show_ip_bgp_fqdn/r2/zebra.conf b/tests/topotests/bgp_show_ip_bgp_fqdn/r2/zebra.conf index 5abba71ce8..e9e2e4391f 100644 --- a/tests/topotests/bgp_show_ip_bgp_fqdn/r2/zebra.conf +++ b/tests/topotests/bgp_show_ip_bgp_fqdn/r2/zebra.conf @@ -5,5 +5,8 @@ interface lo interface r2-eth0 ip address 192.168.255.2/24 ! +interface r2-eth1 + ip address 192.168.254.2/24 +! ip forwarding ! diff --git a/tests/topotests/bgp_show_ip_bgp_fqdn/r3/bgpd.conf b/tests/topotests/bgp_show_ip_bgp_fqdn/r3/bgpd.conf new file mode 100644 index 0000000000..8fcf6a736d --- /dev/null +++ b/tests/topotests/bgp_show_ip_bgp_fqdn/r3/bgpd.conf @@ -0,0 +1,3 @@ +router bgp 65001 + bgp default show-hostname + neighbor 192.168.254.2 remote-as 65001 diff --git a/tests/topotests/bgp_show_ip_bgp_fqdn/r3/zebra.conf b/tests/topotests/bgp_show_ip_bgp_fqdn/r3/zebra.conf new file mode 100644 index 0000000000..a8b8bc38c5 --- /dev/null +++ b/tests/topotests/bgp_show_ip_bgp_fqdn/r3/zebra.conf @@ -0,0 +1,6 @@ +! +interface r3-eth0 + ip address 192.168.254.1/24 +! +ip forwarding +! diff --git a/tests/topotests/bgp_show_ip_bgp_fqdn/test_bgp_show_ip_bgp_fqdn.py b/tests/topotests/bgp_show_ip_bgp_fqdn/test_bgp_show_ip_bgp_fqdn.py index c41ae7cb2a..e8ad180935 100644 --- a/tests/topotests/bgp_show_ip_bgp_fqdn/test_bgp_show_ip_bgp_fqdn.py +++ b/tests/topotests/bgp_show_ip_bgp_fqdn/test_bgp_show_ip_bgp_fqdn.py @@ -26,6 +26,13 @@ test_bgp_show_ip_bgp_fqdn.py: Test if FQND is visible in `show [ip] bgp` output if `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 @@ -49,13 +56,17 @@ class TemplateTopo(Topo): def build(self, *_args, **_opts): tgen = get_topogen(self) - for routern in range(1, 3): + for routern in range(1, 4): tgen.add_router("r{}".format(routern)) switch = tgen.add_switch("s1") switch.add_link(tgen.gears["r1"]) 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): tgen = Topogen(TemplateTopo, mod.__name__) @@ -85,30 +96,36 @@ def test_bgp_show_ip_bgp_hostname(): if tgen.routers_have_failure(): pytest.skip(tgen.errors) - router = tgen.gears["r2"] - def _bgp_converge(router): - output = json.loads(router.vtysh_cmd("show ip bgp neighbor 192.168.255.1 json")) - expected = { - "192.168.255.1": { - "bgpState": "Established", - "addressFamilyInfo": {"ipv4Unicast": {"acceptedPrefixCounter": 2}}, - } - } + output = json.loads(router.vtysh_cmd("show ip bgp 172.16.255.254/32 json")) + expected = {"prefix": "172.16.255.254/32"} return topotest.json_cmp(output, expected) def _bgp_show_nexthop_hostname_and_ip(router): 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: return True 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) - assert result is None, 'Failed bgp convergence in "{}"'.format(router) - assert _bgp_show_nexthop_hostname_and_ip(router) == True + test_func = functools.partial(_bgp_converge, tgen.gears["r3"]) + 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__": -- 2.39.5