]> git.puffer.fish Git - mirror/frr.git/commitdiff
ospf: test route kernel installation
authorRafael Zalamena <rzalamena@gmail.com>
Mon, 3 Jul 2017 19:04:47 +0000 (16:04 -0300)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 28 Nov 2018 01:22:12 +0000 (20:22 -0500)
Added tests to validate that OSPF routes are being installed/uninstalled
in the Linux kernel.

tests/topotests/ospf-topo1/test_ospf_topo1.py

index f5b2641ae5b2074072a60ddbc9c465e3b2c2ded5..d62b785a999bcf6f49b17bd5a6746660501005c2 100755 (executable)
@@ -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()