]>
git.proxmox.com Git - mirror_frr.git/blob - tests/topotests/ldp_oc_acl_topo1/test_ldp_oc_acl_topo1.py
4 # test_ldp_oc_acl_topo1.py
5 # Part of NetDEF Topology Tests
7 # Copyright (c) 2020 by Volta Networks
9 # Permission to use, copy, modify, and/or distribute this software
10 # for any purpose with or without fee is hereby granted, provided
11 # that the above copyright notice and this permission notice appear
14 # THE SOFTWARE IS PROVIDED "AS IS" AND NETDEF DISCLAIMS ALL WARRANTIES
15 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
16 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NETDEF BE LIABLE FOR
17 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
18 # DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
19 # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
20 # ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
25 test_ldp_oc_acl_topo1.py: Simple FRR LDP Test
44 r2-eth2 .2 | | .2 r2-eth1
47 ~~~~~~~~~~~~~ ~~~~~~~~~~~~~
49 ~~ 10.0.3.0/24 ~~ ~~ 10.0.2.0/24 ~~
50 ~~~~~~~~~~~~~ ~~~~~~~~~~~~~
54 r3-eth1 .3 | | .3 r3-eth0 | .4 r4-eth0
55 +----+--+---+ +----+----+
57 | 3.3.3.3 | | 4.4.4.4 |
58 +-----------+ +---------+
65 from time
import sleep
66 from functools
import partial
68 # Save the Current Working Directory to find configuration files.
69 CWD
= os
.path
.dirname(os
.path
.realpath(__file__
))
70 sys
.path
.append(os
.path
.join(CWD
, "../"))
72 # pylint: disable=C0413
73 # Import topogen and topotest helpers
74 from lib
import topotest
75 from lib
.topogen
import Topogen
, TopoRouter
, get_topogen
76 from lib
.topolog
import logger
78 # Required to instantiate the topology builder class.
80 pytestmark
= [pytest
.mark
.ldpd
, pytest
.mark
.ospfd
]
89 for router
in ["r1", "r2", "r3", "r4"]:
90 tgen
.add_router(router
)
95 switch
= tgen
.add_switch("s0")
96 switch
.add_link(tgen
.gears
["r1"])
97 switch
.add_link(tgen
.gears
["r2"])
99 switch
= tgen
.add_switch("s1")
100 switch
.add_link(tgen
.gears
["r2"])
101 switch
.add_link(tgen
.gears
["r3"])
102 switch
.add_link(tgen
.gears
["r4"])
104 switch
= tgen
.add_switch("s2")
105 switch
.add_link(tgen
.gears
["r2"])
106 switch
.add_link(tgen
.gears
["r3"])
109 def setup_module(mod
):
110 "Sets up the pytest environment"
111 tgen
= Topogen(build_topo
, mod
.__name
__)
112 tgen
.start_topology()
114 router_list
= tgen
.routers()
116 # For all registered routers, load the zebra configuration file
117 for rname
, router
in router_list
.items():
119 TopoRouter
.RD_ZEBRA
, os
.path
.join(CWD
, "{}/zebra.conf".format(rname
))
121 # Don't start ospfd and ldpd in the CE nodes
122 if router
.name
[0] == "r":
124 TopoRouter
.RD_OSPF
, os
.path
.join(CWD
, "{}/ospfd.conf".format(rname
))
127 TopoRouter
.RD_LDP
, os
.path
.join(CWD
, "{}/ldpd.conf".format(rname
))
133 def teardown_module(mod
):
134 "Teardown the pytest environment"
137 # This function tears down the whole topology.
141 def router_compare_json_output(rname
, command
, reference
):
142 "Compare router JSON output"
144 logger
.info('Comparing router "%s" "%s" output', rname
, command
)
147 filename
= "{}/{}/{}".format(CWD
, rname
, reference
)
148 expected
= json
.loads(open(filename
).read())
150 # Run test function until we get an result. Wait at most 80 seconds.
151 test_func
= partial(topotest
.router_json_cmp
, tgen
.gears
[rname
], command
, expected
)
152 _
, diff
= topotest
.run_and_expect(test_func
, None, count
=160, wait
=0.5)
154 assertmsg
= '"{}" JSON output mismatches the expected result'.format(rname
)
155 assert diff
is None, assertmsg
158 def test_ospf_convergence():
159 logger
.info("Test: check OSPF adjacencies")
163 # Skip if previous fatal error condition is raised
164 if tgen
.routers_have_failure():
165 pytest
.skip(tgen
.errors
)
167 for rname
in ["r1", "r2", "r3", "r4"]:
168 router_compare_json_output(
169 rname
, "show ip ospf neighbor json", "show_ip_ospf_neighbor.json"
174 logger
.info("Test: verify RIB")
177 # Skip if previous fatal error condition is raised
178 if tgen
.routers_have_failure():
179 pytest
.skip(tgen
.errors
)
181 for rname
in ["r1", "r2", "r3", "r4"]:
182 router_compare_json_output(rname
, "show ip route json", "show_ip_route.ref")
185 def test_ldp_adjacencies():
186 logger
.info("Test: verify LDP adjacencies")
189 # Skip if previous fatal error condition is raised
190 if tgen
.routers_have_failure():
191 pytest
.skip(tgen
.errors
)
193 for rname
in ["r1", "r2", "r3", "r4"]:
194 router_compare_json_output(
195 rname
, "show mpls ldp discovery json", "show_ldp_discovery.ref"
199 def test_ldp_neighbors():
200 logger
.info("Test: verify LDP neighbors")
203 # Skip if previous fatal error condition is raised
204 if tgen
.routers_have_failure():
205 pytest
.skip(tgen
.errors
)
207 for rname
in ["r1", "r2", "r3", "r4"]:
208 router_compare_json_output(
209 rname
, "show mpls ldp neighbor json", "show_ldp_neighbor.ref"
213 def test_ldp_bindings():
214 logger
.info("Test: verify LDP bindings")
217 # Skip if previous fatal error condition is raised
218 if tgen
.routers_have_failure():
219 pytest
.skip(tgen
.errors
)
221 for rname
in ["r1", "r2", "r3", "r4"]:
222 router_compare_json_output(
223 rname
, "show mpls ldp binding json", "show_ldp_binding.ref"
227 def test_ldp_bindings_all_routes():
228 logger
.info("Test: verify LDP bindings after host filter removed")
231 # Skip if previous fatal error condition is raised
232 if tgen
.routers_have_failure():
233 pytest
.skip(tgen
.errors
)
235 # remove ACL that blocks advertising everything but host routes */
236 cmd
= 'vtysh -c "configure terminal" -c "mpls ldp" -c "address-family ipv4" -c "no label local allocate host-routes"'
237 tgen
.net
["r1"].cmd(cmd
)
240 for rname
in ["r1", "r2", "r3", "r4"]:
241 router_compare_json_output(
242 rname
, "show mpls ldp binding json", "show_ldp_all_binding.ref"
246 # Memory leak test template
247 def test_memory_leak():
248 "Run the memory leak test and report results."
250 if not tgen
.is_memleak_enabled():
251 pytest
.skip("Memory leak test/report is disabled")
253 tgen
.report_memory_leaks()
256 if __name__
== "__main__":
257 args
= ["-s"] + sys
.argv
[1:]
258 sys
.exit(pytest
.main(args
))