tests: add tests for OSPF GR unplanned outages

Reuse the exiting GR topotests since planned and unplanned GR should
behave the same.

The only difference is that for unplanned GR there's no preparation
phase. The OSPF daemons are just killed (SIGTERM) and restarted
normally. The tests then proceed to do the same checks they do for
planned GRs.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
This commit is contained in:
Renato Westphal 2023-03-03 13:09:20 -03:00
parent 0c05ceae00
commit 763c4113aa
2 changed files with 276 additions and 0 deletions

View File

@ -430,6 +430,144 @@ def test_gr_rt7():
check_routers(restarting="rt7")
#
# Test rt1 performing an unplanned graceful restart
#
def test_unplanned_gr_rt1():
logger.info("Test: verify rt1 performing an unplanned graceful restart")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
kill_router_daemons(tgen, "rt1", ["ospf6d"], save_config=False)
start_router_daemons(tgen, "rt1", ["ospf6d"])
expect_grace_lsa(restarting="1.1.1.1", helper="rt2")
ensure_gr_is_in_zebra("rt1")
check_routers(restarting="rt1")
#
# Test rt2 performing an unplanned graceful restart
#
def test_unplanned_gr_rt2():
logger.info("Test: verify rt2 performing an unplanned graceful restart")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
kill_router_daemons(tgen, "rt2", ["ospf6d"], save_config=False)
start_router_daemons(tgen, "rt2", ["ospf6d"])
expect_grace_lsa(restarting="2.2.2.2", helper="rt1")
expect_grace_lsa(restarting="2.2.2.2", helper="rt3")
ensure_gr_is_in_zebra("rt2")
check_routers(restarting="rt2")
#
# Test rt3 performing an unplanned graceful restart
#
def test_unplanned_gr_rt3():
logger.info("Test: verify rt3 performing an unplanned graceful restart")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
kill_router_daemons(tgen, "rt3", ["ospf6d"], save_config=False)
start_router_daemons(tgen, "rt3", ["ospf6d"])
expect_grace_lsa(restarting="3.3.3.3", helper="rt2")
expect_grace_lsa(restarting="3.3.3.3", helper="rt4")
expect_grace_lsa(restarting="3.3.3.3", helper="rt6")
ensure_gr_is_in_zebra("rt3")
check_routers(restarting="rt3")
#
# Test rt4 performing an unplanned graceful restart
#
def test_unplanned_gr_rt4():
logger.info("Test: verify rt4 performing an unplanned graceful restart")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
kill_router_daemons(tgen, "rt4", ["ospf6d"], save_config=False)
start_router_daemons(tgen, "rt4", ["ospf6d"])
expect_grace_lsa(restarting="4.4.4.4", helper="rt3")
expect_grace_lsa(restarting="4.4.4.4", helper="rt5")
ensure_gr_is_in_zebra("rt4")
check_routers(restarting="rt4")
#
# Test rt5 performing an unplanned graceful restart
#
def test_unplanned_gr_rt5():
logger.info("Test: verify rt5 performing an unplanned graceful restart")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
kill_router_daemons(tgen, "rt5", ["ospf6d"], save_config=False)
start_router_daemons(tgen, "rt5", ["ospf6d"])
expect_grace_lsa(restarting="5.5.5.5", helper="rt4")
ensure_gr_is_in_zebra("rt5")
check_routers(restarting="rt5")
#
# Test rt6 performing an unplanned graceful restart
#
def test_unplanned_gr_rt6():
logger.info("Test: verify rt6 performing an unplanned graceful restart")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
kill_router_daemons(tgen, "rt6", ["ospf6d"], save_config=False)
start_router_daemons(tgen, "rt6", ["ospf6d"])
expect_grace_lsa(restarting="6.6.6.6", helper="rt3")
expect_grace_lsa(restarting="6.6.6.6", helper="rt7")
ensure_gr_is_in_zebra("rt6")
check_routers(restarting="rt6")
#
# Test rt7 performing an unplanned graceful restart
#
def test_unplanned_gr_rt7():
logger.info("Test: verify rt7 performing an unplanned graceful restart")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
kill_router_daemons(tgen, "rt7", ["ospf6d"], save_config=False)
start_router_daemons(tgen, "rt7", ["ospf6d"])
expect_grace_lsa(restarting="6.6.6.6", helper="rt6")
ensure_gr_is_in_zebra("rt7")
check_routers(restarting="rt7")
# Memory leak test template
def test_memory_leak():
"Run the memory leak test and report results."

