diff options
Diffstat (limited to 'tests/topotests/ospf-dual-stack/test_ospf_dual_stack.py')
| -rw-r--r-- | tests/topotests/ospf-dual-stack/test_ospf_dual_stack.py | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/tests/topotests/ospf-dual-stack/test_ospf_dual_stack.py b/tests/topotests/ospf-dual-stack/test_ospf_dual_stack.py new file mode 100644 index 0000000000..5e7802fa04 --- /dev/null +++ b/tests/topotests/ospf-dual-stack/test_ospf_dual_stack.py @@ -0,0 +1,152 @@ +#!/usr/bin/python + +import os +import sys +import time +import pytest +import json + +CWD = os.path.dirname(os.path.realpath(__file__)) +sys.path.append(os.path.join(CWD, "../")) +sys.path.append(os.path.join(CWD, "../lib/")) + +from mininet.topo import Topo +from lib.topogen import Topogen, get_topogen + +from lib.common_config import ( + start_topology, + write_test_header, + write_test_footer, + reset_config_on_routers, + stop_router, + start_router, + verify_rib, + create_static_routes, + step, + start_router_daemons, + shutdown_bringup_interface, + topo_daemons, + create_prefix_lists, + create_interfaces_cfg, + run_frr_cmd, +) +from lib.topolog import logger +from lib.topojson import build_topo_from_json, build_config_from_json +from lib.ospf import ( + verify_ospf_neighbor, + verify_ospf6_neighbor, + create_router_ospf, + create_router_ospf6, + verify_ospf_summary, + redistribute_ospf, + verify_ospf_database, +) + +# Global variables +topo = None + +# Reading the data from JSON File for topology creation +jsonFile = "{}/test_ospf_dual_stack.json".format(CWD) +try: + with open(jsonFile, "r") as topoJson: + topo = json.load(topoJson) +except IOError: + assert False, "Could not read file {}".format(jsonFile) + + +class CreateTopo(Topo): + """Test topology builder.""" + + def build(self, *_args, **_opts): + """Build function.""" + tgen = get_topogen(self) + + # Building topology from json file + build_topo_from_json(tgen, topo) + + +def setup_module(mod): + """Sets up the pytest environment.""" + global topo + testsuite_run_time = time.asctime(time.localtime(time.time())) + logger.info("Testsuite start time: {}".format(testsuite_run_time)) + logger.info("=" * 40) + + logger.info("Running setup_module to create topology") + + # This function initiates the topology build with Topogen... + tgen = Topogen(CreateTopo, mod.__name__) + # ... and here it calls Mininet initialization functions. + + # get list of daemons needs to be started for this suite. + daemons = topo_daemons(tgen, topo) + + # Starting topology, create tmp files which are loaded to routers + # to start daemons and then start routers + start_topology(tgen, daemons) + + # Creating configuration from JSON + build_config_from_json(tgen, topo) + + # Don't run this test if we have any failure. + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + # Api call verify whether OSPF converged + ospf_covergence_ipv4 = verify_ospf_neighbor(tgen, topo) + assert ospf_covergence_ipv4 is True, "setup_module :Failed \n Error:" " {}".format( + ospf_covergence_ipv4 + ) + + # Api call verify whether OSPF6 converged + ospf_covergence_ipv6 = verify_ospf6_neighbor(tgen, topo) + assert ospf_covergence_ipv6 is True, "setup_module :Failed \n Error:" " {}".format( + ospf_covergence_ipv6 + ) + logger.info("Running setup_module() done") + + +def teardown_module(mod): + """ + Teardown the pytest environment. + + * `mod`: module name + """ + + logger.info("Running teardown_module to delete topology") + tgen = get_topogen() + # Stop topology and remove tmp files + tgen.stop_topology() + logger.info( + "Testsuite end time: {}".format(time.asctime(time.localtime(time.time()))) + ) + logger.info("=" * 40) + + +# +# ################################## +# Test cases start here. +# ################################## +# +# +def test_ospf_dual_stack(request): + """OSPF test dual stack.""" + + tc_name = request.node.name + write_test_header(tc_name) + + # Don't run this test if we have any failure. + tgen = get_topogen() + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + global topo + + step("Bring up the base configuration as per the JSON topology") + reset_config_on_routers(tgen) + write_test_footer(tc_name) + + +if __name__ == "__main__": + args = ["-s"] + sys.argv[1:] + sys.exit(pytest.main(args)) |
