]>
git.proxmox.com Git - mirror_frr.git/blob - tests/topotests/bgp_multiview_topo1/test_bgp_multiview_topo1.py
2f3421d184e0d7fd71248eff7998663763400035
2 # SPDX-License-Identifier: ISC
5 # test_bgp_multiview_topo1.py
6 # Part of NetDEF Topology Tests
8 # Copyright (c) 2016 by
9 # Network Device Education Foundation, Inc. ("NetDEF")
13 test_bgp_multiview_topo1.py: Simple FRR Route-Server Test
15 +----------+ +----------+ +----------+ +----------+ +----------+
16 | peer1 | | peer2 | | peer3 | | peer4 | | peer5 |
17 | AS 65001 | | AS 65002 | | AS 65003 | | AS 65004 | | AS 65005 |
18 +-----+----+ +-----+----+ +-----+----+ +-----+----+ +-----+----+
19 | .1 | .2 | .3 | .4 | .5
20 | ______/ / / _________/
21 \ / ________________/ / /
22 | | / _________________________/ / +----------+
23 | | | / __________________________/ ___| peer6 |
24 | | | | / ____________________________/.6 | AS 65006 |
25 | | | | | / _________________________ +----------+
26 | | | | | | / __________________ \ +----------+
27 | | | | | | | / \ \___| peer7 |
28 | | | | | | | | \ .7 | AS 65007 |
29 ~~~~~~~~~~~~~~~~~~~~~ \ +----------+
30 ~~ SW1 ~~ \ +----------+
31 ~~ Switch ~~ \_____| peer8 |
32 ~~ 172.16.1.0/24 ~~ .8 | AS 65008 |
33 ~~~~~~~~~~~~~~~~~~~~~ +----------+
45 ~~~~~~~~~~~~~ Stub Network is redistributed
46 ~~ SW0 ~~ into each BGP view with different
47 ~~ 172.20.0.1/28 ~~ attributes (using route-map)
57 from time
import sleep
59 from functools
import partial
61 sys
.path
.append(os
.path
.dirname(os
.path
.dirname(os
.path
.abspath(__file__
))))
62 from lib
import topotest
63 from lib
.topogen
import get_topogen
, Topogen
64 from lib
.common_config
import step
67 pytestmark
= [pytest
.mark
.bgpd
]
73 #####################################################
75 ## Network Topology Definition
77 #####################################################
82 router
= tgen
.add_router("r1")
84 # Setup Provider BGP peers
87 peer
[i
] = tgen
.add_exabgp_peer(
88 "peer%s" % i
, ip
="172.16.1.%s/24" % i
, defaultRoute
="via 172.16.1.254"
91 # First switch is for a dummy interface (for local network)
92 switch
= tgen
.add_switch("sw0")
93 switch
.add_link(router
, nodeif
="r1-stub")
95 # Second switch is for connection to all peering routers
96 switch
= tgen
.add_switch("sw1")
97 switch
.add_link(router
, nodeif
="r1-eth0")
99 switch
.add_link(peer
[j
], nodeif
="peer%s-eth0" % j
)
102 #####################################################
106 #####################################################
109 def setup_module(module
):
110 thisDir
= os
.path
.dirname(os
.path
.realpath(__file__
))
111 tgen
= Topogen(build_topo
, module
.__name
__)
112 tgen
.start_topology()
115 router
= tgen
.net
["r1"]
116 router
.loadConf("zebra", "%s/r1/zebra.conf" % thisDir
)
117 router
.loadConf("bgpd", "%s/r1/bgpd.conf" % thisDir
)
118 tgen
.gears
["r1"].start()
120 # Starting PE Hosts and init ExaBGP on each of them
121 peer_list
= tgen
.exabgp_peers()
122 for pname
, peer
in peer_list
.items():
123 peer_dir
= os
.path
.join(thisDir
, pname
)
124 env_file
= os
.path
.join(thisDir
, "exabgp.env")
125 peer
.start(peer_dir
, env_file
)
128 def teardown_module(module
):
133 def test_router_running():
136 if tgen
.routers_have_failure():
137 pytest
.skip(tgen
.errors
)
140 def test_bgp_converge():
141 "Check for BGP converged on all peers and BGP views"
145 if tgen
.routers_have_failure():
146 pytest
.skip(tgen
.errors
)
148 # Wait for BGP to converge (All Neighbors in either Full or TwoWay State)
149 step("Verify for BGP to converge")
153 print("Timeout in %s: " % timeout
),
155 # Look for any node not yet converged
156 for i
in range(1, 2):
157 for view
in range(1, 4):
158 notConverged
= tgen
.net
["r%s" % i
].cmd(
159 r
'vtysh -c "show ip bgp view %s summary" 2> /dev/null | grep ^[0-9] | grep -vP " 11\s+(\d+)"'
163 print("Waiting for r%s, view %s" % (i
, view
))
175 # Bail out with error if a router fails to converge
176 bgpStatus
= tgen
.net
["r%s" % i
].cmd(
177 'vtysh -c "show ip bgp view %s summary"' % view
179 assert False, "BGP did not converge:\n%s" % bgpStatus
181 tgen
.routers_have_failure()
184 def test_bgp_routingTable():
187 if tgen
.routers_have_failure():
188 pytest
.skip(tgen
.errors
)
190 thisDir
= os
.path
.dirname(os
.path
.realpath(__file__
))
192 step("Verifying BGP Routing Tables")
194 router
= tgen
.gears
["r1"]
195 for view
in range(1, 4):
196 json_file
= "{}/{}/view_{}.json".format(thisDir
, router
.name
, view
)
197 expected
= json
.loads(open(json_file
).read())
199 topotest
.router_json_cmp
,
201 "show ip bgp view {} json".format(view
),
204 _
, result
= topotest
.run_and_expect(test_func
, None, count
=5, wait
=1)
205 assertmsg
= "Routing Table verification failed for router {}, view {}".format(
208 assert result
is None, assertmsg
210 tgen
.routers_have_failure()
213 def test_shutdown_check_memleak():
215 if not tgen
.is_memleak_enabled():
216 pytest
.skip("Memory leak test/report is disabled")
218 tgen
.report_memory_leaks()
221 if __name__
== "__main__":
222 # To suppress tracebacks, either use the following pytest call or add "--tb=no" to cli
223 # retval = pytest.main(["-s", "--tb=no"])
224 retval
= pytest
.main(["-s"])