109 lines
3.2 KiB
Python
109 lines
3.2 KiB
Python
|
# -*- coding: utf-8 eval: (blacken-mode 1) -*-
|
||
|
# SPDX-License-Identifier: ISC
|
||
|
#
|
||
|
# May 2 2023, Christian Hopps <chopps@labn.net>
|
||
|
#
|
||
|
# Copyright (c) 2023, LabN Consulting, L.L.C.
|
||
|
#
|
||
|
"""
|
||
|
Test static route functionality using old or new configuration files.
|
||
|
|
||
|
User compat:
|
||
|
|
||
|
- mgmtd split config will first look to `/etc/frr/zebra.conf`
|
||
|
then `/etc/frr/staticd.conf` and finally `/etc/frr/mgmtd.conf`
|
||
|
|
||
|
- When new components are converted to mgmtd their split config should be
|
||
|
added here too.
|
||
|
|
||
|
Topotest compat:
|
||
|
|
||
|
- `mgmtd.conf` is copied to `/etc/frr/` for use by mgmtd when implicit load,
|
||
|
or explicit load no config specified.
|
||
|
|
||
|
- `staticd.conf` is copied to `/etc/frr/` for use by mgmtd when staticd
|
||
|
is explicit load implict config, and explicit config.
|
||
|
|
||
|
"""
|
||
|
|
||
|
import pytest
|
||
|
from lib.common_config import step
|
||
|
from lib.topogen import Topogen, TopoRouter
|
||
|
from util import check_kernel
|
||
|
|
||
|
pytestmark = [pytest.mark.staticd, pytest.mark.mgmtd]
|
||
|
|
||
|
|
||
|
@pytest.fixture(scope="module")
|
||
|
def tgen(request):
|
||
|
"Setup/Teardown the environment and provide tgen argument to tests"
|
||
|
|
||
|
topodef = {
|
||
|
"s1": ("r1", "r2", "r3", "r4"),
|
||
|
}
|
||
|
|
||
|
tgen = Topogen(topodef, request.module.__name__)
|
||
|
tgen.start_topology()
|
||
|
|
||
|
# configure mgmtd using current mgmtd config file
|
||
|
tgen.gears["r1"].load_config(TopoRouter.RD_ZEBRA, "zebra.conf")
|
||
|
tgen.gears["r1"].load_config(TopoRouter.RD_MGMTD, "mgmtd.conf")
|
||
|
|
||
|
# user/topotest compat:
|
||
|
# configure mgmtd using old staticd config file, with explicity staticd
|
||
|
# load.
|
||
|
tgen.gears["r2"].load_config(TopoRouter.RD_ZEBRA, "zebra.conf")
|
||
|
tgen.gears["r2"].load_config(TopoRouter.RD_STATIC, "staticd.conf")
|
||
|
|
||
|
# user compat:
|
||
|
# configure mgmtd using backup config file `zebra.conf`
|
||
|
tgen.gears["r3"].load_config(TopoRouter.RD_ZEBRA, "zebra.conf")
|
||
|
|
||
|
# configure mgmtd using current mgmtd config file
|
||
|
tgen.gears["r4"].load_frr_config("frr.conf")
|
||
|
|
||
|
tgen.start_router()
|
||
|
yield tgen
|
||
|
tgen.stop_topology()
|
||
|
|
||
|
|
||
|
def test_staticd_routes_present(tgen):
|
||
|
if tgen.routers_have_failure():
|
||
|
pytest.skip(tgen.errors)
|
||
|
|
||
|
for x in ["r1", "r2", "r3", "r4"]:
|
||
|
tgen.gears[x].net.cmd_nostatus(
|
||
|
"vtysh -c 'debug mgmt client frontend' "
|
||
|
"-c 'debug mgmt client backend' "
|
||
|
"-c 'debug mgmt backend frontend datastore transaction'"
|
||
|
)
|
||
|
|
||
|
r1 = tgen.routers()["r1"]
|
||
|
r2 = tgen.routers()["r2"]
|
||
|
r3 = tgen.routers()["r3"]
|
||
|
r4 = tgen.routers()["r4"]
|
||
|
|
||
|
step("Verifying routes are present on r1")
|
||
|
result = check_kernel(r1, "12.0.0.0/24")
|
||
|
assert result is None
|
||
|
result = check_kernel(r1, "13.0.0.0/24")
|
||
|
assert result is None
|
||
|
|
||
|
step("Verifying routes are present on r2")
|
||
|
result = check_kernel(r2, "11.0.0.0/24")
|
||
|
assert result is None
|
||
|
result = check_kernel(r2, "13.0.0.0/24")
|
||
|
assert result is None
|
||
|
|
||
|
step("Verifying routes are present on r3")
|
||
|
result = check_kernel(r3, "11.0.0.0/24")
|
||
|
assert result is None
|
||
|
result = check_kernel(r3, "12.0.0.0/24")
|
||
|
assert result is None
|
||
|
|
||
|
step("Verifying routes are present on r4")
|
||
|
result = check_kernel(r4, "11.0.0.0/24")
|
||
|
assert result is None
|
||
|
result = check_kernel(r4, "12.0.0.0/24")
|
||
|
assert result is None
|