]> git.proxmox.com Git - mirror_frr.git/blob - tests/topotests/bgp_set_aspath_replace/test_bgp_set_aspath_replace.py
Merge pull request #12798 from donaldsharp/rib_match_multicast
[mirror_frr.git] / tests / topotests / bgp_set_aspath_replace / test_bgp_set_aspath_replace.py
1 #!/usr/bin/env python
2 # SPDX-License-Identifier: ISC
3
4 #
5 # test_bgp_set_aspath_replace.py
6 #
7 # Copyright (c) 2022 by
8 # Donatas Abraitis <donatas.abraitis@gmail.com>
9 #
10
11 """
12 Test if `set as-path replace` is working correctly for route-maps.
13 """
14
15 import os
16 import sys
17 import json
18 import pytest
19 import functools
20
21 CWD = os.path.dirname(os.path.realpath(__file__))
22 sys.path.append(os.path.join(CWD, "../"))
23
24 # pylint: disable=C0413
25 from lib import topotest
26 from lib.topogen import Topogen, TopoRouter, get_topogen
27
28 pytestmark = [pytest.mark.bgpd]
29
30
31 def build_topo(tgen):
32 for routern in range(1, 5):
33 tgen.add_router("r{}".format(routern))
34
35 switch = tgen.add_switch("s1")
36 switch.add_link(tgen.gears["r1"])
37 switch.add_link(tgen.gears["r2"])
38
39 switch = tgen.add_switch("s2")
40 switch.add_link(tgen.gears["r2"])
41 switch.add_link(tgen.gears["r3"])
42
43
44 def setup_module(mod):
45 tgen = Topogen(build_topo, mod.__name__)
46 tgen.start_topology()
47
48 router_list = tgen.routers()
49
50 for i, (rname, router) in enumerate(router_list.items(), 1):
51 router.load_config(
52 TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
53 )
54 router.load_config(
55 TopoRouter.RD_BGP, os.path.join(CWD, "{}/bgpd.conf".format(rname))
56 )
57
58 tgen.start_router()
59
60
61 def teardown_module(mod):
62 tgen = get_topogen()
63 tgen.stop_topology()
64
65
66 def test_bgp_maximum_prefix_out():
67 tgen = get_topogen()
68
69 if tgen.routers_have_failure():
70 pytest.skip(tgen.errors)
71
72 def _bgp_converge(router):
73 output = json.loads(router.vtysh_cmd("show bgp ipv4 unicast json"))
74 expected = {
75 "routes": {
76 "172.16.255.31/32": [{"path": "65002 65001"}],
77 "172.16.255.32/32": [{"path": "65001 65001"}],
78 }
79 }
80 return topotest.json_cmp(output, expected)
81
82 test_func = functools.partial(_bgp_converge, tgen.gears["r1"])
83 _, result = topotest.run_and_expect(test_func, None, count=30, wait=0.5)
84
85 assert result is None, "Failed overriding incoming AS-PATH with route-map"
86
87
88 if __name__ == "__main__":
89 args = ["-s"] + sys.argv[1:]
90 sys.exit(pytest.main(args))