]>
git.proxmox.com Git - mirror_frr.git/blob - tests/topotests/bgp_suppress_fib/test_bgp_suppress_fib.py
2 # SPDX-License-Identifier: ISC
5 # test_bgp_suppress_fib.py
7 # Copyright (c) 2019 by
17 from functools
import partial
18 from time
import sleep
19 from lib
.topolog
import logger
21 CWD
= os
.path
.dirname(os
.path
.realpath(__file__
))
22 sys
.path
.append(os
.path
.join(CWD
, "../"))
24 # pylint: disable=C0413
25 from lib
import topotest
26 from lib
.topogen
import Topogen
, TopoRouter
, get_topogen
28 pytestmark
= [pytest
.mark
.bgpd
]
32 for routern
in range(1, 4):
33 tgen
.add_router("r{}".format(routern
))
35 switch
= tgen
.add_switch("s1")
36 switch
.add_link(tgen
.gears
["r1"])
37 switch
.add_link(tgen
.gears
["r2"])
39 switch
= tgen
.add_switch("s2")
40 switch
.add_link(tgen
.gears
["r2"])
41 switch
.add_link(tgen
.gears
["r3"])
44 def setup_module(mod
):
45 tgen
= Topogen(build_topo
, mod
.__name
__)
48 router_list
= tgen
.routers()
50 for i
, (rname
, router
) in enumerate(router_list
.items(), 1):
52 TopoRouter
.RD_ZEBRA
, os
.path
.join(CWD
, "{}/zebra.conf".format(rname
))
55 TopoRouter
.RD_BGP
, os
.path
.join(CWD
, "{}/bgpd.conf".format(rname
))
61 def teardown_module(mod
):
69 if tgen
.routers_have_failure():
70 pytest
.skip(tgen
.errors
)
74 json_file
= "{}/r3/v4_route.json".format(CWD
)
75 expected
= json
.loads(open(json_file
).read())
78 topotest
.router_json_cmp
,
80 "show ip route 40.0.0.0 json",
83 _
, result
= topotest
.run_and_expect(test_func
, None, count
=20, wait
=0.5)
84 assertmsg
= '"r3" JSON output mismatches'
85 assert result
is None, assertmsg
87 json_file
= "{}/r3/v4_route2.json".format(CWD
)
88 expected
= json
.loads(open(json_file
).read())
91 topotest
.router_json_cmp
,
93 "show ip route 50.0.0.0 json",
96 _
, result
= topotest
.run_and_expect(test_func
, None, count
=10, wait
=0.5)
97 assertmsg
= '"r3" JSON output mismatches'
98 assert result
is None, assertmsg
100 json_file
= "{}/r3/v4_route3.json".format(CWD
)
101 expected
= json
.loads(open(json_file
).read())
104 topotest
.router_json_cmp
,
106 "show ip route 10.0.0.3 json",
109 _
, result
= topotest
.run_and_expect(test_func
, None, count
=10, wait
=0.5)
112 def test_bgp_better_admin_won():
113 "A better Admin distance protocol may come along and knock us out"
117 if tgen
.routers_have_failure():
118 pytest
.skip(tgen
.errors
)
120 r2
= tgen
.gears
["r2"]
121 r2
.vtysh_cmd("conf\nip route 40.0.0.0/8 10.0.0.10")
123 json_file
= "{}/r2/v4_override.json".format(CWD
)
124 expected
= json
.loads(open(json_file
).read())
126 logger
.info(expected
)
128 topotest
.router_json_cmp
, r2
, "show ip route 40.0.0.0 json", expected
131 _
, result
= topotest
.run_and_expect(test_func
, None, count
=10, wait
=0.5)
132 assertmsg
= '"r2" static route did not take over'
133 assert result
is None, assertmsg
135 r3
= tgen
.gears
["r3"]
137 json_file
= "{}/r3/v4_override.json".format(CWD
)
138 expected
= json
.loads(open(json_file
).read())
141 topotest
.router_json_cmp
, r3
, "show ip route 40.0.0.0 json", expected
144 _
, result
= topotest
.run_and_expect(test_func
, None, count
=10, wait
=0.5)
145 assertmsg
= '"r3" route to 40.0.0.0 should have been lost'
146 assert result
is None, assertmsg
148 r2
.vtysh_cmd("conf\nno ip route 40.0.0.0/8 10.0.0.10")
150 json_file
= "{}/r3/v4_route.json".format(CWD
)
151 expected
= json
.loads(open(json_file
).read())
154 topotest
.router_json_cmp
,
156 "show ip route 40.0.0.0 json",
159 _
, result
= topotest
.run_and_expect(test_func
, None, count
=10, wait
=0.5)
160 assertmsg
= '"r3" route to 40.0.0.0 did not come back'
161 assert result
is None, assertmsg
164 def test_bgp_allow_as_in():
167 if tgen
.routers_have_failure():
168 pytest
.skip(tgen
.errors
)
170 r2
= tgen
.gears
["r2"]
172 config_file
= "{}/r2/bgpd.allowas_in.conf".format(CWD
)
173 r2
.run("vtysh -f {}".format(config_file
))
175 json_file
= "{}/r2/bgp_ipv4_allowas.json".format(CWD
)
176 expected
= json
.loads(open(json_file
).read())
179 topotest
.router_json_cmp
,
181 "show bgp ipv4 uni 192.168.1.1/32 json",
184 _
, result
= topotest
.run_and_expect(test_func
, None, count
=10, wait
=0.5)
185 assertmsg
= '"r2" static redistribution failed into bgp'
186 assert result
is None, assertmsg
188 r1
= tgen
.gears
["r1"]
190 json_file
= "{}/r1/bgp_ipv4_allowas.json".format(CWD
)
191 expected
= json
.loads(open(json_file
).read())
194 topotest
.router_json_cmp
,
196 "show bgp ipv4 uni 192.168.1.1/32 json",
200 _
, result
= topotest
.run_and_expect(test_func
, None, count
=10, wait
=0.5)
201 assertmsg
= '"r1" 192.168.1.1/32 route should have arrived'
202 assert result
is None, assertmsg
204 r2
.vtysh_cmd("conf\nno ip route 192.168.1.1/32 10.0.0.10")
206 json_file
= "{}/r2/no_bgp_ipv4_allowas.json".format(CWD
)
207 expected
= json
.loads(open(json_file
).read())
210 topotest
.router_json_cmp
,
212 "show bgp ipv4 uni 192.168.1.1/32 json",
216 _
, result
= topotest
.run_and_expect(test_func
, None, count
=10, wait
=0.5)
217 assertmsg
= '"r2" 192.168.1.1/32 route should be gone'
218 assert result
is None, assertmsg
220 def test_local_vs_non_local():
223 if tgen
.routers_have_failure():
224 pytest
.skip(tgen
.errors
)
226 r2
= tgen
.gears
["r2"]
228 output
= json
.loads(r2
.vtysh_cmd("show bgp ipv4 uni 60.0.0.0/24 json"))
229 paths
= output
["paths"]
230 for i
in range(len(paths
)):
231 if "fibPending" in paths
[i
]:
232 assert(False), "Route 60.0.0.0/24 should not have fibPending"
235 if __name__
== "__main__":
236 args
= ["-s"] + sys
.argv
[1:]
237 sys
.exit(pytest
.main(args
))