]>
git.proxmox.com Git - mirror_frr.git/blob - tests/topotests/ospf_basic_functionality/test_ospf_nssa.py
4 # Copyright (c) 2020 by VMware, Inc. ("VMware")
5 # Used Copyright (c) 2018 by Network Device Education Foundation, Inc.
6 # ("NetDEF") in this file.
8 # Permission to use, copy, modify, and/or distribute this software
9 # for any purpose with or without fee is hereby granted, provided
10 # that the above copyright notice and this permission notice appear
13 # THE SOFTWARE IS PROVIDED "AS IS" AND VMWARE DISCLAIMS ALL WARRANTIES
14 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
15 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL VMWARE BE LIABLE FOR
16 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
17 # DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
18 # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
19 # ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
24 """OSPF Basic Functionality Automation."""
26 from lib
.ospf
import (
32 from lib
.topojson
import build_config_from_json
33 from lib
.topolog
import logger
34 from lib
.common_config
import (
38 reset_config_on_routers
,
44 from lib
.topogen
import Topogen
, get_topogen
50 # Save the Current Working Directory to find configuration files.
51 CWD
= os
.path
.dirname(os
.path
.realpath(__file__
))
52 sys
.path
.append(os
.path
.join(CWD
, "../"))
53 sys
.path
.append(os
.path
.join(CWD
, "../lib/"))
54 # pylint: disable=C0413
55 # Import topogen and topotest helpers
57 pytestmark
= [pytest
.mark
.ospfd
, pytest
.mark
.staticd
]
73 Please view in a fixed-width font such as Courier.
75 +R1 +------------+R2 |
84 +R0 +-------------+R3 |
90 1. OSPF Learning - Verify OSPF can learn different types of LSA and
91 processes them.[Edge learning different types of LSAs]
92 2. Verify that ospf non back bone area can be configured as NSSA area
93 3. Verify that ospf NSSA area DUT is capable receiving & processing
98 def setup_module(mod
):
100 Sets up the pytest environment
104 testsuite_run_time
= time
.asctime(time
.localtime(time
.time()))
105 logger
.info("Testsuite start time: {}".format(testsuite_run_time
))
106 logger
.info("=" * 40)
108 logger
.info("Running setup_module to create topology")
110 # This function initiates the topology build with Topogen...
111 json_file
= "{}/ospf_nssa.json".format(CWD
)
112 tgen
= Topogen(json_file
, mod
.__name
__)
114 topo
= tgen
.json_topo
115 # ... and here it calls Mininet initialization functions.
117 # get list of daemons needs to be started for this suite.
118 daemons
= topo_daemons(tgen
, topo
)
120 # Starting topology, create tmp files which are loaded to routers
121 # to start deamons and then start routers
122 start_topology(tgen
, daemons
)
124 # Creating configuration from JSON
125 build_config_from_json(tgen
, topo
)
127 # Don't run this test if we have any failure.
128 if tgen
.routers_have_failure():
129 pytest
.skip(tgen
.errors
)
130 # Api call verify whether OSPF is converged
131 ospf_covergence
= verify_ospf_neighbor(tgen
, topo
)
132 assert ospf_covergence
is True, "setup_module :Failed \n Error:" " {}".format(
136 logger
.info("Running setup_module() done")
139 def teardown_module(mod
):
141 Teardown the pytest environment.
146 logger
.info("Running teardown_module to delete topology")
150 # Stop toplogy and Remove tmp files
154 "Testsuite end time: {}".format(time
.asctime(time
.localtime(time
.time())))
156 logger
.info("=" * 40)
159 # ##################################
160 # Test cases start here.
161 # ##################################
164 def test_ospf_learning_tc15_p0(request
):
165 """Verify OSPF can learn different types of LSA and processes them.
167 OSPF Learning : Edge learning different types of LSAs.
169 tc_name
= request
.node
.name
170 write_test_header(tc_name
)
173 # Don't run this test if we have any failure.
174 if tgen
.routers_have_failure():
175 pytest
.skip(tgen
.errors
)
178 step("Bring up the base config as per the topology")
179 step("Configure area 1 as NSSA Area")
181 reset_config_on_routers(tgen
)
183 step("Verify that Type 3 summary LSA is originated for the same Area 0")
184 ip
= topo
["routers"]["r1"]["links"]["r3-link0"]["ipv4"]
185 ip_net
= str(ipaddress
.ip_interface(u
"{}".format(ip
)).network
)
190 "static_routes": [{"network": ip_net
, "no_of_ip": 1, "routeType": "N IA"}]
195 result
= verify_ospf_rib(tgen
, dut
, input_dict
)
196 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
199 result
= verify_rib(tgen
, "ipv4", dut
, input_dict
, protocol
=protocol
)
200 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
205 {"network": NETWORK
["ipv4"][0], "no_of_ip": 5, "next_hop": "Null0"}
209 result
= create_static_routes(tgen
, input_dict
)
210 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
212 step("Redistribute static route in R2 ospf.")
214 redistribute_ospf(tgen
, topo
, dut
, "static")
216 step("Verify that Type 5 LSA is originated by R2.")
219 result
= verify_rib(tgen
, "ipv4", dut
, input_dict
, protocol
=protocol
)
220 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
222 step("Verify that R0 receives Type 4 summary LSA.")
227 {"network": NETWORK
["ipv4"][0], "no_of_ip": 1, "routeType": "N E2"}
233 result
= verify_ospf_rib(tgen
, dut
, input_dict
)
234 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
236 result
= verify_rib(tgen
, "ipv4", dut
, input_dict
, protocol
=protocol
)
237 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
239 ospf_covergence
= verify_ospf_neighbor(tgen
, topo
)
240 assert ospf_covergence
is True, "setup_module :Failed \n Error:" " {}".format(
244 step("Change area 1 as non nssa area (on the fly changing area" " type on DUT).")
246 for rtr
in ["r1", "r2", "r3"]:
248 rtr
: {"ospf": {"area": [{"id": "0.0.0.2", "type": "nssa", "delete": True}]}}
250 result
= create_router_ospf(tgen
, topo
, input_dict
)
251 assert result
is True, "Testcase {} : Failed \n Error: {}".format(
255 step("Verify that OSPF neighbours are reset after changing area type.")
256 step("Verify that ABR R2 originates type 5 LSA in area 1.")
257 step("Verify that route is calculated and installed in R1.")
262 {"network": NETWORK
["ipv4"][0], "no_of_ip": 1, "routeType": "N E2"}
268 result
= verify_ospf_rib(tgen
, dut
, input_dict
)
269 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
271 result
= verify_rib(tgen
, "ipv4", dut
, input_dict
, protocol
=protocol
)
272 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
274 write_test_footer(tc_name
)
277 if __name__
== "__main__":
278 args
= ["-s"] + sys
.argv
[1:]
279 sys
.exit(pytest
.main(args
))