]>
git.proxmox.com Git - mirror_frr.git/blob - tests/topotests/bgp_vrf_netns/test_bgp_vrf_netns_topo.py
2 # SPDX-License-Identifier: ISC
5 # test_bgp_vrf_netns_topo1.py
6 # Part of NetDEF Topology Tests
8 # Copyright (c) 2018 by 6WIND
12 test_bgp_vrf_netns_topo1.py: Test BGP topology with EBGP on NETNS VRF
21 # Save the Current Working Directory to find configuration files.
22 CWD
= os
.path
.dirname(os
.path
.realpath(__file__
))
23 sys
.path
.append(os
.path
.join(CWD
, "../"))
25 # pylint: disable=C0413
26 # Import topogen and topotest helpers
27 from lib
import topotest
28 from lib
.topogen
import Topogen
, TopoRouter
, get_topogen
29 from lib
.topolog
import logger
31 # Required to instantiate the topology builder class.
33 pytestmark
= [pytest
.mark
.bgpd
]
37 CustomizeVrfWithNetns
= True
39 #####################################################
41 ## Network Topology Definition
43 #####################################################
50 switch
= tgen
.add_switch("s1")
51 switch
.add_link(tgen
.gears
["r1"])
53 # Add eBGP ExaBGP neighbors
54 peer_ip
= "10.0.1.101"
55 peer_route
= "via 10.0.1.1"
56 peer
= tgen
.add_exabgp_peer("peer1", ip
=peer_ip
, defaultRoute
=peer_route
)
57 switch
= tgen
.gears
["s1"]
61 #####################################################
65 #####################################################
68 def setup_module(module
):
69 tgen
= Topogen(build_topo
, module
.__name
__)
73 router
= tgen
.gears
["r1"]
75 # check for zebra capability
76 if CustomizeVrfWithNetns
== True:
77 if router
.check_capability(TopoRouter
.RD_ZEBRA
, "--vrfwnetns") == False:
79 "Skipping BGP VRF NETNS Test. VRF NETNS backend not available on FRR"
81 if os
.system("ip netns list") != 0:
83 "Skipping BGP VRF NETNS Test. NETNS not available on System"
85 # retrieve VRF backend kind
86 if CustomizeVrfWithNetns
== True:
87 logger
.info("Testing with VRF Namespace support")
89 # create VRF r1-bgp-cust1
90 # move r1-eth0 to VRF r1-bgp-cust1
92 ns
= "{}-bgp-cust1".format("r1")
93 router
.net
.add_netns(ns
)
94 router
.net
.set_intf_netns("r1-eth0", ns
, up
=True)
99 os
.path
.join(CWD
, "{}/zebra.conf".format("r1")),
103 TopoRouter
.RD_BGP
, os
.path
.join(CWD
, "{}/bgpd.conf".format("r1"))
106 logger
.info("Launching BGP and ZEBRA")
107 # BGP and ZEBRA start without underlying VRF
109 # Starting Hosts and init ExaBGP on each of them
110 logger
.info("starting exaBGP on peer1")
111 peer_list
= tgen
.exabgp_peers()
112 for pname
, peer
in peer_list
.items():
113 peer_dir
= os
.path
.join(CWD
, pname
)
114 env_file
= os
.path
.join(CWD
, "exabgp.env")
115 logger
.info("Running ExaBGP peer")
116 peer
.start(peer_dir
, env_file
)
120 def teardown_module(module
):
123 # Move interfaces out of vrf namespace and delete the namespace
124 tgen
.net
["r1"].reset_intf_netns("r1-eth0")
125 tgen
.net
["r1"].delete_netns("r1-bgp-cust1")
130 def test_bgp_vrf_learn():
131 "Test daemon learnt VRF context"
134 # Skip if previous fatal error condition is raised
135 if tgen
.routers_have_failure():
136 pytest
.skip(tgen
.errors
)
139 output
= tgen
.gears
["r1"].vtysh_cmd("show vrf", isjson
=False)
140 logger
.info("output is: {}".format(output
))
142 output
= tgen
.gears
["r1"].vtysh_cmd("show bgp vrfs", isjson
=False)
143 logger
.info("output is: {}".format(output
))
146 def test_bgp_convergence():
147 "Test for BGP topology convergence"
150 # uncomment if you want to troubleshoot
152 # Skip if previous fatal error condition is raised
153 if tgen
.routers_have_failure():
154 pytest
.skip(tgen
.errors
)
156 logger
.info("waiting for bgp convergence")
159 router
= tgen
.gears
["r1"]
160 if router
.has_version("<", "3.0"):
161 reffile
= os
.path
.join(CWD
, "r1/summary20.txt")
163 reffile
= os
.path
.join(CWD
, "r1/summary.txt")
165 expected
= json
.loads(open(reffile
).read())
167 test_func
= functools
.partial(
168 topotest
.router_json_cmp
,
170 "show bgp vrf r1-bgp-cust1 summary json",
173 _
, res
= topotest
.run_and_expect(test_func
, None, count
=90, wait
=0.5)
174 assertmsg
= "BGP router network did not converge"
175 assert res
is None, assertmsg
178 def test_bgp_vrf_netns():
181 # Skip if previous fatal error condition is raised
182 if tgen
.routers_have_failure():
183 pytest
.skip(tgen
.errors
)
186 "routerId": "10.0.1.1",
190 for subnet
in range(0, 10):
191 netkey
= "10.201.{}.0/24".format(subnet
)
192 expect
["routes"][netkey
] = []
193 peer
= {"valid": True}
194 expect
["routes"][netkey
].append(peer
)
196 test_func
= functools
.partial(
197 topotest
.router_json_cmp
,
199 "show ip bgp vrf r1-bgp-cust1 ipv4 json",
202 _
, res
= topotest
.run_and_expect(test_func
, None, count
=12, wait
=0.5)
203 assertmsg
= 'expected routes in "show ip bgp vrf r1-bgp-cust1 ipv4" output'
204 assert res
is None, assertmsg
207 if __name__
== "__main__":
209 args
= ["-s"] + sys
.argv
[1:]
210 ret
= pytest
.main(args
)