View File

@ -434,6 +434,144 @@ def test_gr_rt7():
check_routers(restarting="rt7")
#
# Test rt1 performing an unplanned graceful restart
#
def test_unplanned_gr_rt1():
logger.info("Test: verify rt1 performing an unplanned graceful restart")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
kill_router_daemons(tgen, "rt1", ["ospfd"], save_config=False)
start_router_daemons(tgen, "rt1", ["ospfd"])
expect_grace_lsa(restarting="1.1.1.1", area="0.0.0.1", helper="rt2")
ensure_gr_is_in_zebra("rt1")
check_routers(restarting="rt1")
#
# Test rt2 performing an unplanned graceful restart
#
def test_unplanned_gr_rt2():
logger.info("Test: verify rt2 performing an unplanned graceful restart")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
kill_router_daemons(tgen, "rt2", ["ospfd"], save_config=False)
start_router_daemons(tgen, "rt2", ["ospfd"])
expect_grace_lsa(restarting="2.2.2.2", area="0.0.0.1", helper="rt1")
expect_grace_lsa(restarting="2.2.2.2", area="0.0.0.0", helper="rt3")
ensure_gr_is_in_zebra("rt2")
check_routers(restarting="rt2")
#
# Test rt3 performing an unplanned graceful restart
#
def test_unplanned_gr_rt3():
logger.info("Test: verify rt3 performing an unplanned graceful restart")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
kill_router_daemons(tgen, "rt3", ["ospfd"], save_config=False)
start_router_daemons(tgen, "rt3", ["ospfd"])
expect_grace_lsa(restarting="3.3.3.3", area="0.0.0.0", helper="rt2")
expect_grace_lsa(restarting="3.3.3.3", area="0.0.0.0", helper="rt4")
expect_grace_lsa(restarting="3.3.3.3", area="0.0.0.0", helper="rt6")
ensure_gr_is_in_zebra("rt3")
check_routers(restarting="rt3")
#
# Test rt4 performing an unplanned graceful restart
#
def test_unplanned_gr_rt4():
logger.info("Test: verify rt4 performing an unplanned graceful restart")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
kill_router_daemons(tgen, "rt4", ["ospfd"], save_config=False)
start_router_daemons(tgen, "rt4", ["ospfd"])
expect_grace_lsa(restarting="4.4.4.4", area="0.0.0.0", helper="rt3")
expect_grace_lsa(restarting="4.4.4.4", area="0.0.0.2", helper="rt5")
ensure_gr_is_in_zebra("rt4")
check_routers(restarting="rt4")
#
# Test rt5 performing an unplanned graceful restart
#
def test_unplanned_gr_rt5():
logger.info("Test: verify rt5 performing an unplanned graceful restart")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
kill_router_daemons(tgen, "rt5", ["ospfd"], save_config=False)
start_router_daemons(tgen, "rt5", ["ospfd"])
expect_grace_lsa(restarting="5.5.5.5", area="0.0.0.2", helper="rt4")
ensure_gr_is_in_zebra("rt5")
check_routers(restarting="rt5")
#
# Test rt6 performing an unplanned graceful restart
#
def test_unplanned_gr_rt6():
logger.info("Test: verify rt6 performing an unplanned graceful restart")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
kill_router_daemons(tgen, "rt6", ["ospfd"], save_config=False)
start_router_daemons(tgen, "rt6", ["ospfd"])
expect_grace_lsa(restarting="6.6.6.6", area="0.0.0.0", helper="rt3")
expect_grace_lsa(restarting="6.6.6.6", area="0.0.0.3", helper="rt7")
ensure_gr_is_in_zebra("rt6")
check_routers(restarting="rt6")
#
# Test rt7 performing an unplanned graceful restart
#
def test_unplanned_gr_rt7():
logger.info("Test: verify rt7 performing a graceful restart")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
kill_router_daemons(tgen, "rt7", ["ospfd"], save_config=False)
start_router_daemons(tgen, "rt7", ["ospfd"])
expect_grace_lsa(restarting="7.7.7.7", area="0.0.0.3", helper="rt6")
ensure_gr_is_in_zebra("rt7")
check_routers(restarting="rt7")
# Memory leak test template
def test_memory_leak():
"Run the memory leak test and report results."