]> git.proxmox.com Git - mirror_frr.git/blame - 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
CommitLineData
d844d516 1#!/usr/bin/env python
acddc0ed 2# SPDX-License-Identifier: ISC
d844d516
DS
3
4#
5# test_babel_topo1.py
6#
7# Copyright (c) 2017 by
8# Cumulus Networks, Inc.
9# Donald Sharp
10#
d844d516
DS
11
12"""
13test_babel_topo1.py: Testing BABEL
14
15"""
16
17import os
18import re
19import sys
20import pytest
21import json
22
23pytestmark = [pytest.mark.babeld]
24
25# Save the Current Working Directory to find configuration files.
26CWD = os.path.dirname(os.path.realpath(__file__))
27sys.path.append(os.path.join(CWD, "../"))
28
29# pylint: disable=C0413
30# Import topogen and topotest helpers
31from lib import topotest
32from lib.topogen import Topogen, TopoRouter, get_topogen
33from lib.topolog import logger
34
35# Required to instantiate the topology builder class.
36
37#####################################################
38##
39## Network Topology Definition
40##
41#####################################################
42
43
44def 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
76def 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
94def 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
102def 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
113def 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
133def 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
156if __name__ == "__main__":
157 args = ["-s"] + sys.argv[1:]
158 sys.exit(pytest.main(args))