summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsmoketest/scripts/cli/test_protocols_bgp.py148
1 files changed, 88 insertions, 60 deletions
diff --git a/smoketest/scripts/cli/test_protocols_bgp.py b/smoketest/scripts/cli/test_protocols_bgp.py
index 941d7828f..540ef2ec4 100755
--- a/smoketest/scripts/cli/test_protocols_bgp.py
+++ b/smoketest/scripts/cli/test_protocols_bgp.py
@@ -28,6 +28,8 @@ base_path = ['protocols', 'bgp', ASN]
neighbor_config = {
'192.0.2.1' : {
+ 'cap_dynamic' : '',
+ 'cap_ext_next': '',
'remote_as' : '100',
'adv_interv' : '400',
'passive' : '',
@@ -35,6 +37,7 @@ neighbor_config = {
'shutdown' : '',
'cap_over' : '',
'ttl_security': '5',
+ 'local_as' : '300',
},
'192.0.2.2' : {
'remote_as' : '200',
@@ -49,6 +52,7 @@ neighbor_config = {
'remote_as' : '200',
'passive' : '',
'multi_hop' : '5',
+ 'update_src' : 'lo',
},
}
@@ -63,18 +67,23 @@ peer_group_config = {
# 'ttl_security': '5',
},
'bar' : {
+# XXX: not available in current Perl backend
+# 'description' : 'foo peer bar group',
'remote_as' : '200',
'shutdown' : '',
'no_cap_nego' : '',
+ 'local_as' : '300',
},
'baz' : {
+ 'cap_dynamic' : '',
+ 'cap_ext_next': '',
'remote_as' : '200',
'passive' : '',
'multi_hop' : '5',
+ 'update_src' : 'lo',
},
}
-
def getFRRBGPconfig():
return cmd(f'vtysh -c "show run" | sed -n "/router bgp {ASN}/,/^!/p"')
@@ -87,6 +96,35 @@ class TestProtocolsBGP(unittest.TestCase):
self.session.commit()
del self.session
+ def verify_frr_config(self, peer, peer_config, frrconfig):
+ # recurring patterns to verify for both a simple neighbor and a peer-group
+ if 'cap_dynamic' in peer_config:
+ self.assertIn(f' neighbor {peer} capability dynamic', frrconfig)
+ if 'cap_ext_next' in peer_config:
+ self.assertIn(f' neighbor {peer} capability extended-nexthop', frrconfig)
+ if 'description' in peer_config:
+ self.assertIn(f' neighbor {peer} description {peer_config["description"]}', frrconfig)
+ if 'no_cap_nego' in peer_config:
+ self.assertIn(f' neighbor {peer} dont-capability-negotiate', frrconfig)
+ if 'multi_hop' in peer_config:
+ self.assertIn(f' neighbor {peer} ebgp-multihop {peer_config["multi_hop"]}', frrconfig)
+ if 'local_as' in peer_config:
+ self.assertIn(f' neighbor {peer} local-as {peer_config["local_as"]}', frrconfig)
+ if 'cap_over' in peer_config:
+ self.assertIn(f' neighbor {peer} override-capability', frrconfig)
+ if 'passive' in peer_config:
+ self.assertIn(f' neighbor {peer} passive', frrconfig)
+ if 'password' in peer_config:
+ self.assertIn(f' neighbor {peer} password {peer_config["password"]}', frrconfig)
+ if 'remote_as' in peer_config:
+ self.assertIn(f' neighbor {peer} remote-as {peer_config["remote_as"]}', frrconfig)
+ if 'shutdown' in peer_config:
+ self.assertIn(f' neighbor {peer} shutdown', frrconfig)
+ if 'ttl_security' in peer_config:
+ self.assertIn(f' neighbor {peer} ttl-security hops {peer_config["ttl_security"]}', frrconfig)
+ if 'update_src' in peer_config:
+ self.assertIn(f' neighbor {peer} update-source {peer_config["update_src"]}', frrconfig)
+
def test_bgp_01_simple(self):
router_id = '127.0.0.1'
local_pref = '500'
@@ -113,31 +151,41 @@ class TestProtocolsBGP(unittest.TestCase):
self.assertTrue(process_named_running(PROCESS_NAME))
def test_bgp_02_neighbors(self):
+ # Test out individual neighbor configuration items, not all of them are
+ # also available to a peer-group!
for neighbor, config in neighbor_config.items():
- if 'remote_as' in config:
- self.session.set(base_path + ['neighbor', neighbor, 'remote-as', config["remote_as"]])
- if 'description' in config:
- self.session.set(base_path + ['neighbor', neighbor, 'description', config["description"]])
- if 'passive' in config:
- self.session.set(base_path + ['neighbor', neighbor, 'passive'])
- if 'password' in config:
- self.session.set(base_path + ['neighbor', neighbor, 'password', config["password"]])
- if 'shutdown' in config:
- self.session.set(base_path + ['neighbor', neighbor, 'shutdown'])
if 'adv_interv' in config:
self.session.set(base_path + ['neighbor', neighbor, 'advertisement-interval', config["adv_interv"]])
+ if 'cap_dynamic' in config:
+ self.session.set(base_path + ['neighbor', neighbor, 'capability', 'dynamic'])
+ if 'cap_ext_next' in config:
+ self.session.set(base_path + ['neighbor', neighbor, 'capability', 'extended-nexthop'])
+ if 'description' in config:
+ self.session.set(base_path + ['neighbor', neighbor, 'description', config["description"]])
if 'no_cap_nego' in config:
self.session.set(base_path + ['neighbor', neighbor, 'disable-capability-negotiation'])
- if 'port' in config:
- self.session.set(base_path + ['neighbor', neighbor, 'port', config["port"]])
if 'multi_hop' in config:
self.session.set(base_path + ['neighbor', neighbor, 'ebgp-multihop', config["multi_hop"]])
+ if 'local_as' in config:
+ self.session.set(base_path + ['neighbor', neighbor, 'local-as', config["local_as"]])
if 'cap_over' in config:
self.session.set(base_path + ['neighbor', neighbor, 'override-capability'])
+ if 'passive' in config:
+ self.session.set(base_path + ['neighbor', neighbor, 'passive'])
+ if 'password' in config:
+ self.session.set(base_path + ['neighbor', neighbor, 'password', config["password"]])
+ if 'port' in config:
+ self.session.set(base_path + ['neighbor', neighbor, 'port', config["port"]])
+ if 'remote_as' in config:
+ self.session.set(base_path + ['neighbor', neighbor, 'remote-as', config["remote_as"]])
if 'cap_strict' in config:
self.session.set(base_path + ['neighbor', neighbor, 'strict-capability-match'])
+ if 'shutdown' in config:
+ self.session.set(base_path + ['neighbor', neighbor, 'shutdown'])
if 'ttl_security' in config:
self.session.set(base_path + ['neighbor', neighbor, 'ttl-security', 'hops', config["ttl_security"]])
+ if 'update_src' in config:
+ self.session.set(base_path + ['neighbor', neighbor, 'update-source', config["update_src"]])
# commit changes
self.session.commit()
@@ -146,49 +194,45 @@ class TestProtocolsBGP(unittest.TestCase):
frrconfig = getFRRBGPconfig()
self.assertIn(f'router bgp {ASN}', frrconfig)
- for neighbor, config in neighbor_config.items():
- if 'remote_as' in config:
- self.assertIn(f' neighbor {neighbor} remote-as {config["remote_as"]}', frrconfig)
- if 'description' in config:
- self.assertIn(f' neighbor {neighbor} description {config["description"]}', frrconfig)
- if 'passive' in config:
- self.assertIn(f' neighbor {neighbor} passive', frrconfig)
- if 'password' in config:
- self.assertIn(f' neighbor {neighbor} password {config["password"]}', frrconfig)
- if 'shutdown' in config:
- self.assertIn(f' neighbor {neighbor} shutdown', frrconfig)
+ for peer, peer_config in neighbor_config.items():
if 'adv_interv' in config:
- self.assertIn(f' neighbor {neighbor} advertisement-interval {config["adv_interv"]}', frrconfig)
- if 'no_cap_nego' in config:
- self.assertIn(f' neighbor {neighbor} dont-capability-negotiate', frrconfig)
+ self.assertIn(f' neighbor {peer} advertisement-interval {peer_config["adv_interv"]}', frrconfig)
if 'port' in config:
- self.assertIn(f' neighbor {neighbor} port {config["port"]}', frrconfig)
- if 'multi_hop' in config:
- self.assertIn(f' neighbor {neighbor} ebgp-multihop {config["multi_hop"]}', frrconfig)
- if 'cap_over' in config:
- self.assertIn(f' neighbor {neighbor} override-capability', frrconfig)
+ self.assertIn(f' neighbor {peer} port {peer_config["port"]}', frrconfig)
if 'cap_strict' in config:
- self.assertIn(f' neighbor {neighbor} strict-capability-match', frrconfig)
- if 'ttl_security' in config:
- self.assertIn(f' neighbor {neighbor} ttl-security hops {config["ttl_security"]}', frrconfig)
+ self.assertIn(f' neighbor {peer} strict-capability-match', frrconfig)
+
+ self.verify_frr_config(peer, peer_config, frrconfig)
def test_bgp_03_peer_groups(self):
+ # Test out individual peer-group configuration items
for peer_group, config in peer_group_config.items():
- self.session.set(base_path + ['peer-group', peer_group, 'remote-as', config["remote_as"]])
- if 'passive' in config:
- self.session.set(base_path + ['peer-group', peer_group, 'passive'])
- if 'password' in config:
- self.session.set(base_path + ['peer-group', peer_group, 'password', config["password"]])
- if 'shutdown' in config:
- self.session.set(base_path + ['peer-group', peer_group, 'shutdown'])
+ if 'cap_dynamic' in config:
+ self.session.set(base_path + ['peer-group', peer_group, 'capability', 'dynamic'])
+ if 'cap_ext_next' in config:
+ self.session.set(base_path + ['peer-group', peer_group, 'capability', 'extended-nexthop'])
+ if 'description' in config:
+ self.session.set(base_path + ['peer-group', peer_group, 'description', config["description"]])
if 'no_cap_nego' in config:
self.session.set(base_path + ['peer-group', peer_group, 'disable-capability-negotiation'])
if 'multi_hop' in config:
self.session.set(base_path + ['peer-group', peer_group, 'ebgp-multihop', config["multi_hop"]])
+ if 'local_as' in config:
+ self.session.set(base_path + ['peer-group', peer_group, 'local-as', config["local_as"]])
if 'cap_over' in config:
self.session.set(base_path + ['peer-group', peer_group, 'override-capability'])
+ if 'passive' in config:
+ self.session.set(base_path + ['peer-group', peer_group, 'passive'])
+ if 'password' in config:
+ self.session.set(base_path + ['peer-group', peer_group, 'password', config["password"]])
+ if 'remote_as' in config:
+ self.session.set(base_path + ['peer-group', peer_group, 'remote-as', config["remote_as"]])
+ if 'shutdown' in config:
+ self.session.set(base_path + ['peer-group', peer_group, 'shutdown'])
if 'ttl_security' in config:
self.session.set(base_path + ['peer-group', peer_group, 'ttl-security', 'hops', config["ttl_security"]])
+ if 'update_src' in config:
+ self.session.set(base_path + ['peer-group', peer_group, 'update-source', config["update_src"]])
# commit changes
self.session.commit()
@@ -197,25 +241,9 @@ class TestProtocolsBGP(unittest.TestCase):
frrconfig = getFRRBGPconfig()
self.assertIn(f'router bgp {ASN}', frrconfig)
- for peer_group, config in peer_group_config.items():
+ for peer, peer_config in peer_group_config.items():
self.assertIn(f' neighbor {peer_group} peer-group', frrconfig)
-
- if 'remote_as' in config:
- self.assertIn(f' neighbor {peer_group} remote-as {config["remote_as"]}', frrconfig)
- if 'passive' in config:
- self.assertIn(f' neighbor {peer_group} passive', frrconfig)
- if 'password' in config:
- self.assertIn(f' neighbor {peer_group} password {config["password"]}', frrconfig)
- if 'shutdown' in config:
- self.assertIn(f' neighbor {peer_group} shutdown', frrconfig)
- if 'no_cap_nego' in config:
- self.assertIn(f' neighbor {peer_group} dont-capability-negotiate', frrconfig)
- if 'multi_hop' in config:
- self.assertIn(f' neighbor {peer_group} ebgp-multihop {config["multi_hop"]}', frrconfig)
- if 'cap_over' in config:
- self.assertIn(f' neighbor {peer_group} override-capability', frrconfig)
- if 'ttl_security' in config:
- self.assertIn(f' neighbor {peer_group} ttl-security hops {config["ttl_security"]}', frrconfig)
+ self.verify_frr_config(peer, peer_config, frrconfig)
if __name__ == '__main__':
unittest.main(verbosity=2)