summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/lib/test_typelist.h9
-rw-r--r--tests/topotests/bgp_ebgp_requires_policy/r5/bgpd.conf5
-rw-r--r--tests/topotests/bgp_ebgp_requires_policy/r5/zebra.conf9
-rw-r--r--tests/topotests/bgp_ebgp_requires_policy/r6/bgpd.conf3
-rw-r--r--tests/topotests/bgp_ebgp_requires_policy/r6/zebra.conf6
-rw-r--r--tests/topotests/bgp_ebgp_requires_policy/test_bgp_ebgp_requires_policy.py74
-rw-r--r--tests/topotests/bgp_show_ip_bgp_fqdn/test_bgp_show_ip_bgp_fqdn.py48
7 files changed, 108 insertions, 46 deletions
diff --git a/tests/lib/test_typelist.h b/tests/lib/test_typelist.h
index f20bbc52d9..9039fa8a46 100644
--- a/tests/lib/test_typelist.h
+++ b/tests/lib/test_typelist.h
@@ -98,12 +98,13 @@ static void ts_hash(const char *text, const char *expect)
unsigned i = 0;
uint8_t hash[32];
char hashtext[65];
- uint32_t count;
+ uint32_t swap_count, count;
- count = htonl(list_count(&head));
+ count = list_count(&head);
+ swap_count = htonl(count);
SHA256_Init(&ctx);
- SHA256_Update(&ctx, &count, sizeof(count));
+ SHA256_Update(&ctx, &swap_count, sizeof(swap_count));
frr_each (list, &head, item) {
struct {
@@ -115,7 +116,7 @@ static void ts_hash(const char *text, const char *expect)
};
SHA256_Update(&ctx, &hashitem, sizeof(hashitem));
i++;
- assert(i < count);
+ assert(i <= count);
}
SHA256_Final(hash, &ctx);
diff --git a/tests/topotests/bgp_ebgp_requires_policy/r5/bgpd.conf b/tests/topotests/bgp_ebgp_requires_policy/r5/bgpd.conf
new file mode 100644
index 0000000000..99e6b6818d
--- /dev/null
+++ b/tests/topotests/bgp_ebgp_requires_policy/r5/bgpd.conf
@@ -0,0 +1,5 @@
+router bgp 65000
+ neighbor 192.168.255.2 remote-as 65000
+ address-family ipv4 unicast
+ redistribute connected
+!
diff --git a/tests/topotests/bgp_ebgp_requires_policy/r5/zebra.conf b/tests/topotests/bgp_ebgp_requires_policy/r5/zebra.conf
new file mode 100644
index 0000000000..7ef77a6015
--- /dev/null
+++ b/tests/topotests/bgp_ebgp_requires_policy/r5/zebra.conf
@@ -0,0 +1,9 @@
+!
+interface lo
+ ip address 172.16.255.254/32
+!
+interface r5-eth0
+ ip address 192.168.255.1/24
+!
+ip forwarding
+!
diff --git a/tests/topotests/bgp_ebgp_requires_policy/r6/bgpd.conf b/tests/topotests/bgp_ebgp_requires_policy/r6/bgpd.conf
new file mode 100644
index 0000000000..164f975cb7
--- /dev/null
+++ b/tests/topotests/bgp_ebgp_requires_policy/r6/bgpd.conf
@@ -0,0 +1,3 @@
+router bgp 65000
+ bgp ebgp-requires-policy
+ neighbor 192.168.255.1 remote-as 65000
diff --git a/tests/topotests/bgp_ebgp_requires_policy/r6/zebra.conf b/tests/topotests/bgp_ebgp_requires_policy/r6/zebra.conf
new file mode 100644
index 0000000000..1c617c4272
--- /dev/null
+++ b/tests/topotests/bgp_ebgp_requires_policy/r6/zebra.conf
@@ -0,0 +1,6 @@
+!
+interface r6-eth0
+ ip address 192.168.255.2/24
+!
+ip forwarding
+!
diff --git a/tests/topotests/bgp_ebgp_requires_policy/test_bgp_ebgp_requires_policy.py b/tests/topotests/bgp_ebgp_requires_policy/test_bgp_ebgp_requires_policy.py
index eecacfd00c..6660b4e866 100644
--- a/tests/topotests/bgp_ebgp_requires_policy/test_bgp_ebgp_requires_policy.py
+++ b/tests/topotests/bgp_ebgp_requires_policy/test_bgp_ebgp_requires_policy.py
@@ -5,7 +5,7 @@
# Part of NetDEF Topology Tests
#
# Copyright (c) 2019 by
-# Network Device Education Foundation, Inc. ("NetDEF")
+# Donatas Abraitis <donatas.abraitis@gmail.com>
#
# Permission to use, copy, modify, and/or distribute this software
# for any purpose with or without fee is hereby granted, provided
@@ -34,6 +34,7 @@ import sys
import json
import time
import pytest
+import functools
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, '../'))
@@ -48,7 +49,7 @@ class TemplateTopo(Topo):
def build(self, *_args, **_opts):
tgen = get_topogen(self)
- for routern in range(1, 5):
+ for routern in range(1, 7):
tgen.add_router('r{}'.format(routern))
switch = tgen.add_switch('s1')
@@ -59,6 +60,10 @@ class TemplateTopo(Topo):
switch.add_link(tgen.gears['r3'])
switch.add_link(tgen.gears['r4'])
+ switch = tgen.add_switch('s3')
+ switch.add_link(tgen.gears['r5'])
+ switch.add_link(tgen.gears['r6'])
+
def setup_module(mod):
tgen = Topogen(TemplateTopo, mod.__name__)
tgen.start_topology()
@@ -81,32 +86,57 @@ def teardown_module(mod):
tgen = get_topogen()
tgen.stop_topology()
-def test_bgp_remove_private_as():
+def test_ebgp_requires_policy():
tgen = get_topogen()
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
def _bgp_converge(router):
- while True:
- cmd = "show ip bgp neighbor 192.168.255.1 json"
- output = json.loads(tgen.gears[router].vtysh_cmd(cmd))
- if output['192.168.255.1']['bgpState'] == 'Established':
- time.sleep(3)
- return True
-
- def _bgp_ebgp_requires_policy(router):
- cmd = "show ip bgp 172.16.255.254/32 json"
- output = json.loads(tgen.gears[router].vtysh_cmd(cmd))
- if 'prefix' in output:
- return True
- return False
-
- if _bgp_converge('r2'):
- assert _bgp_ebgp_requires_policy('r2') == True
-
- if _bgp_converge('r4'):
- assert _bgp_ebgp_requires_policy('r4') == False
+ output = json.loads(tgen.gears[router].vtysh_cmd("show ip bgp neighbor 192.168.255.1 json"))
+ expected = {
+ '192.168.255.1': {
+ 'bgpState': 'Established'
+ }
+ }
+ return topotest.json_cmp(output, expected)
+
+ def _bgp_has_routes(router):
+ output = json.loads(tgen.gears[router].vtysh_cmd("show ip bgp neighbor 192.168.255.1 routes json"))
+ expected = {
+ 'routes': {
+ '172.16.255.254/32': [
+ {
+ 'valid': True
+ }
+ ]
+ }
+ }
+ return topotest.json_cmp(output, expected)
+
+ test_func = functools.partial(_bgp_converge, 'r2')
+ success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
+ assert success is True, 'Failed bgp convergence (r2) in "{}"'.format(router)
+
+ test_func = functools.partial(_bgp_has_routes, 'r2')
+ success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
+ assert success is True, 'eBGP policy is not working (r2) in "{}"'.format(router)
+
+ test_func = functools.partial(_bgp_converge, 'r4')
+ success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
+ assert success is True, 'Failed bgp convergence (r4) in "{}"'.format(router)
+
+ test_func = functools.partial(_bgp_has_routes, 'r4')
+ success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
+ assert success is False, 'eBGP policy is not working (r4) in "{}"'.format(router)
+
+ test_func = functools.partial(_bgp_converge, 'r6')
+ success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
+ assert success is True, 'Failed bgp convergence (r6) in "{}"'.format(router)
+
+ test_func = functools.partial(_bgp_has_routes, 'r6')
+ success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
+ assert success is True, 'eBGP policy is not working (r6) in "{}"'.format(router)
if __name__ == '__main__':
args = ["-s"] + sys.argv[1:]
diff --git a/tests/topotests/bgp_show_ip_bgp_fqdn/test_bgp_show_ip_bgp_fqdn.py b/tests/topotests/bgp_show_ip_bgp_fqdn/test_bgp_show_ip_bgp_fqdn.py
index 59ffd36ef3..f5119468e0 100644
--- a/tests/topotests/bgp_show_ip_bgp_fqdn/test_bgp_show_ip_bgp_fqdn.py
+++ b/tests/topotests/bgp_show_ip_bgp_fqdn/test_bgp_show_ip_bgp_fqdn.py
@@ -5,7 +5,7 @@
# Part of NetDEF Topology Tests
#
# Copyright (c) 2019 by
-# Network Device Education Foundation, Inc. ("NetDEF")
+# Donatas Abraitis <donatas.abraitis@gmail.com>
#
# Permission to use, copy, modify, and/or distribute this software
# for any purpose with or without fee is hereby granted, provided
@@ -33,6 +33,7 @@ import sys
import json
import time
import pytest
+import functools
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, '../'))
@@ -76,33 +77,40 @@ def teardown_module(mod):
tgen = get_topogen()
tgen.stop_topology()
-def test_bgp_maximum_prefix_invalid():
+def test_bgp_show_ip_bgp_hostname():
tgen = get_topogen()
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
- def _bgp_converge(router, neighbor):
- cmd = "show ip bgp neighbor {0} json".format(neighbor)
- while True:
- output = json.loads(tgen.gears[router].vtysh_cmd(cmd))
- if output[neighbor]['bgpState'] == 'Established':
- time.sleep(3)
+ router = tgen.gears['r2']
+
+ def _bgp_converge(router):
+ output = json.loads(router.vtysh_cmd("show ip bgp neighbor 192.168.255.1 json"))
+ expected = {
+ '192.168.255.1': {
+ 'bgpState': 'Established',
+ 'addressFamilyInfo': {
+ 'ipv4Unicast': {
+ 'acceptedPrefixCounter': 2
+ }
+ }
+ }
+ }
+ return topotest.json_cmp(output, expected)
+
+ def _bgp_show_nexthop_hostname_and_ip(router):
+ output = json.loads(router.vtysh_cmd("show ip bgp json"))
+ for nh in output['routes']['172.16.255.253/32'][0]['nexthops']:
+ if 'hostname' in nh and 'ip' in nh:
return True
+ return False
- def _bgp_show_nexthop(router, prefix):
- cmd = "show ip bgp json"
- output = json.loads(tgen.gears[router].vtysh_cmd(cmd))
- for nh in output['routes'][prefix][0]['nexthops']:
- if 'fqdn' in nh:
- return 'fqdn'
- return 'ip'
+ test_func = functools.partial(_bgp_converge, router)
+ success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
- if _bgp_converge('r2', '192.168.255.1'):
- assert _bgp_show_nexthop('r2', '172.16.255.254/32') == 'fqdn'
-
- if _bgp_converge('r1', '192.168.255.2'):
- assert _bgp_show_nexthop('r1', '172.16.255.253/32') == 'ip'
+ assert result is None, 'Failed bgp convergence in "{}"'.format(router)
+ assert _bgp_show_nexthop_hostname_and_ip(router) == True
if __name__ == '__main__':
args = ["-s"] + sys.argv[1:]