]> git.proxmox.com Git - mirror_frr.git/blob - tests/topotests/bgp_as_override/test_bgp_as_override.py
doc: Add `show ipv6 rpf X:X::X:X` command to docs
[mirror_frr.git] / tests / topotests / bgp_as_override / test_bgp_as_override.py
1 #!/usr/bin/env python
2
3 #
4 # Copyright (c) 2022 by
5 # Donatas Abraitis <donatas@opensourcerouting.org>
6 #
7 # Permission to use, copy, modify, and/or distribute this software
8 # for any purpose with or without fee is hereby granted, provided
9 # that the above copyright notice and this permission notice appear
10 # in all copies.
11 #
12 # THE SOFTWARE IS PROVIDED "AS IS" AND NETDEF DISCLAIMS ALL WARRANTIES
13 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NETDEF BE LIABLE FOR
15 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
16 # DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
17 # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
18 # ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
19 # OF THIS SOFTWARE.
20 #
21
22 """
23 """
24
25 import os
26 import sys
27 import json
28 import pytest
29 import functools
30
31 CWD = os.path.dirname(os.path.realpath(__file__))
32 sys.path.append(os.path.join(CWD, "../"))
33
34 # pylint: disable=C0413
35 from lib import topotest
36 from lib.topogen import Topogen, TopoRouter, get_topogen
37 from lib.common_config import step
38
39 pytestmark = [pytest.mark.bgpd]
40
41
42 def build_topo(tgen):
43 for routern in range(1, 7):
44 tgen.add_router("r{}".format(routern))
45
46 switch = tgen.add_switch("s1")
47 switch.add_link(tgen.gears["r1"])
48 switch.add_link(tgen.gears["r2"])
49
50 switch = tgen.add_switch("s2")
51 switch.add_link(tgen.gears["r2"])
52 switch.add_link(tgen.gears["r3"])
53
54 switch = tgen.add_switch("s3")
55 switch.add_link(tgen.gears["r3"])
56 switch.add_link(tgen.gears["r4"])
57
58
59 def setup_module(mod):
60 tgen = Topogen(build_topo, mod.__name__)
61 tgen.start_topology()
62
63 router_list = tgen.routers()
64
65 for i, (rname, router) in enumerate(router_list.items(), 1):
66 router.load_config(
67 TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
68 )
69 router.load_config(
70 TopoRouter.RD_BGP, os.path.join(CWD, "{}/bgpd.conf".format(rname))
71 )
72
73 tgen.start_router()
74
75
76 def teardown_module(mod):
77 tgen = get_topogen()
78 tgen.stop_topology()
79
80
81 def test_bgp_as_override():
82 tgen = get_topogen()
83
84 if tgen.routers_have_failure():
85 pytest.skip(tgen.errors)
86
87 r3 = tgen.gears["r3"]
88 r4 = tgen.gears["r4"]
89
90 def _bgp_converge():
91 output = json.loads(r3.vtysh_cmd("show ip bgp neighbor 192.168.2.1 json"))
92 expected = {
93 "192.168.2.1": {
94 "bgpState": "Established",
95 "addressFamilyInfo": {"ipv4Unicast": {"acceptedPrefixCounter": 2}},
96 }
97 }
98 return topotest.json_cmp(output, expected)
99
100 def _bgp_as_override():
101 output = json.loads(r4.vtysh_cmd("show bgp ipv4 unicast json"))
102 expected = {
103 "routes": {
104 "172.16.255.1/32": [{"valid": True, "path": "65003 65002 65003"}]
105 }
106 }
107 return topotest.json_cmp(output, expected)
108
109 step("Initial BGP converge")
110 test_func = functools.partial(_bgp_converge)
111 _, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
112 assert result is None, "Failed to see BGP convergence on R4"
113
114 step("Check if BGP as-override from R3 works")
115 test_func = functools.partial(_bgp_as_override)
116 _, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
117 assert result is None, "Failed to see overriden ASN (65001) from R3"
118
119
120 if __name__ == "__main__":
121 args = ["-s"] + sys.argv[1:]
122 sys.exit(pytest.main(args))