]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test-network: add test for ManageForeignNextHops=no 30433/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 11 Dec 2023 18:13:09 +0000 (03:13 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 12 Dec 2023 15:02:36 +0000 (00:02 +0900)
test/test-network/conf/networkd-manage-foreign-nexthops-no.conf [new file with mode: 0644]
test/test-network/systemd-networkd-tests.py

diff --git a/test/test-network/conf/networkd-manage-foreign-nexthops-no.conf b/test/test-network/conf/networkd-manage-foreign-nexthops-no.conf
new file mode 100644 (file)
index 0000000..9bf5d7e
--- /dev/null
@@ -0,0 +1,3 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+[Network]
+ManageForeignNextHops=no
index 2ad311e29526994cab25857f68f1686a1b4da0a2..b70795a908dab93ce47d90b6e79f8163dc049119 100755 (executable)
@@ -3842,7 +3842,7 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
         self.assertRegex(output, 'inet 10.1.2.3/16 scope global dummy98')
         self.assertNotRegex(output, 'inet 10.2.3.4/16 scope global dynamic dummy98')
 
-    def check_nexthop(self):
+    def check_nexthop(self, manage_foreign_nexthops):
         self.wait_online(['veth99:routable', 'veth-peer:routable', 'dummy98:routable'])
 
         output = check_output('ip nexthop list dev veth99')
@@ -3853,11 +3853,16 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
         self.assertIn('id 4 dev veth99', output)
         self.assertRegex(output, 'id 5 via 192.168.10.1 dev veth99 .*onlink')
         self.assertIn('id 8 via fe80:0:222:4dff:ff:ff:ff:ff dev veth99', output)
-        self.assertRegex(output, r'id [0-9]* via 192.168.5.2 dev veth99')
+        if manage_foreign_nexthops:
+            self.assertRegex(output, r'id [0-9]* via 192.168.5.2 dev veth99')
 
         output = check_output('ip nexthop list dev dummy98')
         print(output)
         self.assertIn('id 20 via 192.168.20.1 dev dummy98', output)
+        if manage_foreign_nexthops:
+            self.assertNotIn('id 42 via 192.168.20.2 dev dummy98', output)
+        else:
+            self.assertIn('id 42 via 192.168.20.2 dev dummy98', output)
 
         # kernel manages blackhole nexthops on lo
         output = check_output('ip nexthop list dev lo')
@@ -3903,13 +3908,20 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
         output = check_output(*networkctl_cmd, '--json=short', 'status', env=env)
         check_json(output)
 
-    @expectedFailureIfNexthopIsNotAvailable()
-    def test_nexthop(self):
+    def _test_nexthop(self, manage_foreign_nexthops):
+        if not manage_foreign_nexthops:
+            copy_networkd_conf_dropin('networkd-manage-foreign-nexthops-no.conf')
+
+        check_output('ip link add dummy98 type dummy')
+        check_output('ip link set dummy98 up')
+        check_output('ip address add 192.168.20.20/24 dev dummy98')
+        check_output('ip nexthop add id 42 via 192.168.20.2 dev dummy98')
+
         copy_network_unit('25-nexthop.network', '25-veth.netdev', '25-veth-peer.network',
                           '12-dummy.netdev', '25-nexthop-dummy.network')
         start_networkd()
 
-        self.check_nexthop()
+        self.check_nexthop(manage_foreign_nexthops)
 
         remove_network_unit('25-nexthop.network')
         copy_network_unit('25-nexthop-nothing.network')
@@ -3928,7 +3940,7 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
         networkctl_reconfigure('dummy98')
         networkctl_reload()
 
-        self.check_nexthop()
+        self.check_nexthop(manage_foreign_nexthops)
 
         remove_link('veth99')
         time.sleep(2)
@@ -3937,6 +3949,19 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
         print(output)
         self.assertEqual(output, '')
 
+    @expectedFailureIfNexthopIsNotAvailable()
+    def test_nexthop(self):
+        first = True
+        for manage_foreign_nexthops in [True, False]:
+            if first:
+                first = False
+            else:
+                self.tearDown()
+
+            print(f'### test_nexthop(manage_foreign_nexthops={manage_foreign_nexthops})')
+            with self.subTest(manage_foreign_nexthops=manage_foreign_nexthops):
+                self._test_nexthop(manage_foreign_nexthops)
+
 class NetworkdTCTests(unittest.TestCase, Utilities):
 
     def setUp(self):