]>
git.proxmox.com Git - mirror_frr.git/blob - tests/topotests/bgp_rr_ibgp/test_bgp_rr_ibgp_topo1.py
2 # SPDX-License-Identifier: ISC
5 # test_bgp_rr_ibgp_topo1.py
7 # Copyright (c) 2019 by
8 # Cumulus Networks, Inc.
13 test_bgp_rr_ibgp_topo1.py: Testing IBGP with RR and no IGP
15 Ensure that a basic rr topology comes up and correctly passes
25 # Save the Current Working Directory to find configuration files.
26 CWD
= os
.path
.dirname(os
.path
.realpath(__file__
))
27 sys
.path
.append(os
.path
.join(CWD
, "../"))
29 # pylint: disable=C0413
30 # Import topogen and topotest helpers
31 from lib
import topotest
32 from lib
.topogen
import Topogen
, TopoRouter
, get_topogen
33 from lib
.topolog
import logger
35 # Required to instantiate the topology builder class.
38 pytestmark
= [pytest
.mark
.bgpd
]
44 tgen
.add_router("tor1")
45 tgen
.add_router("tor2")
46 tgen
.add_router("spine1")
48 # First switch is for a dummy interface (for local network)
51 switch
= tgen
.add_switch("sw1")
52 switch
.add_link(tgen
.gears
["tor1"])
54 # 192.168.2.0/24 - tor1 <-> spine1 connection
55 switch
= tgen
.add_switch("sw2")
56 switch
.add_link(tgen
.gears
["tor1"])
57 switch
.add_link(tgen
.gears
["spine1"])
59 # 3rd switch is for a dummy interface (for local netwokr)
60 # 192.168.3.0/24 - tor2
61 switch
= tgen
.add_switch("sw3")
62 switch
.add_link(tgen
.gears
["tor2"])
64 # 192.168.4.0/24 - tor2 <-> spine1 connection
65 switch
= tgen
.add_switch("sw4")
66 switch
.add_link(tgen
.gears
["tor2"])
67 switch
.add_link(tgen
.gears
["spine1"])
70 #####################################################
74 #####################################################
77 def setup_module(module
):
79 tgen
= Topogen(build_topo
, module
.__name
__)
82 # This is a sample of configuration loading.
83 router_list
= tgen
.routers()
84 for rname
, router
in router_list
.items():
86 TopoRouter
.RD_ZEBRA
, os
.path
.join(CWD
, "{}/zebra.conf".format(rname
))
89 TopoRouter
.RD_BGP
, os
.path
.join(CWD
, "{}/bgpd.conf".format(rname
))
96 def teardown_module(_mod
):
97 "Teardown the pytest environment"
100 # This function tears down the whole topology.
104 def test_converge_protocols():
105 "Wait for protocol convergence"
108 # Don't run this test if we have any failure.
109 if tgen
.routers_have_failure():
110 pytest
.skip(tgen
.errors
)
112 topotest
.sleep(5, "Waiting for BGP_RR_IBGP convergence")
115 def test_bgp_rr_ibgp_routes():
116 "Test Route Reflection"
119 # Don't run this test if we have any failure.
120 if tgen
.routers_have_failure():
121 pytest
.skip(tgen
.errors
)
123 # Verify BGP_RR_IBGP Status
124 logger
.info("Verifying BGP_RR_IBGP routes")
127 def test_zebra_ipv4_routingTable():
128 "Test 'show ip route'"
131 # Don't run this test if we have any failure.
132 if tgen
.routers_have_failure():
133 pytest
.skip(tgen
.errors
)
136 router_list
= tgen
.routers().values()
137 for router
in router_list
:
138 output
= router
.vtysh_cmd("show ip route json", isjson
=True)
139 refTableFile
= "{}/{}/show_ip_route.json_ref".format(CWD
, router
.name
)
140 expected
= json
.loads(open(refTableFile
).read())
142 assertmsg
= "Zebra IPv4 Routing Table verification failed for router {}".format(
145 assert topotest
.json_cmp(output
, expected
) is None, assertmsg
148 def test_shutdown_check_stderr():
149 if os
.environ
.get("TOPOTESTS_CHECK_STDERR") is None:
150 pytest
.skip("Skipping test for Stderr output and memory leaks")
153 # Don't run this test if we have any failure.
154 if tgen
.routers_have_failure():
155 pytest
.skip(tgen
.errors
)
157 logger
.info("Verifying unexpected STDERR output from daemons")
159 router_list
= tgen
.routers().values()
160 for router
in router_list
:
163 log
= tgen
.net
[router
.name
].getStdErr("bgpd")
165 logger
.error("BGPd StdErr Log:" + log
)
166 log
= tgen
.net
[router
.name
].getStdErr("zebra")
168 logger
.error("Zebra StdErr Log:" + log
)
171 if __name__
== "__main__":
172 args
= ["-s"] + sys
.argv
[1:]
173 sys
.exit(pytest
.main(args
))
176 # Auxiliary Functions