mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-03 08:56:13 +00:00
topotests: isis-lfa add a switchover test after hello timeout
Add a switchover test that consists in: - Setting no link-detect on rt1 eth-rt2 so that zebra does not take account linkdown events on this interface. - Shutting down rt1 eth-rt2 from the switch side - Wait for the hello timer expiration Check that the switchover between primary and backup happens before the SPF re-computation. Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
This commit is contained in:
parent
f4d0de1072
commit
e87245d038
@ -55,6 +55,7 @@ import os
|
||||
import sys
|
||||
import pytest
|
||||
import json
|
||||
import time
|
||||
import tempfile
|
||||
from functools import partial
|
||||
|
||||
@ -703,6 +704,121 @@ def test_rib_ipv6_step16():
|
||||
)
|
||||
|
||||
|
||||
#
|
||||
# Step 17
|
||||
#
|
||||
# Action(s):
|
||||
# - Unshut the interface to rt2 from the switch sid
|
||||
#
|
||||
# Expected changes:
|
||||
# - The routing table converges
|
||||
#
|
||||
def test_rib_ipv6_step17():
|
||||
logger.info("Test (step 17): verify IPv6 RIB")
|
||||
tgen = get_topogen()
|
||||
|
||||
# Skip if previous fatal error condition is raised
|
||||
if tgen.routers_have_failure():
|
||||
pytest.skip(tgen.errors)
|
||||
|
||||
rname = "rt1"
|
||||
|
||||
logger.info("Unsetting spf-delay-ietf init-delay of 15s")
|
||||
tgen.net[rname].cmd('vtysh -c "conf t" -c "router isis 1" -c "no spf-delay-ietf"')
|
||||
|
||||
logger.info(
|
||||
"Unshut the interface to rt2 from the switch side and check fast-reroute"
|
||||
)
|
||||
tgen.net.cmd_raises("ip link set %s up" % tgen.net["s1"].intfs[0])
|
||||
|
||||
logger.info("Setting spf-delay-ietf init-delay of 15s")
|
||||
tgen.net[rname].cmd(
|
||||
'vtysh -c "conf t" -c "router isis 1" -c "spf-delay-ietf init-delay 15000 short-delay 0 long-delay 0 holddown 0 time-to-learn 0"'
|
||||
)
|
||||
|
||||
router_compare_json_output(
|
||||
rname,
|
||||
"show ipv6 route isis json",
|
||||
outputs[rname][14]["show_ipv6_route.ref"],
|
||||
)
|
||||
|
||||
|
||||
#
|
||||
# Step 18
|
||||
#
|
||||
# Action(s):
|
||||
# - drop traffic between rt1 and rt2 by shutting down the bridge between
|
||||
# the routers. Interfaces on rt1 and rt2 stay up.
|
||||
#
|
||||
#
|
||||
# Expected changes:
|
||||
# - Route switchover of routes via eth-rt2
|
||||
#
|
||||
def test_rib_ipv6_step18():
|
||||
logger.info("Test (step 18): verify IPv6 RIB")
|
||||
tgen = get_topogen()
|
||||
|
||||
# Skip if previous fatal error condition is raised
|
||||
if tgen.routers_have_failure():
|
||||
pytest.skip(tgen.errors)
|
||||
|
||||
logger.info("Drop traffic between rt1 and rt2")
|
||||
tgen.net.cmd_raises("ip link set s1 down")
|
||||
|
||||
rname = "rt1"
|
||||
|
||||
retry = 200 + 1
|
||||
|
||||
while retry:
|
||||
retry -= 1
|
||||
output = tgen.gears[rname].vtysh_cmd("show isis neighbor json")
|
||||
output_json = json.loads(output)
|
||||
found = False
|
||||
for neighbor in output_json["areas"][0]["circuits"]:
|
||||
if "adj" in neighbor and neighbor["adj"] == "rt2":
|
||||
found = True
|
||||
break
|
||||
if not found:
|
||||
break
|
||||
time.sleep(0.05)
|
||||
|
||||
assert not found, "rt2 neighbor is still present"
|
||||
|
||||
router_compare_json_output(
|
||||
rname,
|
||||
"show ipv6 route isis json",
|
||||
outputs[rname][15]["show_ipv6_route.ref"],
|
||||
count=2,
|
||||
wait=0.05,
|
||||
)
|
||||
|
||||
|
||||
#
|
||||
# Step 19
|
||||
#
|
||||
# Action(s): wait for the convergence and SPF computation on rt1
|
||||
#
|
||||
# Expected changes:
|
||||
# - convergence of IPv6 RIB
|
||||
#
|
||||
def test_rib_ipv6_step19():
|
||||
logger.info("Test (step 19): verify IPv6 RIB")
|
||||
tgen = get_topogen()
|
||||
|
||||
# Skip if previous fatal error condition is raised
|
||||
if tgen.routers_have_failure():
|
||||
pytest.skip(tgen.errors)
|
||||
|
||||
logger.info("Check SPF convergence")
|
||||
|
||||
for rname in ["rt1"]:
|
||||
router_compare_json_output(
|
||||
rname,
|
||||
"show ipv6 route isis json",
|
||||
outputs[rname][16]["show_ipv6_route.ref"],
|
||||
)
|
||||
|
||||
|
||||
# Memory leak test template
|
||||
def test_memory_leak():
|
||||
"Run the memory leak test and report results."
|
||||
|
Loading…
Reference in New Issue
Block a user