From: Rafael Zalamena Date: Mon, 3 Jul 2017 19:04:47 +0000 (-0300) Subject: ospf: test route kernel installation X-Git-Tag: frr-7.1-dev~151^2~259 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=d1c310867381485a7d7d1469063bacddb1fcc73c;p=matthieu%2Ffrr.git ospf: test route kernel installation Added tests to validate that OSPF routes are being installed/uninstalled in the Linux kernel. --- diff --git a/tests/topotests/ospf-topo1/test_ospf_topo1.py b/tests/topotests/ospf-topo1/test_ospf_topo1.py index f5b2641ae5..d62b785a99 100755 --- a/tests/topotests/ospf-topo1/test_ospf_topo1.py +++ b/tests/topotests/ospf-topo1/test_ospf_topo1.py @@ -164,6 +164,25 @@ def test_ospf_convergence(): count=20, wait=3) assert result, 'OSPF did not converge on {}:\n{}'.format(router, diff) +def test_ospf_kernel_route(): + "Test OSPF kernel route installation" + tgen = get_topogen() + rlist = tgen.routers().values() + for router in rlist: + logger.info('Checking OSPF IPv4 kernel routes in "%s"', router.name) + + routes = topotest.ip4_route(router) + expected = { + '10.0.1.0/24': {}, + '10.0.2.0/24': {}, + '10.0.3.0/24': {}, + '10.0.10.0/24': {}, + '172.16.0.0/24': {}, + '172.16.1.0/24': {}, + } + assertmsg = 'OSPF IPv4 route mismatch in router "{}"'.format(router.name) + assert topotest.json_cmp(routes, expected) is None, assertmsg + def test_ospf6_convergence(): "Test OSPF6 daemon convergence" for rnum in range(1, 5): @@ -181,6 +200,25 @@ def test_ospf6_convergence(): count=20, wait=3) assert result, 'OSPF6 did not converge on {}:\n{}'.format(router, diff) +def test_ospf6_kernel_route(): + "Test OSPF kernel route installation" + tgen = get_topogen() + rlist = tgen.routers().values() + for router in rlist: + logger.info('Checking OSPF IPv6 kernel routes in "%s"', router.name) + + routes = topotest.ip6_route(router) + expected = { + '2001:db8:1::/64': {}, + '2001:db8:2::/64': {}, + '2001:db8:3::/64': {}, + '2001:db8:100::/64': {}, + '2001:db8:200::/64': {}, + '2001:db8:300::/64': {}, + } + assertmsg = 'OSPF IPv6 route mismatch in router "{}"'.format(router.name) + assert topotest.json_cmp(routes, expected) is None, assertmsg + def test_ospf_json(): "Test 'show ip ospf json' output for coherency." tgen = get_topogen() @@ -273,6 +311,41 @@ def test_ospf_link_down(): count=20, wait=3) assert result, 'OSPF did not converge on {}:\n{}'.format(router, diff) +def test_ospf_link_down_kernel_route(): + "Test OSPF kernel route installation" + tgen = get_topogen() + rlist = tgen.routers().values() + for router in rlist: + logger.info('Checking OSPF IPv4 kernel routes in "%s" after link down', router.name) + + routes = topotest.ip4_route(router) + expected = { + '10.0.1.0/24': {}, + '10.0.2.0/24': {}, + '10.0.3.0/24': {}, + '10.0.10.0/24': {}, + '172.16.0.0/24': {}, + '172.16.1.0/24': {}, + } + if router.name == 'r1' or router.name == 'r2': + expected.update({ + '10.0.10.0/24': None, + '172.16.0.0/24': None, + '172.16.1.0/24': None, + }) + elif router.name == 'r3' or router.name == 'r4': + expected.update({ + '10.0.1.0/24': None, + '10.0.2.0/24': None, + }) + # Route '10.0.3.0' is no longer available for r4 since it is down. + if router.name == 'r4': + expected.update({ + '10.0.3.0/24': None, + }) + assertmsg = 'OSPF IPv4 route mismatch in router "{}" after link down'.format(router.name) + assert topotest.json_cmp(routes, expected) is None, assertmsg + def test_ospf6_link_down(): "Test OSPF6 daemon convergence after link goes down" @@ -291,6 +364,41 @@ def test_ospf6_link_down(): count=20, wait=3) assert result, 'OSPF6 did not converge on {}:\n{}'.format(router, diff) +def test_ospf6_link_down_kernel_route(): + "Test OSPF kernel route installation" + tgen = get_topogen() + rlist = tgen.routers().values() + for router in rlist: + logger.info('Checking OSPF IPv6 kernel routes in "%s" after link down', router.name) + + routes = topotest.ip6_route(router) + expected = { + '2001:db8:1::/64': {}, + '2001:db8:2::/64': {}, + '2001:db8:3::/64': {}, + '2001:db8:100::/64': {}, + '2001:db8:200::/64': {}, + '2001:db8:300::/64': {}, + } + if router.name == 'r1' or router.name == 'r2': + expected.update({ + '2001:db8:100::/64': None, + '2001:db8:200::/64': None, + '2001:db8:300::/64': None, + }) + elif router.name == 'r3' or router.name == 'r4': + expected.update({ + '2001:db8:1::/64': None, + '2001:db8:2::/64': None, + }) + # Route '2001:db8:3::/64' is no longer available for r4 since it is down. + if router.name == 'r4': + expected.update({ + '2001:db8:3::/64': None, + }) + assertmsg = 'OSPF IPv6 route mismatch in router "{}" after link down'.format(router.name) + assert topotest.json_cmp(routes, expected) is None, assertmsg + def test_memory_leak(): "Run the memory leak test and report results." tgen = get_topogen()