mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 23:58:44 +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 sys
|
||||||
import pytest
|
import pytest
|
||||||
import json
|
import json
|
||||||
|
import time
|
||||||
import tempfile
|
import tempfile
|
||||||
from functools import partial
|
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
|
# Memory leak test template
|
||||||
def test_memory_leak():
|
def test_memory_leak():
|
||||||
"Run the memory leak test and report results."
|
"Run the memory leak test and report results."
|
||||||
|
Loading…
Reference in New Issue
Block a user