topotest: stabilize OSPFv3 topology

Changes:
- Decrease hello interval to avoid packet loss slow downs
- Decrease dead interval to converge faster
- Remove previous 'Full' state check that wasn't checking for all
  peers (only one per router)

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
This commit is contained in:
Rafael Zalamena 2021-03-19 14:57:21 -03:00
parent 97ec501ef0
commit 25329da182
5 changed files with 41 additions and 55 deletions

View File

@ -11,9 +11,13 @@ debug ospf6 flooding
! !
interface r1-stubnet interface r1-stubnet
ipv6 ospf6 network broadcast ipv6 ospf6 network broadcast
ipv6 ospf6 hello-interval 2
ipv6 ospf6 dead-interval 10
! !
interface r1-sw5 interface r1-sw5
ipv6 ospf6 network broadcast ipv6 ospf6 network broadcast
ipv6 ospf6 hello-interval 2
ipv6 ospf6 dead-interval 10
! !
router ospf6 router ospf6
ospf6 router-id 10.0.0.1 ospf6 router-id 10.0.0.1

View File

@ -11,9 +11,13 @@ debug ospf6 flooding
! !
interface r2-stubnet interface r2-stubnet
ipv6 ospf6 network broadcast ipv6 ospf6 network broadcast
ipv6 ospf6 hello-interval 2
ipv6 ospf6 dead-interval 10
! !
interface r2-sw5 interface r2-sw5
ipv6 ospf6 network broadcast ipv6 ospf6 network broadcast
ipv6 ospf6 hello-interval 2
ipv6 ospf6 dead-interval 10
! !
router ospf6 router ospf6
ospf6 router-id 10.0.0.2 ospf6 router-id 10.0.0.2

View File

@ -11,12 +11,18 @@ debug ospf6 flooding
! !
interface r3-stubnet interface r3-stubnet
ipv6 ospf6 network broadcast ipv6 ospf6 network broadcast
ipv6 ospf6 hello-interval 2
ipv6 ospf6 dead-interval 10
! !
interface r3-sw5 interface r3-sw5
ipv6 ospf6 network broadcast ipv6 ospf6 network broadcast
ipv6 ospf6 hello-interval 2
ipv6 ospf6 dead-interval 10
! !
interface r3-sw6 interface r3-sw6
ipv6 ospf6 network broadcast ipv6 ospf6 network broadcast
ipv6 ospf6 hello-interval 2
ipv6 ospf6 dead-interval 10
! !
router ospf6 router ospf6
ospf6 router-id 10.0.0.3 ospf6 router-id 10.0.0.3

View File

@ -11,9 +11,13 @@ debug ospf6 flooding
! !
interface r4-stubnet interface r4-stubnet
ipv6 ospf6 network broadcast ipv6 ospf6 network broadcast
ipv6 ospf6 hello-interval 2
ipv6 ospf6 dead-interval 10
! !
interface r4-sw6 interface r4-sw6
ipv6 ospf6 network broadcast ipv6 ospf6 network broadcast
ipv6 ospf6 hello-interval 2
ipv6 ospf6 dead-interval 10
! !
router ospf6 router ospf6
ospf6 router-id 10.0.0.4 ospf6 router-id 10.0.0.4

View File

@ -185,70 +185,38 @@ def teardown_module(mod):
tgen.stop_topology() tgen.stop_topology()
def test_ospf6_converged(): def test_wait_protocol_convergence():
"Wait for OSPFv3 to converge"
tgen = get_topogen() tgen = get_topogen()
# Don't run this test if we have any failure.
if tgen.routers_have_failure(): if tgen.routers_have_failure():
pytest.skip(tgen.errors) pytest.skip(tgen.errors)
# For debugging, uncomment the next line logger.info("waiting for protocols to converge")
# tgen.mininet_cli()
# Wait for OSPF6 to converge (All Neighbors in either Full or TwoWay State) def expect_neighbor_full(router, neighbor):
logger.info("Waiting for OSPF6 convergence") "Wait until OSPFv3 convergence."
logger.info("waiting OSPFv3 router '{}'".format(router))
test_func = partial(
topotest.router_json_cmp,
tgen.gears[router],
"show ipv6 ospf6 neighbor json",
{"neighbors": [{"neighborId": neighbor, "state": "Full"}]},
)
_, result = topotest.run_and_expect(test_func, None, count=130, wait=1)
assertmsg = '"{}" convergence failure'.format(router)
assert result is None, assertmsg
# Set up for regex expect_neighbor_full("r1", "10.0.0.2")
pat1 = re.compile("^[0-9]") expect_neighbor_full("r1", "10.0.0.3")
pat2 = re.compile("Full")
timeout = 60 expect_neighbor_full("r2", "10.0.0.1")
while timeout > 0: expect_neighbor_full("r2", "10.0.0.3")
logger.info("Timeout in %s: " % timeout),
sys.stdout.flush()
# Look for any node not yet converged expect_neighbor_full("r3", "10.0.0.1")
for router, rnode in tgen.routers().items(): expect_neighbor_full("r3", "10.0.0.2")
resStr = rnode.vtysh_cmd("show ipv6 ospf neigh") expect_neighbor_full("r3", "10.0.0.4")
isConverged = False expect_neighbor_full("r4", "10.0.0.3")
for line in resStr.splitlines():
res1 = pat1.match(line)
if res1:
isConverged = True
res2 = pat2.search(line)
if res2 == None:
isConverged = False
break
if isConverged == False:
logger.info("Waiting for {}".format(router))
sys.stdout.flush()
break
if isConverged:
logger.info("Done")
break
else:
sleep(5)
timeout -= 5
if timeout == 0:
# Bail out with error if a router fails to converge
ospfStatus = rnode.vtysh_cmd("show ipv6 ospf neigh")
assert False, "OSPFv6 did not converge:\n{}".format(ospfStatus)
logger.info("OSPFv3 converged.")
# For debugging, uncomment the next line
# tgen.mininet_cli()
# Make sure that all daemons are still running
if tgen.routers_have_failure():
assert tgen.errors == "", tgen.errors
def compare_show_ipv6(rname, expected): def compare_show_ipv6(rname, expected):