]>
git.proxmox.com Git - mirror_frr.git/blob - tests/topotests/ldp_oc_topo1/test_ldp_oc_topo1.py
2 # SPDX-License-Identifier: ISC
6 # Part of NetDEF Topology Tests
8 # Copyright (c) 2020 by by Volta Networks
12 test_ldp_oc_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 functools
import partial
54 # Save the Current Working Directory to find configuration files.
55 CWD
= os
.path
.dirname(os
.path
.realpath(__file__
))
56 sys
.path
.append(os
.path
.join(CWD
, "../"))
58 # pylint: disable=C0413
59 # Import topogen and topotest helpers
60 from lib
import topotest
61 from lib
.topogen
import Topogen
, TopoRouter
, get_topogen
62 from lib
.topolog
import logger
64 # Required to instantiate the topology builder class.
66 pytestmark
= [pytest
.mark
.ldpd
, pytest
.mark
.ospfd
]
75 for router
in ["r1", "r2", "r3", "r4"]:
76 tgen
.add_router(router
)
81 switch
= tgen
.add_switch("s0")
82 switch
.add_link(tgen
.gears
["r1"])
83 switch
.add_link(tgen
.gears
["r2"])
85 switch
= tgen
.add_switch("s1")
86 switch
.add_link(tgen
.gears
["r2"])
87 switch
.add_link(tgen
.gears
["r3"])
88 switch
.add_link(tgen
.gears
["r4"])
90 switch
= tgen
.add_switch("s2")
91 switch
.add_link(tgen
.gears
["r2"])
92 switch
.add_link(tgen
.gears
["r3"])
95 def setup_module(mod
):
96 "Sets up the pytest environment"
97 tgen
= Topogen(build_topo
, mod
.__name
__)
100 router_list
= tgen
.routers()
102 # For all registered routers, load the zebra configuration file
103 for rname
, router
in router_list
.items():
105 TopoRouter
.RD_ZEBRA
, os
.path
.join(CWD
, "{}/zebra.conf".format(rname
))
107 # Don't start ospfd and ldpd in the CE nodes
108 if router
.name
[0] == "r":
110 TopoRouter
.RD_OSPF
, os
.path
.join(CWD
, "{}/ospfd.conf".format(rname
))
113 TopoRouter
.RD_LDP
, os
.path
.join(CWD
, "{}/ldpd.conf".format(rname
))
119 def teardown_module(mod
):
120 "Teardown the pytest environment"
123 # This function tears down the whole topology.
127 def router_compare_json_output(rname
, command
, reference
):
128 "Compare router JSON output"
130 logger
.info('Comparing router "%s" "%s" output', rname
, command
)
133 filename
= "{}/{}/{}".format(CWD
, rname
, reference
)
134 expected
= json
.loads(open(filename
).read())
136 # Run test function until we get an result. Wait at most 80 seconds.
137 test_func
= partial(topotest
.router_json_cmp
, tgen
.gears
[rname
], command
, expected
)
138 _
, diff
= topotest
.run_and_expect(test_func
, None, count
=160, wait
=0.5)
140 assertmsg
= '"{}" JSON output mismatches the expected result'.format(rname
)
141 assert diff
is None, assertmsg
144 def test_ospf_convergence():
145 logger
.info("Test: check OSPF adjacencies")
149 # Skip if previous fatal error condition is raised
150 if tgen
.routers_have_failure():
151 pytest
.skip(tgen
.errors
)
153 for rname
in ["r1", "r2", "r3", "r4"]:
154 router_compare_json_output(
155 rname
, "show ip ospf neighbor json", "show_ip_ospf_neighbor.json"
160 logger
.info("Test: verify RIB")
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(rname
, "show ip route json", "show_ip_route.ref")
171 def test_ldp_adjacencies():
172 logger
.info("Test: verify LDP adjacencies")
175 # Skip if previous fatal error condition is raised
176 if tgen
.routers_have_failure():
177 pytest
.skip(tgen
.errors
)
179 for rname
in ["r1", "r2", "r3", "r4"]:
180 router_compare_json_output(
181 rname
, "show mpls ldp discovery json", "show_ldp_discovery.ref"
185 def test_ldp_neighbors():
186 logger
.info("Test: verify LDP neighbors")
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 neighbor json", "show_ldp_neighbor.ref"
199 def test_ldp_bindings():
200 logger
.info("Test: verify LDP bindings")
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 binding json", "show_ldp_binding.ref"
213 # Memory leak test template
214 def test_memory_leak():
215 "Run the memory leak test and report results."
217 if not tgen
.is_memleak_enabled():
218 pytest
.skip("Memory leak test/report is disabled")
220 tgen
.report_memory_leaks()
223 if __name__
== "__main__":
224 args
= ["-s"] + sys
.argv
[1:]
225 sys
.exit(pytest
.main(args
))