From 55dcbd329286cbc01495b9d4e88c2cfaadcd4fa3 Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Mon, 11 Nov 2024 17:07:45 +0200 Subject: [PATCH] tests: Check if BGP BFD session is created correctly with multihop/update-source Signed-off-by: Donatas Abraitis --- tests/topotests/bgp_bfd_session/__init__.py | 0 tests/topotests/bgp_bfd_session/r1/frr.conf | 10 ++ .../bgp_bfd_session/test_bgp_bfd_session.py | 97 +++++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 tests/topotests/bgp_bfd_session/__init__.py create mode 100644 tests/topotests/bgp_bfd_session/r1/frr.conf create mode 100644 tests/topotests/bgp_bfd_session/test_bgp_bfd_session.py diff --git a/tests/topotests/bgp_bfd_session/__init__.py b/tests/topotests/bgp_bfd_session/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/tests/topotests/bgp_bfd_session/r1/frr.conf b/tests/topotests/bgp_bfd_session/r1/frr.conf new file mode 100644 index 000000000000..1b248dc332d7 --- /dev/null +++ b/tests/topotests/bgp_bfd_session/r1/frr.conf @@ -0,0 +1,10 @@ +! +interface r1-eth0 + ip address 10.0.0.1/24 +! +router bgp 65000 + neighbor 192.168.1.2 remote-as auto + neighbor 192.168.1.2 bfd + neighbor 192.168.1.2 ebgp-multihop 10 + neighbor 192.168.1.2 update-source 10.0.0.1 +exit diff --git a/tests/topotests/bgp_bfd_session/test_bgp_bfd_session.py b/tests/topotests/bgp_bfd_session/test_bgp_bfd_session.py new file mode 100644 index 000000000000..6884670789ed --- /dev/null +++ b/tests/topotests/bgp_bfd_session/test_bgp_bfd_session.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python +# SPDX-License-Identifier: ISC + +# +# Copyright (c) 2024 by +# Donatas Abraitis +# + +import os +import sys +import json +import pytest +import functools + +CWD = os.path.dirname(os.path.realpath(__file__)) +sys.path.append(os.path.join(CWD, "../")) + +# pylint: disable=C0413 +from lib import topotest +from lib.topogen import Topogen, get_topogen, TopoRouter +from lib.common_config import step + +pytestmark = [pytest.mark.bgpd] + + +def build_topo(tgen): + r1 = tgen.add_router("r1") + + switch = tgen.add_switch("s1") + switch.add_link(r1) + + +def setup_module(mod): + tgen = Topogen(build_topo, mod.__name__) + tgen.start_topology() + + for _, (rname, router) in enumerate(tgen.routers().items(), 1): + router.load_frr_config( + os.path.join(CWD, "{}/frr.conf".format(rname)), + [ + (TopoRouter.RD_ZEBRA, None), + (TopoRouter.RD_MGMTD, None), + (TopoRouter.RD_BFD, None), + (TopoRouter.RD_BGP, None), + ], + ) + + tgen.start_router() + + +def teardown_module(mod): + tgen = get_topogen() + tgen.stop_topology() + + +def test_bgp_bfd_session(): + tgen = get_topogen() + + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + r1 = tgen.gears["r1"] + + def _bfd_session(): + output = json.loads(r1.vtysh_cmd("show bfd peers json")) + expected = [ + { + "multihop": True, + "peer": "192.168.1.2", + "local": "10.0.0.1", + "vrf": "default", + "minimum-ttl": 246, + "status": "down", + "diagnostic": "ok", + "remote-diagnostic": "ok", + "type": "dynamic", + } + ] + return topotest.json_cmp(output, expected) + + test_func = functools.partial(_bfd_session) + _, result = topotest.run_and_expect(test_func, None, count=30, wait=1) + assert result is None, "Can't see BFD session created" + + +def test_memory_leak(): + "Run the memory leak test and report results." + tgen = get_topogen() + if not tgen.is_memleak_enabled(): + pytest.skip("Memory leak test/report is disabled") + + tgen.report_memory_leaks() + + +if __name__ == "__main__": + args = ["-s"] + sys.argv[1:] + sys.exit(pytest.main(args))