]> git.proxmox.com Git - mirror_frr.git/blob - tests/topotests/babel_topo1/test_babel_topo1.py
Merge pull request #12798 from donaldsharp/rib_match_multicast
[mirror_frr.git] / tests / topotests / babel_topo1 / test_babel_topo1.py
1 #!/usr/bin/env python
2 # SPDX-License-Identifier: ISC
3
4 #
5 # test_babel_topo1.py
6 #
7 # Copyright (c) 2017 by
8 # Cumulus Networks, Inc.
9 # Donald Sharp
10 #
11
12 """
13 test_babel_topo1.py: Testing BABEL
14
15 """
16
17 import os
18 import re
19 import sys
20 import pytest
21 import json
22
23 pytestmark = [pytest.mark.babeld]
24
25 # Save the Current Working Directory to find configuration files.
26 CWD = os.path.dirname(os.path.realpath(__file__))
27 sys.path.append(os.path.join(CWD, "../"))
28
29 # pylint: disable=C0413
30 # Import topogen and topotest helpers
31 from lib import topotest
32 from lib.topogen import Topogen, TopoRouter, get_topogen
33 from lib.topolog import logger
34
35 # Required to instantiate the topology builder class.
36
37 #####################################################
38 ##
39 ## Network Topology Definition
40 ##
41 #####################################################
42
43
44 def build_topo(tgen):
45 for routern in range(1, 4):
46 tgen.add_router("r{}".format(routern))
47
48 # On main router
49 # First switch is for a dummy interface (for local network)
50 switch = tgen.add_switch("sw1")
51 switch.add_link(tgen.gears["r1"])
52
53 # Switches for BABEL
54 # switch 2 switch is for connection to BABEL router
55 switch = tgen.add_switch("sw2")
56 switch.add_link(tgen.gears["r1"])
57 switch.add_link(tgen.gears["r2"])
58
59 # switch 4 is stub on remote BABEL router
60 switch = tgen.add_switch("sw4")
61 switch.add_link(tgen.gears["r3"])
62
63 # switch 3 is between BABEL routers
64 switch = tgen.add_switch("sw3")
65 switch.add_link(tgen.gears["r2"])
66 switch.add_link(tgen.gears["r3"])
67
68
69 #####################################################
70 ##
71 ## Tests starting
72 ##
73 #####################################################
74
75
76 def setup_module(module):
77 "Setup topology"
78 tgen = Topogen(build_topo, module.__name__)
79 tgen.start_topology()
80
81 # This is a sample of configuration loading.
82 router_list = tgen.routers()
83 for rname, router in router_list.items():
84 router.load_config(
85 TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
86 )
87 router.load_config(
88 TopoRouter.RD_BABEL, os.path.join(CWD, "{}/babeld.conf".format(rname))
89 )
90
91 tgen.start_router()
92
93
94 def teardown_module(_mod):
95 "Teardown the pytest environment"
96 tgen = get_topogen()
97
98 # This function tears down the whole topology.
99 tgen.stop_topology()
100
101
102 def test_converge_protocols():
103 "Wait for protocol convergence"
104
105 tgen = get_topogen()
106 # Don't run this test if we have any failure.
107 if tgen.routers_have_failure():
108 pytest.skip(tgen.errors)
109
110 topotest.sleep(10, "Waiting for BABEL convergence")
111
112
113 def test_zebra_ipv4_routingTable():
114 "Test 'show ip route'"
115
116 tgen = get_topogen()
117 # Don't run this test if we have any failure.
118 if tgen.routers_have_failure():
119 pytest.skip(tgen.errors)
120
121 failures = 0
122 router_list = tgen.routers().values()
123 for router in router_list:
124 output = router.vtysh_cmd("show ip route json", isjson=True)
125 refTableFile = "{}/{}/show_ip_route.json_ref".format(CWD, router.name)
126 expected = json.loads(open(refTableFile).read())
127
128 assertmsg = "Zebra IPv4 Routing Table verification failed for router {}".format(
129 router.name
130 )
131 assert topotest.json_cmp(output, expected) is None, assertmsg
132
133 def test_shutdown_check_stderr():
134 if os.environ.get("TOPOTESTS_CHECK_STDERR") is None:
135 pytest.skip("Skipping test for Stderr output and memory leaks")
136
137 tgen = get_topogen()
138 # Don't run this test if we have any failure.
139 if tgen.routers_have_failure():
140 pytest.skip(tgen.errors)
141
142 logger.info("Verifying unexpected STDERR output from daemons")
143
144 router_list = tgen.routers().values()
145 for router in router_list:
146 router.stop()
147
148 log = tgen.net[router.name].getStdErr("babeld")
149 if log:
150 logger.error("BABELd StdErr Log:" + log)
151 log = tgen.net[router.name].getStdErr("zebra")
152 if log:
153 logger.error("Zebra StdErr Log:" + log)
154
155
156 if __name__ == "__main__":
157 args = ["-s"] + sys.argv[1:]
158 sys.exit(pytest.main(args))