]> git.proxmox.com Git - mirror_frr.git/blame - tests/topotests/bgp_tcp_mss/test_bgp_tcp_mss.py
Merge pull request #12798 from donaldsharp/rib_match_multicast
[mirror_frr.git] / tests / topotests / bgp_tcp_mss / test_bgp_tcp_mss.py
CommitLineData
4ab46701 1#!/usr/bin/env python
acddc0ed 2# SPDX-License-Identifier: ISC
4ab46701
AR
3
4#
5# bgp_tcp_mss.py
6# Part of NetDEF Topology Tests
7#
8# Copyright (c) 2021 by
9# Abhinay Ramesh <rabhinay@vmware.com>
10#
4ab46701
AR
11
12"""
13bgp_tcp_mss.py:
14
15Test if works the following commands:
16router bgp 65000
17 neighbor 192.168.255.2 tcp-mss 500
18
19Need to verify if the tcp-mss value is reflected in the TCP session.
20"""
21
22import os
23import sys
24import json
4ab46701
AR
25import pytest
26import functools
27
28# add after imports, before defining classes or functions:
29pytestmark = [pytest.mark.bgpd]
30
31CWD = os.path.dirname(os.path.realpath(__file__))
32sys.path.append(os.path.join(CWD, "../"))
33
34# pylint: disable=C0413
35from lib import topotest
36from lib.topogen import Topogen, TopoRouter, get_topogen
37from lib.topolog import logger
4ab46701 38
bf3a0a9a
DS
39pytestmark = [pytest.mark.bgpd]
40
4ab46701 41
e82b531d
CH
42def build_topo(tgen):
43 for routern in range(1, 3):
44 tgen.add_router("r{}".format(routern))
4ab46701 45
e82b531d
CH
46 switch = tgen.add_switch("s1")
47 switch.add_link(tgen.gears["r1"])
48 switch.add_link(tgen.gears["r2"])
4ab46701
AR
49
50
51def setup_module(mod):
e82b531d 52 tgen = Topogen(build_topo, mod.__name__)
4ab46701
AR
53 tgen.start_topology()
54
55 router_list = tgen.routers()
56
57 for i, (rname, router) in enumerate(router_list.items(), 1):
58 router.load_config(
59 TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
60 )
61 router.load_config(
62 TopoRouter.RD_BGP, os.path.join(CWD, "{}/bgpd.conf".format(rname))
63 )
64
65 tgen.start_router()
66
67
68def teardown_module(mod):
69 tgen = get_topogen()
70 tgen.stop_topology()
71
72
73def test_bgp_tcp_mss():
74 tgen = get_topogen()
75
76 if tgen.routers_have_failure():
77 pytest.skip(tgen.errors)
78
79 router1 = tgen.gears["r1"]
80 router2 = tgen.gears["r2"]
81
82 def _bgp_converge(router):
83 output = json.loads(router.vtysh_cmd("show ip bgp neighbor 192.168.255.2 json"))
84 expected = {
85 "192.168.255.2": {
86 "bgpState": "Established",
87 "addressFamilyInfo": {"ipv4Unicast": {"acceptedPrefixCounter": 0}},
88 }
89 }
90 return topotest.json_cmp(output, expected)
91
92 def _bgp_conf_tcp_mss(router, as_num, neigh):
93 router.vtysh_cmd(
94 """configure terminal
95 router bgp {0}
96 neighbor {1} tcp-mss 500""".format(
97 as_num, neigh
98 )
99 )
100
101 def _bgp_clear_session(router):
102 router.vtysh_cmd("clear bgp *")
103
104 def _bgp_check_neighbor_tcp_mss(router, neigh):
105 output = json.loads(router.vtysh_cmd("show bgp neighbor {} json".format(neigh)))
106 expected = {
107 "{}".format(neigh): {"bgpTcpMssConfigured": 500, "bgpTcpMssSynced": 488}
108 }
109 return topotest.json_cmp(output, expected)
110
111 logger.info("Check if neighbor sessions are up in {}".format(router1.name))
112 test_func = functools.partial(_bgp_converge, router1)
113 success, result = topotest.run_and_expect(test_func, None, count=15, wait=0.5)
114 assert result is None, 'Failed to see BGP convergence in "{}"'.format(router1.name)
115
116 logger.info("BGP neighbor session is up in {}".format(router1.name))
117
118 logger.info(
119 "Configure tcp-mss 500 on {} and reset the session".format(router1.name)
120 )
121 _bgp_conf_tcp_mss(router1, "65000", "192.168.255.2")
122 _bgp_clear_session(router1)
123
124 logger.info(
125 "Configure tcp-mss 500 on {} and reset the session".format(router2.name)
126 )
127 _bgp_conf_tcp_mss(router2, "65001", "192.168.255.1")
128 _bgp_clear_session(router2)
129
130 logger.info(
131 "Check if neighbor session is up after reset in {}".format(router1.name)
132 )
133 test_func = functools.partial(_bgp_converge, router1)
134 success, result = topotest.run_and_expect(test_func, None, count=15, wait=0.5)
135 assert result is None, 'Failed to see BGP convergence after reset in "{}"'.format(
136 router1.name
137 )
138
139 logger.info(
140 "Verify if TCP MSS value is synced with neighbor in {}".format(router1.name)
141 )
142 test_func = functools.partial(_bgp_check_neighbor_tcp_mss, router1, "192.168.255.2")
c6653ab2 143 success, result = topotest.run_and_expect(test_func, None, count=10, wait=0.5)
4ab46701
AR
144 assert (
145 result is None
146 ), 'Failed to sync TCP MSS value over BGP session in "{}"'.format(router1.name)
147 logger.info("TCP MSS value is synced with neighbor in {}".format(router1.name))
148
149 logger.info(
150 "Verify if TCP MSS value is synced with neighbor in {}".format(router2.name)
151 )
152 test_func = functools.partial(_bgp_check_neighbor_tcp_mss, router2, "192.168.255.1")
c6653ab2 153 success, result = topotest.run_and_expect(test_func, None, count=10, wait=0.5)
4ab46701
AR
154 assert (
155 result is None
156 ), 'Failed to sync TCP MSS value over BGP session in "{}"'.format(router2.name)
157 logger.info("TCP MSS value is synced with neighbor in {}".format(router2.name))
158
159
160if __name__ == "__main__":
161 args = ["-s"] + sys.argv[1:]
162 sys.exit(pytest.main(args))