From 94dc76c9963bf77383ba5f8b489744bd9506f0b8 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Fri, 28 Feb 2025 03:24:39 +0900 Subject: [PATCH] test-network: extend test case for static routes - split out verifications into two functions, - also check the following scenarios: * unmanaging an existing interface, * re-managing an unmanaged interface, * adding a new unmanaged interface, * removing an unmanaged interface. --- test/test-network/systemd-networkd-tests.py | 177 ++++++++------------ 1 file changed, 73 insertions(+), 104 deletions(-) diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index dc8bc395e4..9f5a3ce62b 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -4091,17 +4091,11 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities): self.assertIn('lookup 7 ', output) self.assertIn('uidrange 100-200 ', output) - def _test_route_static(self, manage_foreign_routes): - if not manage_foreign_routes: - copy_networkd_conf_dropin('networkd-manage-foreign-routes-no.conf') - - copy_network_unit('25-route-static.network', '12-dummy.netdev', - '25-route-static-test1.network', '11-dummy.netdev') - start_networkd() - self.wait_online('dummy98:routable') - + def _check_route_static(self, test1_is_managed: bool): output = networkctl_status('dummy98') print(output) + output = networkctl_status('test1') + print(output) print('### ip -6 route show dev dummy98') output = check_output('ip -6 route show dev dummy98') @@ -4198,116 +4192,91 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities): print(output) # old ip command does not show 'nexthop' keyword and weight... self.assertIn('2001:1234:5:bfff:ff:ff:ff:ff', output) - self.assertIn('via 2001:1234:5:6fff:ff:ff:ff:ff dev test1', output) - self.assertIn('via 2001:1234:5:7fff:ff:ff:ff:ff dev test1', output) + if test1_is_managed: + self.assertIn('via 2001:1234:5:6fff:ff:ff:ff:ff dev test1', output) + self.assertIn('via 2001:1234:5:7fff:ff:ff:ff:ff dev test1', output) self.assertIn('via 2001:1234:5:8fff:ff:ff:ff:ff dev dummy98', output) self.assertIn('via 2001:1234:5:9fff:ff:ff:ff:ff dev dummy98', output) check_json(networkctl_json()) + def _check_unreachable_routes_removed(self): + print('### ip -4 route show type blackhole') + output = check_output('ip -4 route show type blackhole') + print(output) + self.assertEqual(output, '') + + print('### ip -4 route show type unreachable') + output = check_output('ip -4 route show type unreachable') + print(output) + self.assertEqual(output, '') + + print('### ip -4 route show type prohibit') + output = check_output('ip -4 route show type prohibit') + print(output) + self.assertEqual(output, '') + + print('### ip -6 route show type blackhole') + output = check_output('ip -6 route show type blackhole') + print(output) + self.assertEqual(output, '') + + print('### ip -6 route show type unreachable') + output = check_output('ip -6 route show type unreachable') + print(output) + self.assertEqual(output, '') + + print('### ip -6 route show type prohibit') + output = check_output('ip -6 route show type prohibit') + print(output) + self.assertEqual(output, '') + + check_json(networkctl_json()) + + def _test_route_static(self, manage_foreign_routes): + if not manage_foreign_routes: + copy_networkd_conf_dropin('networkd-manage-foreign-routes-no.conf') + + copy_network_unit('25-route-static.network', '12-dummy.netdev', + '25-route-static-test1.network', '11-dummy.netdev') + start_networkd() + self.wait_online('dummy98:routable', 'test1:routable') + self._check_route_static(test1_is_managed=True) + + # unmanaging test1 + remove_network_unit('25-route-static-test1.network') + networkctl_reload() + self.wait_online('dummy98:routable') + self.wait_operstate('test1', setup_state='unmanaged') + self._check_route_static(test1_is_managed=False) + + # managing test1 again + copy_network_unit('25-route-static-test1.network') + networkctl_reload() + self.wait_online('dummy98:routable', 'test1:routable') + self._check_route_static(test1_is_managed=True) + + # adding an unmanaged interface + check_output('ip link add test2 type dummy') + self.wait_operstate('test2', operstate='off', setup_state='unmanaged') + self._check_route_static(test1_is_managed=True) + + # reconfiguring with another config, and check all routes managed by Manager are removed copy_network_unit('25-address-static.network', copy_dropins=False) networkctl_reload() self.wait_online('dummy98:routable') + self._check_unreachable_routes_removed() - # check all routes managed by Manager are removed - print('### ip -4 route show type blackhole') - output = check_output('ip -4 route show type blackhole') - print(output) - self.assertEqual(output, '') - - print('### ip -4 route show type unreachable') - output = check_output('ip -4 route show type unreachable') - print(output) - self.assertEqual(output, '') - - print('### ip -4 route show type prohibit') - output = check_output('ip -4 route show type prohibit') - print(output) - self.assertEqual(output, '') - - print('### ip -6 route show type blackhole') - output = check_output('ip -6 route show type blackhole') - print(output) - self.assertEqual(output, '') - - print('### ip -6 route show type unreachable') - output = check_output('ip -6 route show type unreachable') - print(output) - self.assertEqual(output, '') - - print('### ip -6 route show type prohibit') - output = check_output('ip -6 route show type prohibit') - print(output) - self.assertEqual(output, '') - + # reconfiguring the original config again remove_network_unit('25-address-static.network') networkctl_reload() self.wait_online('dummy98:routable') + self._check_route_static(test1_is_managed=True) - # check all routes managed by Manager are reconfigured - print('### ip -4 route show type blackhole') - output = check_output('ip -4 route show type blackhole') - print(output) - self.assertIn('blackhole 202.54.1.2 proto static', output) - - print('### ip -4 route show type unreachable') - output = check_output('ip -4 route show type unreachable') - print(output) - self.assertIn('unreachable 202.54.1.3 proto static', output) - - print('### ip -4 route show type prohibit') - output = check_output('ip -4 route show type prohibit') - print(output) - self.assertIn('prohibit 202.54.1.4 proto static', output) - - print('### ip -6 route show type blackhole') - output = check_output('ip -6 route show type blackhole') - print(output) - self.assertIn('blackhole 2001:1234:5678::2 dev lo proto static', output) - - print('### ip -6 route show type unreachable') - output = check_output('ip -6 route show type unreachable') - print(output) - self.assertIn('unreachable 2001:1234:5678::3 dev lo proto static', output) - - print('### ip -6 route show type prohibit') - output = check_output('ip -6 route show type prohibit') - print(output) - self.assertIn('prohibit 2001:1234:5678::4 dev lo proto static', output) - + # removing interface, and check all routes managed by Manager are removed remove_link('dummy98') time.sleep(2) - - # check all routes managed by Manager are removed - print('### ip -4 route show type blackhole') - output = check_output('ip -4 route show type blackhole') - print(output) - self.assertEqual(output, '') - - print('### ip -4 route show type unreachable') - output = check_output('ip -4 route show type unreachable') - print(output) - self.assertEqual(output, '') - - print('### ip -4 route show type prohibit') - output = check_output('ip -4 route show type prohibit') - print(output) - self.assertEqual(output, '') - - print('### ip -6 route show type blackhole') - output = check_output('ip -6 route show type blackhole') - print(output) - self.assertEqual(output, '') - - print('### ip -6 route show type unreachable') - output = check_output('ip -6 route show type unreachable') - print(output) - self.assertEqual(output, '') - - print('### ip -6 route show type prohibit') - output = check_output('ip -6 route show type prohibit') - print(output) - self.assertEqual(output, '') + self._check_unreachable_routes_removed() def test_route_static(self): first = True