]>
git.proxmox.com Git - mirror_frr.git/blob - tests/topotests/ospf_gr_helper/test_ospf_gr_helper3.py
2 # SPDX-License-Identifier: ISC
5 # Copyright (c) 2021 by VMware, Inc. ("VMware")
6 # Used Copyright (c) 2018 by Network Device Education Foundation, Inc.
7 # ("NetDEF") in this file.
11 """OSPF Basic Functionality Automation."""
17 # Save the Current Working Directory to find configuration files.
18 CWD
= os
.path
.dirname(os
.path
.realpath(__file__
))
19 sys
.path
.append(os
.path
.join(CWD
, "../"))
21 # pylint: disable=C0413
22 # Import topogen and topotest helpers
23 from lib
.topogen
import Topogen
, get_topogen
25 # Import topoJson from lib, to create topology and initial configuration
26 from lib
.common_config
import (
30 reset_config_on_routers
,
32 create_interfaces_cfg
,
33 scapy_send_raw_packet
,
36 from lib
.topolog
import logger
37 from lib
.topojson
import build_config_from_json
39 from lib
.ospf
import (
42 verify_ospf_gr_helper
,
46 pytestmark
= [pytest
.mark
.ospfd
]
59 Please view in a fixed-width font such as Courier.
60 Topo : Broadcast Networks
62 +---+ +---+ +---+ +---+
63 |R0 + +R1 + +R2 + +R3 |
64 +-+-+ +-+-+ +-+-+ +-+-+
67 --+-----------+--------------+---------------+-----
72 TC1. Verify by default helper support is disabled for FRR ospf
73 TC2. OSPF GR on Broadcast : Verify DUT enters Helper mode when neighbor
74 sends grace lsa, helps RR to restart gracefully (RR = DR)
75 TC3. OSPF GR on Broadcast : Verify DUT enters Helper mode when neighbor
76 sends grace lsa, helps RR to restart gracefully (RR = BDR)
77 TC4. OSPF GR on Broadcast : Verify DUT enters Helper mode when neighbor
78 sends grace lsa, helps RR to restart gracefully (RR = DRother)
79 TC5. OSPF GR on P2P : Verify DUT enters Helper mode when neighbor sends
80 grace lsa, helps RR to restart gracefully.
81 TC6. Verify all the show commands newly introducted as part of ospf
82 helper support - Json Key verification wrt to show commands.
83 TC7. Verify helper when grace lsa is received with different configured
84 value in process level (higher, lower, grace lsa timer above 1800)
85 TC8. Verify helper functionality when dut is helping RR and new grace lsa
90 def setup_module(mod
):
92 Sets up the pytest environment
96 global topo
, intf
, intf1
, sw_name
, pkt
97 testsuite_run_time
= time
.asctime(time
.localtime(time
.time()))
98 logger
.info("Testsuite start time: {}".format(testsuite_run_time
))
101 logger
.info("Running setup_module to create topology")
103 # This function initiates the topology build with Topogen...
104 json_file
= "{}/ospf_gr_helper.json".format(CWD
)
105 tgen
= Topogen(json_file
, mod
.__name
__)
107 topo
= tgen
.json_topo
108 # ... and here it calls Mininet initialization functions.
110 # Starting topology, create tmp files which are loaded to routers
111 # to start daemons and then start routers
114 # Creating configuration from JSON
115 build_config_from_json(tgen
, topo
)
117 # Don't run this test if we have any failure.
118 if tgen
.routers_have_failure():
119 pytest
.skip(tgen
.errors
)
121 ospf_covergence
= verify_ospf_neighbor(tgen
, topo
, lan
=True)
122 assert ospf_covergence
is True, "setup_module :Failed \n Error:" " {}".format(
127 intf
= topo
["routers"]["r0"]["links"][sw_name
]["interface"]
128 intf1
= topo
["routers"]["r1"]["links"][sw_name
]["interface"]
129 pkt
= topo
["routers"]["r1"]["opq_lsa_hex"]
131 logger
.info("Running setup_module() done")
134 def teardown_module():
135 """Teardown the pytest environment"""
137 logger
.info("Running teardown_module to delete topology")
142 # Stop toplogy and Remove tmp files
146 # OSError exception is raised when mininet tries to stop switch
147 # though switch is stopped once but mininet tries to stop same
148 # switch again, where it ended up with exception
153 """delete ospf process after each test"""
155 step("Delete ospf process")
156 for rtr
in topo
["routers"]:
157 ospf_del
= {rtr
: {"ospf": {"delete": True}}}
158 result
= create_router_ospf(tgen
, topo
, ospf_del
)
159 assert result
is True, "Testcase: Failed \n Error: {}".format(result
)
162 # ##################################
163 # Test cases start here.
164 # ##################################
167 def test_ospf_gr_helper_tc7_p1(request
):
170 Verify helper when grace lsa is received with different configured
171 value in process level (higher, lower, grace lsa timer above 1800)
173 tc_name
= request
.node
.name
174 write_test_header(tc_name
)
177 # Don't run this test if we have any failure.
178 if tgen
.routers_have_failure():
179 pytest
.skip(tgen
.errors
)
181 global topo
, intf
, intf1
, pkt
183 step("Bring up the base config as per the topology")
185 "Configure DR priority as 99 in RR , DUT dr priority = 98 "
186 "& reset ospf process in all the routers"
189 "Enable GR on RR and DUT with grace period on RR = 333"
190 "and grace period on DUT = 300"
192 reset_config_on_routers(tgen
)
193 ospf_covergence
= verify_ospf_neighbor(tgen
, topo
, lan
=True)
195 ospf_covergence
is True
196 ), "OSPF is not after reset config \n Error:" " {}".format(ospf_covergence
)
198 "r0": {"ospf": {"graceful-restart": {"helper enable": [], "opaque": True}}}
200 result
= create_router_ospf(tgen
, topo
, ospf_gr_r0
)
201 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
204 "r1": {"ospf": {"graceful-restart": {"helper enable": [], "opaque": True}}}
206 result
= create_router_ospf(tgen
, topo
, ospf_gr_r1
)
207 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
209 input_dict
= {"supportedGracePeriod": 1800}
211 result
= verify_ospf_gr_helper(tgen
, topo
, dut
, input_dict
)
212 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
214 step("Configure grace period = 1801 on RR and restart ospf .")
215 grace_period_1801
= "01005e00000570708bd051ef080045c0005cbeb10000015907d111010101e00000050204004801010101000000009714000000000000000000000000000100010209030000000101010180000001c8e9002c000100040000016800020001010000000003000411010101"
216 gracelsa_sent
= scapy_send_raw_packet(tgen
, topo
, "r1", intf1
, grace_period_1801
)
218 step("Verify R0 does not enter helper mode.")
219 input_dict
= {"activeRestarterCnt": 1}
221 result
= verify_ospf_gr_helper(tgen
, topo
, dut
, input_dict
, expected
=False)
224 ), "Testcase {} : Failed. DUT entered helper role " " \n Error: {}".format(
230 write_test_footer(tc_name
)
233 def test_ospf_gr_helper_tc8_p1(request
):
237 Verify helper functionality when dut is helping RR and new grace lsa
240 tc_name
= request
.node
.name
241 write_test_header(tc_name
)
244 # Don't run this test if we have any failure.
245 if tgen
.routers_have_failure():
246 pytest
.skip(tgen
.errors
)
248 global topo
, intf
, intf1
, pkt
250 step("Bring up the base config as per the topology")
252 reset_config_on_routers(tgen
)
253 ospf_covergence
= verify_ospf_neighbor(tgen
, topo
, lan
=True)
255 ospf_covergence
is True
256 ), "OSPF is not after reset config \n Error:" " {}".format(ospf_covergence
)
258 "r0": {"ospf": {"graceful-restart": {"helper enable": [], "opaque": True}}}
260 result
= create_router_ospf(tgen
, topo
, ospf_gr_r0
)
261 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
264 "r1": {"ospf": {"graceful-restart": {"helper enable": [], "opaque": True}}}
266 result
= create_router_ospf(tgen
, topo
, ospf_gr_r1
)
267 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
269 input_dict
= {"supportedGracePeriod": 1800}
271 result
= verify_ospf_gr_helper(tgen
, topo
, dut
, input_dict
)
272 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
274 step("Verify that DUT enters into helper mode.")
276 input_dict
= {"activeRestarterCnt": 1}
277 gracelsa_sent
= False
280 while not gracelsa_sent
and repeat
< Iters
:
281 gracelsa_sent
= scapy_send_raw_packet(tgen
, topo
, "r1", intf1
, pkt
)
282 result
= verify_ospf_gr_helper(tgen
, topo
, dut
, input_dict
)
283 if isinstance(result
, str):
285 gracelsa_sent
= False
287 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
289 step("Send the Grace LSA again to DUT when RR is in GR.")
290 input_dict
= {"activeRestarterCnt": 1}
291 gracelsa_sent
= False
294 while not gracelsa_sent
and repeat
< Iters
:
295 gracelsa_sent
= scapy_send_raw_packet(tgen
, topo
, "r1", intf1
, pkt
)
296 result
= verify_ospf_gr_helper(tgen
, topo
, dut
, input_dict
)
297 if isinstance(result
, str):
299 gracelsa_sent
= False
301 assert result
is True, "Testcase {} : Failed \n Error: {}".format(tc_name
, result
)
305 write_test_footer(tc_name
)
308 if __name__
== "__main__":
309 args
= ["-s"] + sys
.argv
[1:]
310 sys
.exit(pytest
.main(args
))