diff options
Diffstat (limited to 'tests/topotests/zebra_netlink/test_zebra_netlink.py')
| -rw-r--r-- | tests/topotests/zebra_netlink/test_zebra_netlink.py | 95 |
1 files changed, 50 insertions, 45 deletions
diff --git a/tests/topotests/zebra_netlink/test_zebra_netlink.py b/tests/topotests/zebra_netlink/test_zebra_netlink.py index 05cc0ae4a1..ca90c5cb15 100644 --- a/tests/topotests/zebra_netlink/test_zebra_netlink.py +++ b/tests/topotests/zebra_netlink/test_zebra_netlink.py @@ -24,21 +24,15 @@ test_zebra_netlink.py: Test some basic interactions with kernel using Netlink """ - -import os -import sys -import pytest +# pylint: disable=C0413 +import ipaddress import json +import sys from functools import partial -# Save the Current Working Directory to find configuration files. -CWD = os.path.dirname(os.path.realpath(__file__)) -sys.path.append(os.path.join(CWD, "../")) - -# pylint: disable=C0413 -# Import topogen and topotest helpers +import pytest from lib import topotest -from lib.topogen import Topogen, TopoRouter, get_topogen +from lib.topogen import Topogen, TopoRouter from lib.topolog import logger @@ -52,62 +46,73 @@ pytestmark = [pytest.mark.sharpd] ##################################################### -def setup_module(mod): +@pytest.fixture(scope="module") +def tgen(request): "Sets up the pytest environment" topodef = {"s1": ("r1")} - tgen = Topogen(topodef, mod.__name__) + tgen = Topogen(topodef, request.module.__name__) tgen.start_topology() + # Initialize all routers. router_list = tgen.routers() for rname, router in router_list.items(): - router.load_config( - TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname)) - ) - - router.load_config( - TopoRouter.RD_SHARP, os.path.join(CWD, "{}/sharpd.conf".format(rname)) - ) + router.load_config(TopoRouter.RD_ZEBRA, "zebra.conf") + router.load_config(TopoRouter.RD_SHARP) - # Initialize all routers. tgen.start_router() + yield tgen + tgen.stop_topology() -def teardown_module(_mod): - "Teardown the pytest environment" - tgen = get_topogen() - - # This function tears down the whole topology. - tgen.stop_topology() +@pytest.fixture(autouse=True) +def skip_on_failure(tgen): + if tgen.routers_have_failure(): + pytest.skip("skipped because of previous test failure") -def test_zebra_netlink_batching(): +def test_zebra_netlink_batching(tgen): "Test the situation where dataplane fills netlink send buffer entirely." logger.info( "Test the situation where dataplane fills netlink send buffer entirely." ) - tgen = get_topogen() - if tgen.routers_have_failure(): - pytest.skip("skipped because of previous test failure") r1 = tgen.gears["r1"] # Reduce the size of the buffer to hit the limit. r1.vtysh_cmd("conf t\nzebra kernel netlink batch-tx-buf 256 256") - r1.vtysh_cmd("sharp install routes 2.1.3.7 nexthop 192.168.1.1 100") - json_file = "{}/r1/v4_route.json".format(CWD) - expected = json.loads(open(json_file).read()) - test_func = partial( - topotest.router_json_cmp, - r1, - "show ip route json", - expected, - ) - _, result = topotest.run_and_expect(test_func, None, count=2, wait=0.5) - assertmsg = '"r1" JSON output mismatches' - assert result is None, assertmsg - - r1.vtysh_cmd("sharp remove routes 2.1.3.7 100") + count = 100 + r1.vtysh_cmd("sharp install routes 2.1.3.7 nexthop 192.168.1.1 " + str(count)) + + # Generate expected results + entry = { + "protocol": "sharp", + "distance": 150, + "metric": 0, + "installed": True, + "table": 254, + "nexthops": [ + { + "fib": True, + "ip": "192.168.1.1", + "afi": "ipv4", + "interfaceName": "r1-eth0", + "active": True, + "weight": 1, + } + ], + } + + match = {} + base = int(ipaddress.ip_address(u"2.1.3.7")) + for i in range(base, base + count): + pfx = str(ipaddress.ip_network((i, 32))) + match[pfx] = [dict(entry, prefix=pfx)] + + ok = topotest.router_json_cmp_retry(r1, "show ip route json", match) + assert ok, '"r1" JSON output mismatches' + + r1.vtysh_cmd("sharp remove routes 2.1.3.7 " + str(count)) if __name__ == "__main__": |
