]>
git.proxmox.com Git - mirror_frr.git/blob - tests/topotests/ldp_oc_acl_topo1/test_ldp_oc_acl_topo1.py
2 # SPDX-License-Identifier: ISC
5 # test_ldp_oc_acl_topo1.py
6 # Part of NetDEF Topology Tests
8 # Copyright (c) 2020 by Volta Networks
12 test_ldp_oc_acl_topo1.py: Simple FRR LDP Test
31 r2-eth2 .2 | | .2 r2-eth1
34 ~~~~~~~~~~~~~ ~~~~~~~~~~~~~
36 ~~ 10.0.3.0/24 ~~ ~~ 10.0.2.0/24 ~~
37 ~~~~~~~~~~~~~ ~~~~~~~~~~~~~
41 r3-eth1 .3 | | .3 r3-eth0 | .4 r4-eth0
42 +----+--+---+ +----+----+
44 | 3.3.3.3 | | 4.4.4.4 |
45 +-----------+ +---------+
52 from time
import sleep
53 from functools
import partial
55 # Save the Current Working Directory to find configuration files.
56 CWD
= os
.path
.dirname(os
.path
.realpath(__file__
))
57 sys
.path
.append(os
.path
.join(CWD
, "../"))
59 # pylint: disable=C0413
60 # Import topogen and topotest helpers
61 from lib
import topotest
62 from lib
.topogen
import Topogen
, TopoRouter
, get_topogen
63 from lib
.topolog
import logger
65 # Required to instantiate the topology builder class.
67 pytestmark
= [pytest
.mark
.ldpd
, pytest
.mark
.ospfd
]
76 for router
in ["r1", "r2", "r3", "r4"]:
77 tgen
.add_router(router
)
82 switch
= tgen
.add_switch("s0")
83 switch
.add_link(tgen
.gears
["r1"])
84 switch
.add_link(tgen
.gears
["r2"])
86 switch
= tgen
.add_switch("s1")
87 switch
.add_link(tgen
.gears
["r2"])
88 switch
.add_link(tgen
.gears
["r3"])
89 switch
.add_link(tgen
.gears
["r4"])
91 switch
= tgen
.add_switch("s2")
92 switch
.add_link(tgen
.gears
["r2"])
93 switch
.add_link(tgen
.gears
["r3"])
96 def setup_module(mod
):
97 "Sets up the pytest environment"
98 tgen
= Topogen(build_topo
, mod
.__name
__)
101 router_list
= tgen
.routers()
103 # For all registered routers, load the zebra configuration file
104 for rname
, router
in router_list
.items():
106 TopoRouter
.RD_ZEBRA
, os
.path
.join(CWD
, "{}/zebra.conf".format(rname
))
108 # Don't start ospfd and ldpd in the CE nodes
109 if router
.name
[0] == "r":
111 TopoRouter
.RD_OSPF
, os
.path
.join(CWD
, "{}/ospfd.conf".format(rname
))
114 TopoRouter
.RD_LDP
, os
.path
.join(CWD
, "{}/ldpd.conf".format(rname
))
120 def teardown_module(mod
):
121 "Teardown the pytest environment"
124 # This function tears down the whole topology.
128 def router_compare_json_output(rname
, command
, reference
):
129 "Compare router JSON output"
131 logger
.info('Comparing router "%s" "%s" output', rname
, command
)
134 filename
= "{}/{}/{}".format(CWD
, rname
, reference
)
135 expected
= json
.loads(open(filename
).read())
137 # Run test function until we get an result. Wait at most 80 seconds.
138 test_func
= partial(topotest
.router_json_cmp
, tgen
.gears
[rname
], command
, expected
)
139 _
, diff
= topotest
.run_and_expect(test_func
, None, count
=160, wait
=0.5)
141 assertmsg
= '"{}" JSON output mismatches the expected result'.format(rname
)
142 assert diff
is None, assertmsg
145 def test_ospf_convergence():
146 logger
.info("Test: check OSPF adjacencies")
150 # Skip if previous fatal error condition is raised
151 if tgen
.routers_have_failure():
152 pytest
.skip(tgen
.errors
)
154 for rname
in ["r1", "r2", "r3", "r4"]:
155 router_compare_json_output(
156 rname
, "show ip ospf neighbor json", "show_ip_ospf_neighbor.json"
161 logger
.info("Test: verify RIB")
164 # Skip if previous fatal error condition is raised
165 if tgen
.routers_have_failure():
166 pytest
.skip(tgen
.errors
)
168 for rname
in ["r1", "r2", "r3", "r4"]:
169 router_compare_json_output(rname
, "show ip route json", "show_ip_route.ref")
172 def test_ldp_adjacencies():
173 logger
.info("Test: verify LDP adjacencies")
176 # Skip if previous fatal error condition is raised
177 if tgen
.routers_have_failure():
178 pytest
.skip(tgen
.errors
)
180 for rname
in ["r1", "r2", "r3", "r4"]:
181 router_compare_json_output(
182 rname
, "show mpls ldp discovery json", "show_ldp_discovery.ref"
186 def test_ldp_neighbors():
187 logger
.info("Test: verify LDP neighbors")
190 # Skip if previous fatal error condition is raised
191 if tgen
.routers_have_failure():
192 pytest
.skip(tgen
.errors
)
194 for rname
in ["r1", "r2", "r3", "r4"]:
195 router_compare_json_output(
196 rname
, "show mpls ldp neighbor json", "show_ldp_neighbor.ref"
200 def test_ldp_bindings():
201 logger
.info("Test: verify LDP bindings")
204 # Skip if previous fatal error condition is raised
205 if tgen
.routers_have_failure():
206 pytest
.skip(tgen
.errors
)
208 for rname
in ["r1", "r2", "r3", "r4"]:
209 router_compare_json_output(
210 rname
, "show mpls ldp binding json", "show_ldp_binding.ref"
214 def test_ldp_bindings_all_routes():
215 logger
.info("Test: verify LDP bindings after host filter removed")
218 # Skip if previous fatal error condition is raised
219 if tgen
.routers_have_failure():
220 pytest
.skip(tgen
.errors
)
222 # remove ACL that blocks advertising everything but host routes */
223 cmd
= 'vtysh -c "configure terminal" -c "mpls ldp" -c "address-family ipv4" -c "no label local allocate host-routes"'
224 tgen
.net
["r1"].cmd(cmd
)
227 for rname
in ["r1", "r2", "r3", "r4"]:
228 router_compare_json_output(
229 rname
, "show mpls ldp binding json", "show_ldp_all_binding.ref"
233 # Memory leak test template
234 def test_memory_leak():
235 "Run the memory leak test and report results."
237 if not tgen
.is_memleak_enabled():
238 pytest
.skip("Memory leak test/report is disabled")
240 tgen
.report_memory_leaks()
243 if __name__
== "__main__":
244 args
= ["-s"] + sys
.argv
[1:]
245 sys
.exit(pytest
.main(args
))