]> git.proxmox.com Git - mirror_frr.git/blob - tests/topotests/bgp_as_override/test_bgp_as_override.py
Merge pull request #12780 from opensourcerouting/spdx-license-id
[mirror_frr.git] / tests / topotests / bgp_as_override / test_bgp_as_override.py
1 #!/usr/bin/env python
2 # SPDX-License-Identifier: ISC
3
4 #
5 # Copyright (c) 2022 by
6 # Donatas Abraitis <donatas@opensourcerouting.org>
7 #
8
9 """
10 """
11
12 import os
13 import sys
14 import json
15 import pytest
16 import functools
17
18 CWD = os.path.dirname(os.path.realpath(__file__))
19 sys.path.append(os.path.join(CWD, "../"))
20
21 # pylint: disable=C0413
22 from lib import topotest
23 from lib.topogen import Topogen, TopoRouter, get_topogen
24 from lib.common_config import step
25
26 pytestmark = [pytest.mark.bgpd]
27
28
29 def build_topo(tgen):
30 for routern in range(1, 7):
31 tgen.add_router("r{}".format(routern))
32
33 switch = tgen.add_switch("s1")
34 switch.add_link(tgen.gears["r1"])
35 switch.add_link(tgen.gears["r2"])
36
37 switch = tgen.add_switch("s2")
38 switch.add_link(tgen.gears["r2"])
39 switch.add_link(tgen.gears["r3"])
40
41 switch = tgen.add_switch("s3")
42 switch.add_link(tgen.gears["r3"])
43 switch.add_link(tgen.gears["r4"])
44
45
46 def setup_module(mod):
47 tgen = Topogen(build_topo, mod.__name__)
48 tgen.start_topology()
49
50 router_list = tgen.routers()
51
52 for i, (rname, router) in enumerate(router_list.items(), 1):
53 router.load_config(
54 TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
55 )
56 router.load_config(
57 TopoRouter.RD_BGP, os.path.join(CWD, "{}/bgpd.conf".format(rname))
58 )
59
60 tgen.start_router()
61
62
63 def teardown_module(mod):
64 tgen = get_topogen()
65 tgen.stop_topology()
66
67
68 def test_bgp_as_override():
69 tgen = get_topogen()
70
71 if tgen.routers_have_failure():
72 pytest.skip(tgen.errors)
73
74 r3 = tgen.gears["r3"]
75 r4 = tgen.gears["r4"]
76
77 def _bgp_converge():
78 output = json.loads(r3.vtysh_cmd("show ip bgp neighbor 192.168.2.1 json"))
79 expected = {
80 "192.168.2.1": {
81 "bgpState": "Established",
82 "addressFamilyInfo": {"ipv4Unicast": {"acceptedPrefixCounter": 2}},
83 }
84 }
85 return topotest.json_cmp(output, expected)
86
87 def _bgp_as_override():
88 output = json.loads(r4.vtysh_cmd("show bgp ipv4 unicast json"))
89 expected = {
90 "routes": {
91 "172.16.255.1/32": [{"valid": True, "path": "65003 65002 65003"}]
92 }
93 }
94 return topotest.json_cmp(output, expected)
95
96 step("Initial BGP converge")
97 test_func = functools.partial(_bgp_converge)
98 _, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
99 assert result is None, "Failed to see BGP convergence on R4"
100
101 step("Check if BGP as-override from R3 works")
102 test_func = functools.partial(_bgp_as_override)
103 _, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
104 assert result is None, "Failed to see overriden ASN (65001) from R3"
105
106
107 if __name__ == "__main__":
108 args = ["-s"] + sys.argv[1:]
109 sys.exit(pytest.main(args))