]>
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
,
43 from lib
.topogen
import Topogen
, get_topogen
49 # Save the Current Working Directory to find configuration files.
50 CWD
= os
.path
.dirname(os
.path
.realpath(__file__
))
51 sys
.path
.append(os
.path
.join(CWD
, "../"))
52 sys
.path
.append(os
.path
.join(CWD
, "../lib/"))
53 # pylint: disable=C0413
54 # Import topogen and topotest helpers
56 pytestmark
= [pytest
.mark
.ospfd
, pytest
.mark
.staticd
]
72 Please view in a fixed-width font such as Courier.
74 +R1 +------------+R2 |
83 +R0 +-------------+R3 |
89 1. OSPF Learning - Verify OSPF can learn different types of LSA and
90 processes them.[Edge learning different types of LSAs]
91 2. Verify that ospf non back bone area can be configured as NSSA area
92 3. Verify that ospf NSSA area DUT is capable receiving & processing
97 def setup_module(mod
):
99 Sets up the pytest environment
103 testsuite_run_time
= time
.asctime(time
.localtime(time
.time()))
104 logger
.info("Testsuite start time: {}".format(testsuite_run_time
))
105 logger
.info("=" * 40)
107 logger
.info("Running setup_module to create topology")
109 # This function initiates the topology build with Topogen...
110 json_file
= "{}/ospf_nssa.json".format(CWD
)
111 tgen
= Topogen(json_file
, mod
.__name
__)
113 topo
= tgen
.json_topo
114 # ... and here it calls Mininet initialization functions.
116 # Starting topology, create tmp files which are loaded to routers
117 # to start daemons and then start routers
120 # Creating configuration from JSON
121 build_config_from_json(tgen
, topo
)
123 # Don't run this test if we have any failure.
124 if tgen
.routers_have_failure():
125 pytest
.skip(tgen
.errors
)
126 # Api call verify whether OSPF is converged
127 ospf_covergence
= verify_ospf_neighbor(tgen
, topo
)
128 assert ospf_covergence
is True, "setup_module :Failed \n Error {}".format(
132 logger
.info("Running setup_module() done")
135 def teardown_module(mod
):
137 Teardown the pytest environment.
142 logger
.info("Running teardown_module to delete topology")
146 # Stop toplogy and Remove tmp files
150 "Testsuite end time: {}".format(time
.asctime(time
.localtime(time
.time())))
152 logger
.info("=" * 40)
155 # ##################################
156 # Test cases start here.
157 # ##################################
160 def test_ospf_learning_tc15_p0(request
):
161 """Verify OSPF can learn different types of LSA and processes them.
163 OSPF Learning : Edge learning different types of LSAs.
165 tc_name
= request
.node
.name
166 write_test_header(tc_name
)
169 # Don't run this test if we have any failure.
170 if tgen
.routers_have_failure():
171 pytest
.skip(tgen
.errors
)
174 step("Bring up the base config as per the topology")
175 step("Configure area 1 as NSSA Area")
177 reset_config_on_routers(tgen
)
179 step("Verify that Type 3 summary LSA is originated for the same Area 0")
180 ip
= topo
["routers"]["r1"]["links"]["r3-link0"]["ipv4"]
181 ip_net
= str(ipaddress
.ip_interface(u
"{}".format(ip
)).network
)
186 "static_routes": [{"network": ip_net
, "no_of_ip": 1, "routeType": "N IA"}]
191 result
= verify_ospf_rib(tgen
, dut
, input_dict
)
192 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
195 result
= verify_rib(tgen
, "ipv4", dut
, input_dict
, protocol
=protocol
)
196 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
201 {"network": NETWORK
["ipv4"][0], "no_of_ip": 5, "next_hop": "Null0"}
205 result
= create_static_routes(tgen
, input_dict
)
206 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
208 step("Redistribute static route in R2 ospf.")
210 redistribute_ospf(tgen
, topo
, dut
, "static")
212 step("Verify that Type 5 LSA is originated by R2.")
215 result
= verify_rib(tgen
, "ipv4", dut
, input_dict
, protocol
=protocol
)
216 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
218 step("Verify that R0 receives Type 4 summary LSA.")
223 {"network": NETWORK
["ipv4"][0], "no_of_ip": 1, "routeType": "N E2"}
229 result
= verify_ospf_rib(tgen
, dut
, input_dict
)
230 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
232 result
= verify_rib(tgen
, "ipv4", dut
, input_dict
, protocol
=protocol
)
233 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
235 ospf_covergence
= verify_ospf_neighbor(tgen
, topo
)
236 assert ospf_covergence
is True, "Testcase Failed \n Error {}".format(
240 step("Change area 1 as non nssa area (on the fly changing area type on DUT).")
242 for rtr
in ["r1", "r2", "r3"]:
244 rtr
: {"ospf": {"area": [{"id": "0.0.0.2", "type": "nssa", "delete": True}]}}
246 result
= create_router_ospf(tgen
, topo
, input_dict
)
247 assert result
is True, "Testcase {} : Failed \n Error: {}".format(
251 step("Verify that OSPF neighbours are reset after changing area type.")
252 step("Verify that ABR R2 originates type 5 LSA in area 1.")
253 step("Verify that route is calculated and installed in R1.")
258 {"network": NETWORK
["ipv4"][0], "no_of_ip": 1, "routeType": "N E2"}
264 result
= verify_ospf_rib(tgen
, dut
, input_dict
)
265 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
267 result
= verify_rib(tgen
, "ipv4", dut
, input_dict
, protocol
=protocol
)
268 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
270 write_test_footer(tc_name
)
273 if __name__
== "__main__":
274 args
= ["-s"] + sys
.argv
[1:]
275 sys
.exit(pytest
.main(args
))