1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
#!/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 lib.micronet_compat 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,
)
pytestmark = [pytest.mark.ospfd, pytest.mark.staticd]
# Global variables
topo = None
def setup_module(mod):
"""Sets up the pytest environment."""
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...
json_file = "{}/test_ospf_dual_stack.json".format(CWD)
tgen = Topogen(json_file, mod.__name__)
global topo
topo = tgen.json_topo
# ... 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))
|