From 41231f26970e7f89601a9d2d58f239c6e1dc6646 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 12 Dec 2023 03:13:09 +0900 Subject: [PATCH] test-network: add test for ManageForeignNextHops=no --- .../networkd-manage-foreign-nexthops-no.conf | 3 ++ test/test-network/systemd-networkd-tests.py | 37 ++++++++++++++++--- 2 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 test/test-network/conf/networkd-manage-foreign-nexthops-no.conf 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 index 0000000000..9bf5d7eb5d --- /dev/null +++ b/test/test-network/conf/networkd-manage-foreign-nexthops-no.conf @@ -0,0 +1,3 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +[Network] +ManageForeignNextHops=no diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 2ad311e295..b70795a908 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -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): -- 2.25.1