Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tests: Fix bgp_default_originate_topo1_3 #16673

Merged
merged 1 commit into from
Aug 28, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import time
import pytest
from lib.topolog import logger
import json

# pylint: disable=C0413
# Import topogen and topotest helpers
Expand Down Expand Up @@ -54,6 +55,7 @@
reset_config_on_routers,
create_static_routes,
check_router_status,
retry,
)

pytestmark = [pytest.mark.bgpd, pytest.mark.staticd]
Expand Down Expand Up @@ -657,7 +659,7 @@ def test_verify_default_originate_after_BGP_and_FRR_restart_p2(request):
)

step(
" Configure default originate with route-map RMv4 and RMv6 for IPv4 and IPv6 bgp neighbors on R1 ( R1-R2) "
"Configure default originate with route-map RMv4 and RMv6 for IPv4 and IPv6 bgp neighbors on R1 ( R1-R2) "
)
local_as = get_dut_as_number(tgen, dut="r1")
default_originate_config = {
Expand Down Expand Up @@ -775,7 +777,7 @@ def test_verify_default_originate_after_BGP_and_FRR_restart_p2(request):
tc_name, result
)

step(" Configure default-originate on R3 for R3 to R2 IPv4 and IPv6 BGP neighbors ")
step("Configure default-originate on R3 for R3 to R2 IPv4 and IPv6 BGP neighbors ")
local_as = get_dut_as_number(tgen, dut="r3")
default_originate_config = {
"r3": {
Expand Down Expand Up @@ -831,7 +833,7 @@ def test_verify_default_originate_after_BGP_and_FRR_restart_p2(request):
dut="r2",
routes=DEFAULT_ROUTES,
expected_nexthop=DEFAULT_ROUTE_NXT_HOP_R1,
expected=False,
expected=True,
)
assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)

Expand Down Expand Up @@ -890,57 +892,126 @@ def test_verify_default_originate_after_BGP_and_FRR_restart_p2(request):
tc_name, result
)

step(" BGP Daemon restart operation")
# Allow for verification of the table version
# as that restarting bgp on one router will cause
# r2's version number should go up as that r1
# is not directly connected to r2
# where?
@retry(retry_timeout=60)
def verify_version_upgrade(dut, version):
dut_new_ipv4_uni_json = json.loads(dut.vtysh_cmd("show bgp ipv4 uni json"))

logger.info(
"New version: {} comparing to old {}".format(
dut_new_ipv4_uni_json["tableVersion"], version
)
)
if version >= dut_new_ipv4_uni_json["tableVersion"]:
return False

return True

r2 = tgen.gears["r2"]

r2_bgp_ipv4_uni_json = json.loads(r2.vtysh_cmd("show bgp ipv4 uni json"))
curr_version = r2_bgp_ipv4_uni_json["tableVersion"]

step("BGP Daemon restart operation")
routers = ["r1", "r2"]
for dut in routers:
step(
"Restart BGPD process on {}, when all the processes are running use watchfrr ".format(
dut
)
)

kill_router_daemons(tgen, dut, ["bgpd"])
# Let's ensure that r2's version has upgraded and then
# let's check that the default route goes through
# r3's connection.
if dut == "r1":
step("Ensure that r2 prefers r3's default route at this point in time")
verify_version_upgrade(r2, curr_version)
# write code to ensure r1 neighbor is down
DEFAULT_ROUTES = {"ipv4": "0.0.0.0/0", "ipv6": "0::0/0"}
result = verify_fib_default_route(
tgen,
topo,
dut="r2",
routes=DEFAULT_ROUTES,
expected_nexthop=DEFAULT_ROUTE_NXT_HOP_R3,
expected=True,
)
assert (
result is True
), "Testcase {} : Failed \n IBGP default route should be prefeered over EBGP \n Error: {}".format(
tc_name, result
)

result = verify_rib_default_route(
tgen,
topo,
dut="r2",
routes=DEFAULT_ROUTES,
expected_nexthop=DEFAULT_ROUTE_NXT_HOP_R3,
expected=True,
)
assert result is True, "Testcase {} : Failed \n Error: {}".format(
tc_name, result
)

start_router_daemons(tgen, dut, ["bgpd"])

step("After restarting the BGP daomon Verify the default originate ")
DEFAULT_ROUTES = {"ipv4": "0.0.0.0/0", "ipv6": "0::0/0"}
result = verify_fib_default_route(
tgen,
topo,
dut="r2",
routes=DEFAULT_ROUTES,
expected_nexthop=DEFAULT_ROUTE_NXT_HOP_R3,
expected=False,
)
assert (
result is not True
), "Testcase {} : Failed \n IBGP default route should be prefeered over EBGP \n Error: {}".format(
tc_name, result
)
if dut == "r2":

result = verify_rib_default_route(
tgen,
topo,
dut="r2",
routes=DEFAULT_ROUTES,
expected_nexthop=DEFAULT_ROUTE_NXT_HOP_R3,
expected=True,
)
assert result is True, "Testcase {} : Failed \n Error: {}".format(
tc_name, result
)
@retry(60)
def check_pfx_received_sent(dut):
output = json.loads(dut.vtysh_cmd("show bgp ipv4 uni summ json"))

logger.info(output)
if output["peerCount"] != 2:
logger.info(output["peerCount"])
logger.info("pc")
return False

if output["peers"]["192.168.1.1"]["state"] != "Established":
logger.info("Not Established 192.168.1.1")
return False

if output["peers"]["192.168.2.2"]["state"] != "Established":
logger.info("Not established 192.168.2.2")
return False

if output["peers"]["192.168.1.1"]["pfxRcd"] != 6:
logger.info("1.1 prxRcd")
return False

if output["peers"]["192.168.1.1"]["pfxSnt"] != 3:
logger.info("1.1 pfxsent")
return False

if output["peers"]["192.168.2.2"]["pfxRcd"] != 4:
logger.info("2.2 pfxRcd")
return False

if output["peers"]["192.168.2.2"]["pfxSnt"] != 9:
logger.info("2.2 pfxsnt")
return False

return True

check_pfx_received_sent(r2)
step(
"Verify the default route from R1 is is recieved both on RIB and FIB on R2"
)

DEFAULT_ROUTES = {"ipv4": "0.0.0.0/0", "ipv6": "0::0/0"}
result = verify_fib_default_route(
tgen,
topo,
dut="r2",
routes=DEFAULT_ROUTES,
expected_nexthop=DEFAULT_ROUTE_NXT_HOP_R1,
expected=False,
expected=True,
)
assert result is True, "Testcase {} : Failed \n Error: {}".format(
tc_name, result
Expand Down Expand Up @@ -1003,7 +1074,7 @@ def test_verify_default_originate_after_BGP_and_FRR_restart_p2(request):
tc_name, result
)

step(" Restarting FRR routers operation")
step("Restarting FRR routers operation")
"""
NOTE : Verify that iBGP default route is preffered over eBGP default route
"""
Expand Down
Loading