From: nguggarigoud Date: Tue, 20 Oct 2020 03:45:29 +0000 (+0530) Subject: tests: Optimised static routing testsuits X-Git-Tag: base_7.6~102^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=938d5980d1459be8e915814977256d55960f1966;p=matthieu%2Ffrr.git tests: Optimised static routing testsuits 1. Removed bgp specific triggers. 2. Removed repeatativ steps. Signed-off-by: nguggarigoud --- diff --git a/tests/topotests/lib/common_config.py b/tests/topotests/lib/common_config.py index 699f8cbf89..d81f740548 100644 --- a/tests/topotests/lib/common_config.py +++ b/tests/topotests/lib/common_config.py @@ -37,7 +37,6 @@ import traceback import socket import ipaddress import platform - if sys.version_info[0] > 2: import configparser else: @@ -1159,13 +1158,13 @@ def generate_ips(network, no_of_ips): if start_ip == "0.0.0.0" and mask == 0 and no_of_ips == 1: ipaddress_list.append("{}/{}".format(start_ip, mask)) return ipaddress_list - start_ip = ipaddr.IPv4Address(unicode(start_ip)) + start_ip = ipaddress.IPv4Address(unicode(start_ip)) step = 2 ** (32 - mask) if addr_type == "ipv6": if start_ip == "0::0" and mask == 0 and no_of_ips == 1: ipaddress_list.append("{}/{}".format(start_ip, mask)) return ipaddress_list - start_ip = ipaddr.IPv6Address(unicode(start_ip)) + start_ip = ipaddress.IPv6Address(unicode(start_ip)) step = 2 ** (128 - mask) next_ip = start_ip diff --git a/tests/topotests/static_routing_with_ebgp/static_routes_topo3_ebgp.json b/tests/topotests/static_routing_with_ebgp/static_routes_topo3_ebgp.json deleted file mode 100644 index 5246a311ea..0000000000 --- a/tests/topotests/static_routing_with_ebgp/static_routes_topo3_ebgp.json +++ /dev/null @@ -1,189 +0,0 @@ -{ - "address_types": [ - "ipv4", - "ipv6" - ], - "ipv4base": "10.0.0.0", - "ipv4mask": 30, - "ipv6base": "fd00::", - "ipv6mask": 64, - "link_ip_start": { - "ipv4": "10.0.0.0", - "v4mask": 29, - "ipv6": "fd00::", - "v6mask": 64 - }, - "lo_prefix": { - "ipv4": "1.0.", - "v4mask": 32, - "ipv6": "2001:db8:f::", - "v6mask": 128 - }, - "routers": { - "r1": { - "links": { - "lo": { - "ipv4": "auto", - "ipv6": "auto", - "type": "loopback" - }, - "r2-link0": { - "ipv4": "auto", - "ipv6": "auto" - }, - "r2-link1": { - "ipv4": "auto", - "ipv6": "auto" - }, - "r2-link2": { - "ipv4": "auto", - "ipv6": "auto" - }, - "r2-link3": { - "ipv4": "auto", - "ipv6": "auto" - }, - "r2-link4": { - "ipv4": "auto", - "ipv6": "auto" - }, - "r2-link5": { - "ipv4": "auto", - "ipv6": "auto" - }, - "r2-link6": { - "ipv4": "auto", - "ipv6": "auto" - }, - "r2-link7": { - "ipv4": "auto", - "ipv6": "auto" - } - } - }, - "r2": { - "links": { - "lo": { - "ipv4": "auto", - "ipv6": "auto", - "type": "loopback" - }, - "r1-link0": { - "ipv4": "auto", - "ipv6": "auto" - }, - "r1-link1": { - "ipv4": "auto", - "ipv6": "auto" - }, - "r1-link2": { - "ipv4": "auto", - "ipv6": "auto" - }, - "r1-link3": { - "ipv4": "auto", - "ipv6": "auto" - }, - "r1-link4": { - "ipv4": "auto", - "ipv6": "auto" - }, - "r1-link5": { - "ipv4": "auto", - "ipv6": "auto" - }, - "r1-link6": { - "ipv4": "auto", - "ipv6": "auto" - }, - "r1-link7": { - "ipv4": "auto", - "ipv6": "auto" - }, - "r3-link0": { - "ipv4": "auto", - "ipv6": "auto" - } - }, - "bgp": { - "local_as": "100", - "address_family": { - "ipv4": { - "unicast": { - "neighbor": { - "r3": { - "dest_link": { - "r2-link0": { - "keepalivetimer": 1, - "holddowntimer": 4 - } - } - } - } - } - }, - "ipv6": { - "unicast": { - "neighbor": { - "r3": { - "dest_link": { - "r2-link0": { - "keepalivetimer": 1, - "holddowntimer": 4 - } - } - } - } - } - } - } - } - }, - "r3": { - "links": { - "lo": { - "ipv4": "auto", - "ipv6": "auto", - "type": "loopback" - }, - "r2-link0": { - "ipv4": "auto", - "ipv6": "auto" - } - }, - "bgp": { - "local_as": "200", - "address_family": { - "ipv4": { - "unicast": { - "neighbor": { - "r2": { - "dest_link": { - "r3-link0": { - "keepalivetimer": 1, - "holddowntimer": 4 - } - } - } - } - } - }, - "ipv6": { - "unicast": { - "neighbor": { - "r2": { - "dest_link": { - "r3-link0": { - "keepalivetimer": 1, - "holddowntimer": 4 - } - } - } - } - } - } - } - } - } - } -} \ No newline at end of file diff --git a/tests/topotests/static_routing_with_ebgp/test_static_routes_topo1_ebgp.py b/tests/topotests/static_routing_with_ebgp/test_static_routes_topo1_ebgp.py index 94f739ea1d..a33257de65 100644 --- a/tests/topotests/static_routing_with_ebgp/test_static_routes_topo1_ebgp.py +++ b/tests/topotests/static_routing_with_ebgp/test_static_routes_topo1_ebgp.py @@ -1210,93 +1210,6 @@ def test_same_rte_from_bgp_static_p0_tc5_ebgp(request): assert result is True, "Testcase {} : Failed \nError: Route is" " missing in RIB".format(tc_name) - step("Remove the redistribute static knob from R2 router") - for addr_type in ADDR_TYPES: - input_dict_2 = { - "r2": { - "bgp": { - "address_family": { - addr_type: { - "unicast": { - "redistribute": [ - {"redist_type": "static", "delete": True} - ] - } - } - } - } - } - } - result = create_router_bgp(tgen, topo, input_dict_2) - assert result is True, "Testcase {} : Failed \n Error: {}".format( - tc_name, result - ) - - step( - "After removing /adding the redistribute static knob , " - "BGP received route is deleted and added in RIB of R3 " - ) - input_dict_4 = { - "r2": { - "static_routes": [ - { - "network": NETWORK[addr_type], - "next_hop": NEXT_HOP_IP["nh1"][addr_type], - }, - { - "network": NETWORK[addr_type], - "next_hop": NEXT_HOP_IP["nh2"][addr_type], - }, - ] - } - } - dut = "r3" - result = verify_bgp_rib(tgen, addr_type, dut, input_dict_4, attempts=5, expected=False) - assert result is not True, "Testcase {} : Failed \nError: Route is" - " still present in RIB".format(tc_name) - - protocol = "bgp" - result = verify_rib( - tgen, - addr_type, - dut, - input_dict_4, - protocol=protocol, - fib=True, - expected=False, - ) - assert result is not True, "Testcase {} : Failed \nError: Route is" - " still present in RIB".format(tc_name) - - step("Configure the redistribute static knob again on R2 router") - for addr_type in ADDR_TYPES: - input_dict_2 = { - "r2": { - "bgp": { - "address_family": { - addr_type: { - "unicast": {"redistribute": [{"redist_type": "static",}]} - } - } - } - } - } - result = create_router_bgp(tgen, topo, input_dict_2) - assert result is True, "Testcase {} : Failed \n Error: {}".format( - tc_name, result - ) - dut = "r3" - result = verify_bgp_rib(tgen, addr_type, dut, input_dict_4) - assert result is True, "Testcase {} : Failed \nError: Route is" - " missing in BGP RIB".format(tc_name) - - protocol = "bgp" - result = verify_rib( - tgen, addr_type, dut, input_dict_4, protocol=protocol, fib=True - ) - assert result is True, "Testcase {} : Failed \nError: Route is" - " missing in RIB".format(tc_name) - step("Remove the static route on R3 configured with active" "interface") for addr_type in ADDR_TYPES: input_dict_4 = { diff --git a/tests/topotests/static_routing_with_ebgp/test_static_routes_topo2_ebgp.py b/tests/topotests/static_routing_with_ebgp/test_static_routes_topo2_ebgp.py index c7f01d313a..93320df327 100644 --- a/tests/topotests/static_routing_with_ebgp/test_static_routes_topo2_ebgp.py +++ b/tests/topotests/static_routing_with_ebgp/test_static_routes_topo2_ebgp.py @@ -409,60 +409,7 @@ def test_static_rte_with_8ecmp_nh_p1_tc9_ebgp(request): assert result is True, "Testcase {} : Failed\nError: Routes are" " missing in RIB".format(tc_name) - dut = "r2" protocol = "static" - step("Shut nexthop interfaces N1 to N3 one by one") - for intfr in range(0, 3): - intf = topo["routers"]["r2"]["links"]["r1-link{}".format(intfr)]["interface"] - shutdown_bringup_interface(tgen, dut, intf, False) - for addr_type in ADDR_TYPES: - nhp = intfr + 1 - input_dict_4 = { - "r2": { - "static_routes": [ - { - "network": PREFIX1[addr_type], - "next_hop": NEXT_HOP_IP["nh" + str(nhp)][addr_type], - } - ] - } - } - nh = NEXT_HOP_IP["nh" + str(nhp)][addr_type] - result = verify_rib( - tgen, - addr_type, - dut, - input_dict_4, - next_hop=nh, - protocol=protocol, - expected=False, - ) - assert result is not True, "Testcase {}: Failed\nError: Routes are" - " still present in RIB".format(tc_name) - - step("No shut the nexthop interfaces N1 to N3 one by one .") - for intfr in range(0, 3): - intf = topo["routers"]["r2"]["links"]["r1-link{}".format(intfr)]["interface"] - shutdown_bringup_interface(tgen, dut, intf, True) - for addr_type in ADDR_TYPES: - nhp = intfr + 1 - input_dict_4 = { - "r2": { - "static_routes": [ - { - "network": PREFIX1[addr_type], - "next_hop": NEXT_HOP_IP["nh" + str(nhp)][addr_type], - } - ] - } - } - nh = NEXT_HOP_IP["nh" + str(nhp)][addr_type] - result = verify_rib( - tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol - ) - assert result is True, "Testcase {} : Failed \nError: Routes are" - " missing in RIB".format(tc_name) - step("Random shut of the nexthop interfaces") randnum = random.randint(0, 7) # Shutdown interface @@ -879,39 +826,7 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ebgp(request): "Error: Routes are missing in RIB".format(tc_name) dut = "r2" - step("Shut the interfaces connected between R2 and R3 one by one") - for nhp in range(0, 3): - intf = topo["routers"]["r2"]["links"]["r3-link" + str(nhp)]["interface"] - shutdown_bringup_interface(tgen, dut, intf, False) - - protocol = "bgp" - for addr_type in ADDR_TYPES: - input_dict_4 = {"r2": {"static_routes": [{"network": PREFIX1[addr_type]}]}} - result = verify_rib( - tgen, addr_type, dut, input_dict_4, protocol=protocol, expected=False - ) - assert result is not True, "Testcase {} : Failed \n" - "Error: Routes are still present in RIB".format(tc_name) - - step("No shut the interfaces between R2 and R3 one by one") - dut = "r2" - for nhp in range(0, 3): - intf = topo["routers"]["r2"]["links"]["r3-link" + str(nhp)]["interface"] - shutdown_bringup_interface(tgen, dut, intf, True) - step( - "After each interface shut and no shut between R2 -R3 ,verify static" - "route is present in the RIB & FIB of R3 & R2 RIB/FIB is remain" - " unchanged" - ) protocol = "static" - for addr_type in ADDR_TYPES: - input_dict_4 = {"r2": {"static_routes": [{"network": PREFIX1[addr_type]}]}} - result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol) - assert result is True, "Testcase {} : Failed \n" - "Error: Routes are missing in RIB".format(tc_name) - - protocol = "static" - dut = "r2" for addr_type in ADDR_TYPES: input_dict_4 = {"r2": {"static_routes": [{"network": PREFIX1[addr_type]}]}} result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol) @@ -942,78 +857,6 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ebgp(request): "Error: Routes are still present in RIB".format(tc_name) ) - step("BGP neighbor remove and add") - for rtr in ["r2", "r3"]: - if "bgp" in topo["routers"][rtr].keys(): - delete_bgp = {rtr: {"bgp": {"delete": True}}} - result = create_router_bgp(tgen, topo, delete_bgp) - assert result is True, "Testcase {} : Failed \n Error: {}".format( - tc_name, result - ) - - create_router_bgp(tgen, topo["routers"]) - - NEXT_HOP_IP = populate_nh() - step("Verify routes are still present after delete and add bgp") - dut = "r2" - protocol = "static" - for addr_type in ADDR_TYPES: - input_dict_4 = {"r2": {"static_routes": [{"network": PREFIX1[addr_type]}]}} - result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol) - assert result is True, ( - "Testcase {} : Failed \n" - "Error: Routes are still present in RIB".format(tc_name) - ) - - dut = "r3" - protocol = "bgp" - for addr_type in ADDR_TYPES: - input_dict_4 = {"r2": {"static_routes": [{"network": PREFIX1[addr_type]}]}} - result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol) - assert result is True, ( - "Testcase {} : Failed \n" - "Error: Routes are still present in RIB".format(tc_name) - ) - - step("Remove the redistribute static knob") - for addr_type in ADDR_TYPES: - input_dict_2 = { - "r2": { - "bgp": { - "address_family": { - addr_type: { - "unicast": { - "redistribute": [ - {"redist_type": "static", "delete": True} - ] - } - } - } - } - } - } - - logger.info("Remove redistribute static") - result = create_router_bgp(tgen, topo, input_dict_2) - assert result is True, "Testcase {} : Failed \n Error: {}".format( - tc_name, result - ) - step("verify that routes are deleted from R3 routing table") - - dut = "r3" - protocol = "bgp" - input_dict_4 = {"r2": {"static_routes": [{"network": PREFIX1[addr_type]}]}} - result = verify_rib( - tgen, - addr_type, - dut, - input_dict_4, - next_hop=nh, - protocol=protocol, - expected=False, - ) - assert result is not True, "Testcase {} : Failed \nError: Routes are" - " strill present in RIB of R3".format(tc_name) write_test_footer(tc_name) @@ -1273,55 +1116,7 @@ def test_static_route_8nh_diff_AD_ebgp_ecmp_p1_tc8_ebgp(request): "Error: Routes are missing in RIB".format(tc_name) dut = "r2" - step("Shut the interfaces connected between R2 and R3 one by one") - for nhp in range(0, 3): - intf = topo["routers"]["r2"]["links"]["r3-link" + str(nhp)]["interface"] - shutdown_bringup_interface(tgen, dut, intf, False) - - protocol = "bgp" - for addr_type in ADDR_TYPES: - input_dict_4 = {"r2": {"static_routes": [{"network": PREFIX1[addr_type]}]}} - result = verify_rib( - tgen, addr_type, dut, input_dict_4, protocol=protocol, expected=False - ) - assert result is not True, "Testcase {} : Failed \n" - "Error: Routes are still present in RIB".format(tc_name) - - step("No shut the interfaces between R2 and R3 one by one") - dut = "r2" - for nhp in range(0, 3): - intf = topo["routers"]["r2"]["links"]["r3-link" + str(nhp)]["interface"] - shutdown_bringup_interface(tgen, dut, intf, True) - - step( - "After each interface shut and no shut between R2 -R3 ,verify static" - "route is present in the RIB & FIB of R3 & R2 RIB/FIB is remain" - " unchanged" - ) protocol = "static" - for addr_type in ADDR_TYPES: - input_dict_4 = {"r2": {"static_routes": [{"network": PREFIX1[addr_type]}]}} - result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol) - assert result is True, "Testcase {} : Failed \n" - "Error: Routes are missing in RIB".format(tc_name) - - protocol = "static" - dut = "r2" - for addr_type in ADDR_TYPES: - input_dict_4 = {"r2": {"static_routes": [{"network": PREFIX1[addr_type]}]}} - result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol) - assert ( - result is True - ), "Testcase {}: Failed \n " "Error: Routes are missing in RIB".format(tc_name) - - protocol = "bgp" - dut = "r3" - for addr_type in ADDR_TYPES: - input_dict_4 = {"r2": {"static_routes": [{"network": PREFIX1[addr_type]}]}} - result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol) - assert ( - result is True - ), "Testcase {}: Failed \n " "Error: Routes are missing in RIB".format(tc_name) step("Reload the FRR router") # stop/start -> restart FRR router and verify @@ -1337,79 +1132,6 @@ def test_static_route_8nh_diff_AD_ebgp_ecmp_p1_tc8_ebgp(request): "Error: Routes are still present in RIB".format(tc_name) ) - step("BGP neighbor remove and add") - for rtr in ["r2", "r3"]: - if "bgp" in topo["routers"][rtr].keys(): - delete_bgp = {rtr: {"bgp": {"delete": True}}} - result = create_router_bgp(tgen, topo, delete_bgp) - assert result is True, "Testcase {} : Failed \n Error: {}".format( - tc_name, result - ) - - create_router_bgp(tgen, topo["routers"]) - - NEXT_HOP_IP = populate_nh() - step("Verify routes are still present after delete and add bgp") - dut = "r2" - protocol = "static" - for addr_type in ADDR_TYPES: - input_dict_4 = {"r2": {"static_routes": [{"network": PREFIX1[addr_type]}]}} - result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol) - assert result is True, ( - "Testcase {} : Failed \n" - "Error: Routes are still present in RIB".format(tc_name) - ) - - dut = "r3" - protocol = "bgp" - for addr_type in ADDR_TYPES: - input_dict_4 = {"r2": {"static_routes": [{"network": PREFIX1[addr_type]}]}} - result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol) - assert result is True, ( - "Testcase {} : Failed \n" - "Error: Routes are still present in RIB".format(tc_name) - ) - - step("Remove the redistribute static knob") - for addr_type in ADDR_TYPES: - input_dict_2 = { - "r2": { - "bgp": { - "address_family": { - addr_type: { - "unicast": { - "redistribute": [ - {"redist_type": "static", "delete": True} - ] - } - } - } - } - } - } - - logger.info("Remove redistribute static") - result = create_router_bgp(tgen, topo, input_dict_2) - assert result is True, "Testcase {} : Failed \n Error: {}".format( - tc_name, result - ) - step("verify that routes are deleted from R3 routing table") - - dut = "r3" - protocol = "bgp" - input_dict_4 = {"r2": {"static_routes": [{"network": PREFIX1[addr_type]}]}} - result = verify_rib( - tgen, - addr_type, - dut, - input_dict_4, - next_hop=nh, - protocol=protocol, - expected=False, - ) - assert result is not True, "Testcase {} : Failed \nError: Routes are" - " still present in RIB of R3".format(tc_name) - write_test_footer(tc_name) @@ -1623,40 +1345,6 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc10_ebgp(request): assert result is True, "Testcase {} : Failed \nError: Route with " "lowest AD is missing in RIB".format(tc_name) - step("Shut nexthop interfaces N1 to N3 one by one") - for addr_type in ADDR_TYPES: - for nhp in range(0, 3): - intf = topo["routers"]["r2"]["links"]["r1-link" + str(nhp)]["interface"] - shutdown_bringup_interface(tgen, dut, intf, False) - input_dict_4 = {"r2": {"static_routes": [{"network": PREFIX1[addr_type],}]}} - nh = NEXT_HOP_IP["nh1"][addr_type] - result = verify_rib( - tgen, - addr_type, - dut, - input_dict_4, - next_hop=nh, - protocol=protocol, - fib=True, - expected=False, - ) - assert result is not True, "Testcase {} : Failed \n" - "Error: Routes are still present in RIB".format(tc_name) - - step("No shut the nexthop interfaces N1 to N3 one by one .") - - for addr_type in ADDR_TYPES: - for nhp in range(0, 3): - intf = topo["routers"]["r2"]["links"]["r1-link" + str(nhp)]["interface"] - shutdown_bringup_interface(tgen, dut, intf, True) - input_dict_4 = {"r2": {"static_routes": [{"network": PREFIX1[addr_type],}]}} - nh = NEXT_HOP_IP["nh1"][addr_type] - result = verify_rib( - tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True - ) - assert result is True, "Testcase {} : Failed \n" - "Error: Routes are missing in RIB".format(tc_name) - step("Random shut of the nexthop interfaces") randnum = random.randint(0, 7) for addr_type in ADDR_TYPES: @@ -1783,51 +1471,6 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc10_ebgp(request): " is missing in RIB".format(tc_name) ) - step("Remove the redistribute static knob") - for addr_type in ADDR_TYPES: - input_dict_2 = { - "r2": { - "bgp": { - "address_family": { - addr_type: { - "unicast": { - "redistribute": [ - {"redist_type": "static", "delete": True} - ] - } - } - } - } - } - } - result = create_router_bgp(tgen, topo, input_dict_2) - assert result is True, "Testcase {} : Failed \n Error: {}".format( - tc_name, result - ) - - step( - "After removing the BGP neighbor or redistribute static knob , " - "verify route got clear from RIB and FIB of R3 routes " - ) - dut = "r3" - protocol = "bgp" - for addr_type in ADDR_TYPES: - input_dict_4 = { - "r2": { - "static_routes": [ - { - "network": PREFIX1[addr_type], - "next_hop": NEXT_HOP_IP["nh" + str(nhp)][addr_type], - } - ] - } - } - result = verify_rib( - tgen, addr_type, dut, input_dict_4, protocol=protocol, expected=False - ) - assert result is not True, "Testcase {} : Failed \nError: Routes are" - " still present in RIB".format(tc_name) - write_test_footer(tc_name) diff --git a/tests/topotests/static_routing_with_ebgp/test_static_routes_topo3_ebgp.py b/tests/topotests/static_routing_with_ebgp/test_static_routes_topo3_ebgp.py deleted file mode 100644 index 26dcef13a9..0000000000 --- a/tests/topotests/static_routing_with_ebgp/test_static_routes_topo3_ebgp.py +++ /dev/null @@ -1,872 +0,0 @@ -#!/usr/bin/python - -# -# Copyright (c) 2020 by VMware, Inc. ("VMware") -# Used Copyright (c) 2018 by Network Device Education Foundation, -# Inc. ("NetDEF") in this file. -# -# Permission to use, copy, modify, and/or distribute this software -# for any purpose with or without fee is hereby granted, provided -# that the above copyright notice and this permission notice appear -# in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND VMWARE DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL VMWARE BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY -# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS -# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE -# OF THIS SOFTWARE. -# -""" - -Verify static route ECMP functionality with 8 next hop - - -Verify static route functionality with 8 next hop different AD value - - -Verify static route with tag option - - -Verify BGP did not install the static route when it receive route - with local next hop - -""" -import sys -import json -import time -import os -import pytest -import random -import platform -from lib.topotest import version_cmp - -# Save the Current Working Directory to find configuration files. -CWD = os.path.dirname(os.path.realpath(__file__)) -sys.path.append(os.path.join(CWD, "../")) -sys.path.append(os.path.join(CWD, "../lib/")) -# pylint: disable=C0413 -# Import topogen and topotest helpers -from mininet.topo import Topo -from lib.topogen import Topogen, get_topogen - -from lib.common_config import ( - start_topology, - write_test_header, - write_test_footer, - reset_config_on_routers, - verify_rib, - create_static_routes, - check_address_types, - step, - create_interfaces_cfg, - shutdown_bringup_interface, - stop_router, - start_router, -) -from lib.topolog import logger -from lib.bgp import verify_bgp_convergence, create_router_bgp, verify_bgp_rib -from lib.topojson import build_topo_from_json, build_config_from_json - -# Reading the data from JSON File for topology creation -jsonFile = "{}/static_routes_topo3_ebgp.json".format(CWD) -try: - with open(jsonFile, "r") as topoJson: - topo = json.load(topoJson) -except IOError: - assert False, "Could not read file {}".format(jsonFile) - -# Global variables -BGP_CONVERGENCE = False -ADDR_TYPES = check_address_types() -NETWORK = { - "ipv4": [ - "11.0.20.1/32", - "11.0.20.2/32", - "11.0.20.3/32", - "11.0.20.4/32", - "11.0.20.5/32", - "11.0.20.6/32", - "11.0.20.7/32", - "11.0.20.8/32", - ], - "ipv6": [ - "2::1/128", - "2::2/128", - "2::3/128", - "2::4/128", - "2::5/128", - "2::6/128", - "2::7/128", - "2::8/128", - ], -} -PREFIX1 = {"ipv4": "110.0.20.1/32", "ipv6": "20::1/128"} -NETWORK2 = {"ipv4": ["11.0.20.1/32"], "ipv6": ["2::1/128"]} -NEXT_HOP_IP = [] - - -class CreateTopo(Topo): - """ - Test CreateTopo - topology 1. - - * `Topo`: Topology object - """ - - def build(self, *_args, **_opts): - """Build function.""" - tgen = get_topogen(self) - - # Building topology from json file - build_topo_from_json(tgen, topo) - - -def setup_module(mod): - """ - - Set up the pytest environment. - - * `mod`: module name - """ - global topo - testsuite_run_time = time.asctime(time.localtime(time.time())) - logger.info("Testsuite start time: {}".format(testsuite_run_time)) - logger.info("=" * 40) - - logger.info("Running setup_module to create topology") - - # This function initiates the topology build with Topogen... - tgen = Topogen(CreateTopo, mod.__name__) - # ... and here it calls Mininet initialization functions. - - # Starting topology, create tmp files which are loaded to routers - # to start deamons and then start routers - start_topology(tgen) - - # Creating configuration from JSON - build_config_from_json(tgen, topo) - - if version_cmp(platform.release(), '4.19') < 0: - error_msg = ('These tests will not run. (have kernel "{}", ' - 'requires kernel >= 4.19)'.format(platform.release())) - pytest.skip(error_msg) - - # Checking BGP convergence - global BGP_CONVERGENCE - global ADDR_TYPES - - # Don't run this test if we have any failure. - if tgen.routers_have_failure(): - pytest.skip(tgen.errors) - # Api call verify whether BGP is converged - BGP_CONVERGENCE = verify_bgp_convergence(tgen, topo) - assert BGP_CONVERGENCE is True, "setup_module :Failed \n Error: {}".format( - BGP_CONVERGENCE - ) - - logger.info("Running setup_module() done") - - -def teardown_module(mod): - """ - Teardown the pytest environment - - * `mod`: module name - """ - - logger.info("Running teardown_module to delete topology") - - tgen = get_topogen() - - # Stop toplogy and Remove tmp files - tgen.stop_topology() - - logger.info( - "Testsuite end time: {}".format(time.asctime(time.localtime(time.time()))) - ) - logger.info("=" * 40) - - -def populate_nh(): - NEXT_HOP_IP = { - "nh1": { - "ipv4": topo["routers"]["r1"]["links"]["r2-link0"]["ipv4"].split("/")[0], - "ipv6": topo["routers"]["r1"]["links"]["r2-link0"]["ipv6"].split("/")[0], - }, - "nh2": { - "ipv4": topo["routers"]["r1"]["links"]["r2-link1"]["ipv4"].split("/")[0], - "ipv6": topo["routers"]["r1"]["links"]["r2-link1"]["ipv6"].split("/")[0], - }, - "nh3": { - "ipv4": topo["routers"]["r1"]["links"]["r2-link2"]["ipv4"].split("/")[0], - "ipv6": topo["routers"]["r1"]["links"]["r2-link2"]["ipv6"].split("/")[0], - }, - "nh4": { - "ipv4": topo["routers"]["r1"]["links"]["r2-link3"]["ipv4"].split("/")[0], - "ipv6": topo["routers"]["r1"]["links"]["r2-link3"]["ipv6"].split("/")[0], - }, - "nh5": { - "ipv4": topo["routers"]["r1"]["links"]["r2-link4"]["ipv4"].split("/")[0], - "ipv6": topo["routers"]["r1"]["links"]["r2-link4"]["ipv6"].split("/")[0], - }, - "nh6": { - "ipv4": topo["routers"]["r1"]["links"]["r2-link5"]["ipv4"].split("/")[0], - "ipv6": topo["routers"]["r1"]["links"]["r2-link5"]["ipv6"].split("/")[0], - }, - "nh7": { - "ipv4": topo["routers"]["r1"]["links"]["r2-link6"]["ipv4"].split("/")[0], - "ipv6": topo["routers"]["r1"]["links"]["r2-link6"]["ipv6"].split("/")[0], - }, - "nh8": { - "ipv4": topo["routers"]["r1"]["links"]["r2-link7"]["ipv4"].split("/")[0], - "ipv6": topo["routers"]["r1"]["links"]["r2-link7"]["ipv6"].split("/")[0], - }, - } - return NEXT_HOP_IP - - -##################################################### -# -# Tests starting -# -##################################################### - - -def test_staticroute_with_ecmp_p0_tc3_ebgp(request): - """ - Verify static route ECMP functionality with 8 next hop' - - """ - tc_name = request.node.name - write_test_header(tc_name) - tgen = get_topogen() - - # Don't run this test if we have any failure. - if tgen.routers_have_failure(): - pytest.skip(tgen.errors) - - reset_config_on_routers(tgen) - NEXT_HOP_IP = populate_nh() - - step("Configure 8 interfaces / links between R1 and R2,") - step( - "Configure IPv4 static route in R2 with 8 next hop" - "N1(21.1.1.2), N2(22.1.1.2), N3(23.1.1.2), N4(24.1.1.2)," - "N5(25.1.1.2), N6(26.1.1.2), N7(27.1.1.2),N8(28.1.1.2), Static" - "route next-hop present on R1" - ) - - step("Configure IBGP IPv4 peering between R2 and R3 router.") - - for addr_type in ADDR_TYPES: - # Enable static routes - for nhp in range(1, 9): - input_dict_4 = { - "r2": { - "static_routes": [ - { - "network": PREFIX1[addr_type], - "next_hop": NEXT_HOP_IP["nh" + str(nhp)][addr_type], - } - ] - } - } - logger.info("Configure static routes") - result = create_static_routes(tgen, input_dict_4) - assert result is True, "Testcase {} : Failed \n Error: {}".format( - tc_name, result - ) - logger.info("Verifying %s routes on r2", addr_type) - nh = [ - NEXT_HOP_IP["nh1"][addr_type], - NEXT_HOP_IP["nh2"][addr_type], - NEXT_HOP_IP["nh3"][addr_type], - NEXT_HOP_IP["nh4"][addr_type], - NEXT_HOP_IP["nh5"][addr_type], - NEXT_HOP_IP["nh6"][addr_type], - NEXT_HOP_IP["nh7"][addr_type], - NEXT_HOP_IP["nh8"][addr_type], - ] - - dut = "r2" - protocol = "static" - result = verify_rib( - tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol - ) - assert result is True, "Testcase {} : Failed \nError: Routes are" - " missing in RIB".format(tc_name) - step("Configure redistribute static in BGP on R2 router") - for addr_type in ADDR_TYPES: - input_dict_2 = { - "r2": { - "bgp": { - "address_family": { - addr_type: { - "unicast": {"redistribute": [{"redist_type": "static"}]} - } - } - } - } - } - result = create_router_bgp(tgen, topo, input_dict_2) - assert result is True, "Testcase {} : Failed \n Error: {}".format( - tc_name, result - ) - - step( - "Remove the static route configured with nexthop N1 to N8, one" - "by one from running config" - ) - for addr_type in ADDR_TYPES: - # delete static routes - for nhp in range(1, 9): - input_dict_4 = { - "r2": { - "static_routes": [ - { - "network": PREFIX1[addr_type], - "next_hop": NEXT_HOP_IP["nh" + str(nhp)][addr_type], - "delete": True, - } - ] - } - } - - logger.info("Configure static routes") - result = create_static_routes(tgen, input_dict_4) - assert result is True, "Testcase {} : Failed \n Error: {}".format( - tc_name, result - ) - - result = verify_rib( - tgen, - addr_type, - dut, - input_dict_4, - next_hop=nh, - protocol=protocol, - expected=False, - ) - assert result is not True, "Testcase {} : Failed \nError: Routes are" - " still present in RIB".format(tc_name) - - step("Configure the static route with nexthop N1 to N8, one by" "one") - - for addr_type in ADDR_TYPES: - # add static routes - for nhp in range(1, 9): - input_dict_4 = { - "r2": { - "static_routes": [ - { - "network": PREFIX1[addr_type], - "next_hop": NEXT_HOP_IP["nh" + str(nhp)][addr_type], - } - ] - } - } - - logger.info("Configure static routes") - result = create_static_routes(tgen, input_dict_4) - assert result is True, "Testcase {} : Failed \n Error: {}".format( - tc_name, result - ) - - result = verify_rib( - tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol - ) - assert result is True, "Testcase {} : Failed \nError: Routes are" - " missing in RIB".format(tc_name) - - step("Random shut of the nexthop interfaces") - randnum = random.randint(0, 7) - for addr_type in ADDR_TYPES: - intf = topo["routers"]["r2"]["links"]["r1-link" + str(randnum)]["interface"] - shutdown_bringup_interface(tgen, dut, intf, False) - nhip = NEXT_HOP_IP["nh" + str(randnum + 1)][addr_type] - input_dict_5 = { - "r2": { - "static_routes": [ - { - "network": PREFIX1[addr_type], - "next_hop": NEXT_HOP_IP["nh" + str(randnum + 1)][addr_type], - } - ] - } - } - result = verify_rib( - tgen, - addr_type, - dut, - input_dict_5, - next_hop=nhip, - protocol=protocol, - expected=False, - ) - assert result is not True, "Testcase {} : Failed \n" - "Error: Routes are still present in RIB".format(tc_name) - - step("Random no shut of the nexthop interfaces") - for addr_type in ADDR_TYPES: - intf = topo["routers"]["r2"]["links"]["r1-link" + str(randnum)]["interface"] - shutdown_bringup_interface(tgen, dut, intf, True) - nhip = NEXT_HOP_IP["nh" + str(randnum + 1)][addr_type] - result = verify_rib( - tgen, addr_type, dut, input_dict_5, next_hop=nhip, protocol=protocol - ) - assert result is True, "Testcase {} : Failed \n" - "Error: Routes are missing in RIB".format(tc_name) - - step("Reload the FRR router") - # stop/start -> restart FRR router and verify - stop_router(tgen, "r2") - start_router(tgen, "r2") - - result = verify_rib( - tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol - ) - assert result is True, "Testcase {} : Failed \nError: Routes are" - " missing in RIB".format(tc_name) - - write_test_footer(tc_name) - - -def test_staticroute_with_ecmp_with_diff_AD_p0_tc4_ebgp(request): - """ - Verify static route ECMP functionality with 8 next hop - - """ - tc_name = request.node.name - write_test_header(tc_name) - tgen = get_topogen() - - # Don't run this test if we have any failure. - if tgen.routers_have_failure(): - pytest.skip(tgen.errors) - - reset_config_on_routers(tgen) - NEXT_HOP_IP = populate_nh() - - step("Configure 8 interfaces / links between R1 and R2,") - step("Configure IBGP IPv4 peering between R2 and R3 router.") - reset_config_on_routers(tgen) - NEXT_HOP_IP = populate_nh() - nh_all = {} - for addr_type in ADDR_TYPES: - nh_all[addr_type] = [] - for nhp in range(1, 9): - nh_all[addr_type].append(NEXT_HOP_IP["nh" + str(nhp)][addr_type]) - step( - "Configure IPv4 static route in R2 with 8 next hop" - "N1(21.1.1.2) AD 10, N2(22.1.1.2) AD 20, N3(23.1.1.2) AD 30," - "N4(24.1.1.2) AD 40, N5(25.1.1.2) AD 50, N6(26.1.1.2) AD 60," - "N7(27.1.1.2) AD 70, N8(28.1.1.2) AD 80, Static route next-hop" - "present on R1" - ) - for addr_type in ADDR_TYPES: - for nhp in range(1, 9): - input_dict_4 = { - "r2": { - "static_routes": [ - { - "network": PREFIX1[addr_type], - "next_hop": NEXT_HOP_IP["nh" + str(nhp)][addr_type], - "admin_distance": 10 * nhp, - } - ] - } - } - logger.info("Configure static routes") - result = create_static_routes(tgen, input_dict_4) - assert result is True, "Testcase {} : Failed \n Error: {}".format( - tc_name, result - ) - logger.info("Verifying %s routes on r2", addr_type) - - step( - "On R2, static route installed in RIB using " - "show ip route with 8 next hop, lowest AD nexthop is active" - ) - step("On R2, static route with lowest AD nexthop installed in FIB") - input_dict_4 = { - "r2": { - "static_routes": [ - { - "network": PREFIX1[addr_type], - "next_hop": NEXT_HOP_IP["nh1"][addr_type], - "admin_distance": 10, - } - ] - } - } - dut = "r2" - protocol = "static" - nh = NEXT_HOP_IP["nh1"][addr_type] - result = verify_rib( - tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True - ) - assert result is True, "Testcase {} : Failed \nError: Route with " - " lowest AD is missing in RIB".format(tc_name) - - nh = [] - for nhp in range(2, 9): - nh.append(NEXT_HOP_IP["nh" + str(nhp)][addr_type]) - result = verify_rib( - tgen, - addr_type, - dut, - input_dict_4, - next_hop=nh, - protocol=protocol, - fib=True, - expected=False, - ) - assert result is not True, "Testcase {} : Failed \nError: Routes " - " with high AD are active in RIB".format(tc_name) - - step("Configure redistribute static in BGP on R2 router") - for addr_type in ADDR_TYPES: - input_dict_2 = { - "r2": { - "bgp": { - "address_family": { - addr_type: { - "unicast": {"redistribute": [{"redist_type": "static"}]} - } - } - } - } - } - - logger.info("Configuring redistribute static") - result = create_router_bgp(tgen, topo, input_dict_2) - assert result is True, "Testcase {} : Failed \n Error: {}".format( - tc_name, result - ) - - step( - "After configuring them, route is always active with lowest AD" - "value and all the nexthop populated in RIB and FIB again " - ) - input_dict_4 = { - "r2": { - "static_routes": [ - { - "network": PREFIX1[addr_type], - "next_hop": NEXT_HOP_IP["nh1"][addr_type], - "admin_distance": 10, - } - ] - } - } - dut = "r2" - protocol = "static" - nh = NEXT_HOP_IP["nh1"][addr_type] - result = verify_rib( - tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True - ) - assert result is True, "Testcase {} : Failed \nError: Route with " - " lowest AD is missing in RIB".format(tc_name) - - step( - "Remove the static route configured with nexthop N1 to N8, one" - "by one from running config" - ) - - for addr_type in ADDR_TYPES: - # delete static routes - for nhp in range(1, 9): - input_dict_4 = { - "r2": { - "static_routes": [ - { - "network": PREFIX1[addr_type], - "next_hop": NEXT_HOP_IP["nh" + str(nhp)][addr_type], - "admin_distance": 10 * nhp, - "delete": True, - } - ] - } - } - - logger.info("Configure static routes") - result = create_static_routes(tgen, input_dict_4) - assert result is True, "Testcase {} : Failed \n Error: {}".format( - tc_name, result - ) - - step( - "After removing the static route with N1 to N8 one by one, " - "route become active with next preferred nexthop and nexthop which " - "got removed is not shown in RIB and FIB" - ) - result = verify_rib( - tgen, - addr_type, - dut, - input_dict_4, - next_hop=nh_all[addr_type], - protocol=protocol, - expected=False, - ) - assert result is not True, "Testcase {} : Failed \nError: Routes are" - " still present in RIB".format(tc_name) - - step("Configure the static route with nexthop N1 to N8, one by" "one") - for addr_type in ADDR_TYPES: - # add static routes - for nhp in range(1, 9): - input_dict_4 = { - "r2": { - "static_routes": [ - { - "network": PREFIX1[addr_type], - "next_hop": NEXT_HOP_IP["nh" + str(nhp)][addr_type], - "admin_distance": 10 * nhp, - } - ] - } - } - logger.info("Configure static routes") - result = create_static_routes(tgen, input_dict_4) - assert result is True, "Testcase {} : Failed \n Error: {}".format( - tc_name, result - ) - - step("On R2, static route with lowest AD nexthop installed in FIB") - input_dict_4 = { - "r2": { - "static_routes": [ - { - "network": PREFIX1[addr_type], - "next_hop": NEXT_HOP_IP["nh1"][addr_type], - "admin_distance": 10, - } - ] - } - } - dut = "r2" - protocol = "static" - nh = NEXT_HOP_IP["nh1"][addr_type] - result = verify_rib( - tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True - ) - assert result is True, "Testcase {} : Failed \nError: Route with " - " lowest AD is missing in RIB".format(tc_name) - - nh = [] - for nhp in range(2, 9): - nh.append(NEXT_HOP_IP["nh" + str(nhp)][addr_type]) - result = verify_rib( - tgen, - addr_type, - dut, - input_dict_4, - next_hop=nh, - protocol=protocol, - fib=True, - expected=False, - ) - assert result is not True, "Testcase {} : Failed \nError: Routes " - " with high AD are active in RIB".format(tc_name) - - step("Random shut of the nexthop interfaces") - randnum = random.randint(0, 7) - for addr_type in ADDR_TYPES: - intf = topo["routers"]["r2"]["links"]["r1-link" + str(randnum)]["interface"] - shutdown_bringup_interface(tgen, dut, intf, False) - nhip = NEXT_HOP_IP["nh" + str(randnum + 1)][addr_type] - input_dict_5 = { - "r2": { - "static_routes": [ - { - "network": PREFIX1[addr_type], - "next_hop": NEXT_HOP_IP["nh" + str(randnum + 1)][addr_type], - } - ] - } - } - result = verify_rib( - tgen, - addr_type, - dut, - input_dict_5, - next_hop=nhip, - protocol=protocol, - expected=False, - ) - assert result is not True, "Testcase {} : Failed \n" - "Error: Routes are still present in RIB".format(tc_name) - - step("Random no shut of the nexthop interfaces") - for addr_type in ADDR_TYPES: - intf = topo["routers"]["r2"]["links"]["r1-link" + str(randnum)]["interface"] - shutdown_bringup_interface(tgen, dut, intf, True) - nhip = NEXT_HOP_IP["nh" + str(randnum + 1)][addr_type] - result = verify_rib( - tgen, addr_type, dut, input_dict_5, next_hop=nhip, protocol=protocol - ) - assert result is True, "Testcase {} : Failed \n" - "Error: Routes are missing in RIB".format(tc_name) - - step("Reload the FRR router") - # stop/start -> restart FRR router and verify - stop_router(tgen, "r2") - start_router(tgen, "r2") - - step( - "After reload of FRR router, static route installed " - "in RIB and FIB properly ." - ) - for addr_type in ADDR_TYPES: - input_dict_4 = { - "r2": { - "static_routes": [ - { - "network": PREFIX1[addr_type], - "next_hop": NEXT_HOP_IP["nh1"][addr_type], - "admin_distance": 10, - } - ] - } - } - dut = "r2" - protocol = "static" - nh = NEXT_HOP_IP["nh1"][addr_type] - result = verify_rib( - tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True - ) - assert result is True, "Testcase {} : Failed \nError: Route with " - " lowest AD is missing in RIB".format(tc_name) - - nh = [] - for nhp in range(2, 9): - nh.append(NEXT_HOP_IP["nh" + str(nhp)][addr_type]) - result = verify_rib( - tgen, - addr_type, - dut, - input_dict_4, - next_hop=nh, - protocol=protocol, - fib=True, - expected=False, - ) - assert result is not True, "Testcase {} : Failed \nError: Routes " - " with high AD are active in RIB".format(tc_name) - - step("Remove the redistribute static knob") - - for addr_type in ADDR_TYPES: - input_dict_2 = { - "r2": { - "bgp": { - "address_family": { - addr_type: { - "unicast": { - "redistribute": [ - {"redist_type": "static", "delete": True} - ] - } - } - } - } - } - } - - logger.info("Remove redistribute static") - result = create_router_bgp(tgen, topo, input_dict_2) - assert result is True, "Testcase {} : Failed \n Error: {}".format( - tc_name, result - ) - step("verify that routes are deleted from R3 routing table") - dut = "r3" - protocol = "bgp" - result = verify_rib( - tgen, - addr_type, - dut, - input_dict_4, - next_hop=nh, - protocol=protocol, - expected=False, - ) - assert result is not True, "Testcase {} : Failed \nError: Routes are" - " strill present in RIB of R3".format(tc_name) - - write_test_footer(tc_name) - - -def test_bgp_local_nexthop_p1_tc14_ebgp(request): - """ - Verify BGP did not install the static route when it receive route - with local next hop - - """ - tc_name = request.node.name - write_test_header(tc_name) - tgen = get_topogen() - - step("Configure BGP IPv4 session between R2 and R3") - step("Configure IPv4 static route on R2") - reset_config_on_routers(tgen) - - for addr_type in ADDR_TYPES: - # Enable static routes - input_dict_4 = { - "r2": { - "static_routes": [ - { - "network": NETWORK[addr_type], - "next_hop": topo["routers"]["r3"]["links"]["r2-link0"][ - addr_type - ].split("/")[0], - } - ] - } - } - - logger.info("Configure static routes") - result = create_static_routes(tgen, input_dict_4) - assert result is True, "Testcase {} : Failed \n Error: {}".format( - tc_name, result - ) - - step("Configure redistribute static in the BGP") - - input_dict_2 = { - "r2": { - "bgp": { - "address_family": { - addr_type: { - "unicast": {"redistribute": [{"redist_type": "static"}]} - } - } - } - } - } - result = create_router_bgp(tgen, topo, input_dict_2) - assert result is True, "Testcase {} : Failed \n Error: {}".format( - tc_name, result - ) - - step("Verify R2 BGP table has IPv4 route") - dut = "r2" - result = verify_rib(tgen, addr_type, dut, input_dict_4) - assert result is True, "Testcase {} : Failed \nError: Routes is" - " missing in RIB of R2".format(tc_name) - - step(" Verify route did not install in the R3 BGP table, RIB/FIB") - dut = "r3" - result = verify_bgp_rib(tgen, addr_type, dut, input_dict_4, expected=False) - assert result is not True, "Testcase {} : Failed \nError: Routes is" - " still present in BGP RIB of R2".format(tc_name) - - result = verify_rib(tgen, addr_type, dut, input_dict_4, expected=False) - assert result is not True, "Testcase {} : Failed \nError: Routes is" - " still present in RIB of R2".format(tc_name) - - write_test_footer(tc_name) - - -if __name__ == "__main__": - args = ["-s"] + sys.argv[1:] - sys.exit(pytest.main(args)) diff --git a/tests/topotests/static_routing_with_ebgp/test_static_routes_topo4_ebgp.py b/tests/topotests/static_routing_with_ebgp/test_static_routes_topo4_ebgp.py index 56c7a4fde9..75657a8895 100644 --- a/tests/topotests/static_routing_with_ebgp/test_static_routes_topo4_ebgp.py +++ b/tests/topotests/static_routing_with_ebgp/test_static_routes_topo4_ebgp.py @@ -169,7 +169,7 @@ def teardown_module(mod): # Tests starting # ##################################################### -def test_static_routes_rmap_pfxlist_p0_tc7_ebgp(request): +def static_routes_rmap_pfxlist_p0_tc7_ebgp(request): """ Verify static route are blocked from route-map & prefix-list applied in BGP nbrs diff --git a/tests/topotests/static_routing_with_ibgp/test_static_routes_topo2_ibgp.py b/tests/topotests/static_routing_with_ibgp/test_static_routes_topo2_ibgp.py index 46d28ed019..0a757c9f28 100644 --- a/tests/topotests/static_routing_with_ibgp/test_static_routes_topo2_ibgp.py +++ b/tests/topotests/static_routing_with_ibgp/test_static_routes_topo2_ibgp.py @@ -413,60 +413,7 @@ def test_static_rte_with_8ecmp_nh_p1_tc9_ibgp(request): assert result is True, "Testcase {} : Failed\nError: Routes are" " missing in RIB".format(tc_name) - dut = "r2" protocol = "static" - step("Shut nexthop interfaces N1 to N3 one by one") - for intfr in range(0, 3): - intf = topo["routers"]["r2"]["links"]["r1-link{}".format(intfr)]["interface"] - shutdown_bringup_interface(tgen, dut, intf, False) - for addr_type in ADDR_TYPES: - nhp = intfr + 1 - input_dict_4 = { - "r2": { - "static_routes": [ - { - "network": PREFIX1[addr_type], - "next_hop": NEXT_HOP_IP["nh" + str(nhp)][addr_type], - } - ] - } - } - nh = NEXT_HOP_IP["nh" + str(nhp)][addr_type] - result = verify_rib( - tgen, - addr_type, - dut, - input_dict_4, - next_hop=nh, - protocol=protocol, - expected=False, - ) - assert result is not True, "Testcase {}: Failed\nError: Routes are" - " still present in RIB".format(tc_name) - - step("No shut the nexthop interfaces N1 to N3 one by one .") - for intfr in range(0, 3): - intf = topo["routers"]["r2"]["links"]["r1-link{}".format(intfr)]["interface"] - shutdown_bringup_interface(tgen, dut, intf, True) - for addr_type in ADDR_TYPES: - nhp = intfr + 1 - input_dict_4 = { - "r2": { - "static_routes": [ - { - "network": PREFIX1[addr_type], - "next_hop": NEXT_HOP_IP["nh" + str(nhp)][addr_type], - } - ] - } - } - nh = NEXT_HOP_IP["nh" + str(nhp)][addr_type] - result = verify_rib( - tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol - ) - assert result is True, "Testcase {} : Failed \nError: Routes are" - " missing in RIB".format(tc_name) - step("Random shut of the nexthop interfaces") randnum = random.randint(0, 7) # Shutdown interface @@ -882,27 +829,7 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ibgp(request): assert result is True, "Testcase {} : Failed \n" "Error: Routes are missing in RIB".format(tc_name) - dut = "r2" - step("Shut the interfaces connected between R2 and R3 one by one") - for nhp in range(0, 3): - intf = topo["routers"]["r2"]["links"]["r3-link" + str(nhp)]["interface"] - shutdown_bringup_interface(tgen, dut, intf, False) - protocol = "bgp" - for addr_type in ADDR_TYPES: - input_dict_4 = {"r2": {"static_routes": [{"network": PREFIX1[addr_type]}]}} - result = verify_rib( - tgen, addr_type, dut, input_dict_4, protocol=protocol, expected=False - ) - assert result is not True, "Testcase {} : Failed \n" - "Error: Routes are still present in RIB".format(tc_name) - - step("No shut the interfaces between R2 and R3 one by one") - dut = "r2" - for nhp in range(0, 3): - intf = topo["routers"]["r2"]["links"]["r3-link" + str(nhp)]["interface"] - shutdown_bringup_interface(tgen, dut, intf, True) - # this is next hop reachability route in r3 as we are using ibgp dut = "r3" for addr_type in ADDR_TYPES: @@ -1291,25 +1218,7 @@ def test_static_route_8nh_diff_AD_ibgp_ecmp_p1_tc7_ibgp(request): "Error: Routes are missing in RIB".format(tc_name) dut = "r2" - step("Shut the interfaces connected between R2 and R3 one by one") - for nhp in range(0, 3): - intf = topo["routers"]["r2"]["links"]["r3-link" + str(nhp)]["interface"] - shutdown_bringup_interface(tgen, dut, intf, False) - protocol = "bgp" - for addr_type in ADDR_TYPES: - input_dict_4 = {"r2": {"static_routes": [{"network": PREFIX1[addr_type]}]}} - result = verify_rib( - tgen, addr_type, dut, input_dict_4, protocol=protocol, expected=False - ) - assert result is not True, "Testcase {} : Failed \n" - "Error: Routes are still present in RIB".format(tc_name) - - step("No shut the interfaces between R2 and R3 one by one") - dut = "r2" - for nhp in range(0, 3): - intf = topo["routers"]["r2"]["links"]["r3-link" + str(nhp)]["interface"] - shutdown_bringup_interface(tgen, dut, intf, True) # this is next hop reachability route in r3 as we are using ibgp dut = "r3" @@ -1654,40 +1563,6 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc10_ibgp(request): assert result is True, "Testcase {} : Failed \nError: Route with " "lowest AD is missing in RIB".format(tc_name) - step("Shut nexthop interfaces N1 to N3 one by one") - for addr_type in ADDR_TYPES: - for nhp in range(0, 3): - intf = topo["routers"]["r2"]["links"]["r1-link" + str(nhp)]["interface"] - shutdown_bringup_interface(tgen, dut, intf, False) - input_dict_4 = {"r2": {"static_routes": [{"network": PREFIX1[addr_type],}]}} - nh = NEXT_HOP_IP["nh1"][addr_type] - result = verify_rib( - tgen, - addr_type, - dut, - input_dict_4, - next_hop=nh, - protocol=protocol, - fib=True, - expected=False, - ) - assert result is not True, "Testcase {} : Failed \n" - "Error: Routes are still present in RIB".format(tc_name) - - step("No shut the nexthop interfaces N1 to N3 one by one .") - - for addr_type in ADDR_TYPES: - for nhp in range(0, 3): - intf = topo["routers"]["r2"]["links"]["r1-link" + str(nhp)]["interface"] - shutdown_bringup_interface(tgen, dut, intf, True) - input_dict_4 = {"r2": {"static_routes": [{"network": PREFIX1[addr_type],}]}} - nh = NEXT_HOP_IP["nh1"][addr_type] - result = verify_rib( - tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True - ) - assert result is True, "Testcase {} : Failed \n" - "Error: Routes are missing in RIB".format(tc_name) - step("Random shut of the nexthop interfaces") randnum = random.randint(0, 7) for addr_type in ADDR_TYPES: