From 7f1b36a82afd114f0bdc7dc8ccef0a5febf2ae8e Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Fri, 8 Nov 2024 22:55:20 +0900 Subject: [PATCH] test-network: add test case for issue #35047 --- .../conf/25-route-static-issue-35047.network | 10 +++++ .../step1.conf | 4 ++ .../step2.conf | 6 +++ test/test-network/systemd-networkd-tests.py | 40 +++++++++++++++++++ 4 files changed, 60 insertions(+) create mode 100644 test/test-network/conf/25-route-static-issue-35047.network create mode 100644 test/test-network/conf/25-route-static-issue-35047.network.d/step1.conf create mode 100644 test/test-network/conf/25-route-static-issue-35047.network.d/step2.conf diff --git a/test/test-network/conf/25-route-static-issue-35047.network b/test/test-network/conf/25-route-static-issue-35047.network new file mode 100644 index 00000000000..0d65b4b77c0 --- /dev/null +++ b/test/test-network/conf/25-route-static-issue-35047.network @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +[Match] +Name=dummy98 + +[Network] +IPv6AcceptRA=no + +[Route] +Destination=198.51.100.0/24 +Gateway=192.0.2.2 diff --git a/test/test-network/conf/25-route-static-issue-35047.network.d/step1.conf b/test/test-network/conf/25-route-static-issue-35047.network.d/step1.conf new file mode 100644 index 00000000000..e728e97f573 --- /dev/null +++ b/test/test-network/conf/25-route-static-issue-35047.network.d/step1.conf @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +[Address] +Address=192.0.2.1/32 +Peer=192.0.2.2/32 diff --git a/test/test-network/conf/25-route-static-issue-35047.network.d/step2.conf b/test/test-network/conf/25-route-static-issue-35047.network.d/step2.conf new file mode 100644 index 00000000000..b65399fb760 --- /dev/null +++ b/test/test-network/conf/25-route-static-issue-35047.network.d/step2.conf @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +[Address] +Address=192.0.2.1/32 + +[Route] +Destination=192.0.2.2/32 diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 6b19a8a9388..39449968683 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -4050,6 +4050,46 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities): with self.subTest(manage_foreign_routes=manage_foreign_routes): self._test_route_static(manage_foreign_routes) + def test_route_static_issue_35047(self): + copy_network_unit( + '25-route-static-issue-35047.network', + '25-route-static-issue-35047.network.d/step1.conf', + '12-dummy.netdev', + copy_dropins=False) + start_networkd() + self.wait_online('dummy98:routable') + + print('### ip -4 route show table all dev dummy98') + output = check_output('ip -4 route show table all dev dummy98') + print(output) + self.assertIn('192.0.2.2 proto kernel scope link src 192.0.2.1', output) + self.assertIn('local 192.0.2.1 table local proto kernel scope host src 192.0.2.1', output) + self.assertIn('198.51.100.0/24 via 192.0.2.2 proto static', output) + + check_output('ip link set dev dummy98 down') + self.wait_route_dropped('dummy98', '192.0.2.2 proto kernel scope link src 192.0.2.1', ipv='-4', table='all', timeout_sec=10) + self.wait_route_dropped('dummy98', 'local 192.0.2.1 table local proto kernel scope host src 192.0.2.1', ipv='-4', table='all', timeout_sec=10) + self.wait_route_dropped('dummy98', '198.51.100.0/24 via 192.0.2.2 proto static', ipv='-4', table='all', timeout_sec=10) + + print('### ip -4 route show table all dev dummy98') + output = check_output('ip -4 route show table all dev dummy98') + print(output) + self.assertNotIn('192.0.2.2', output) + self.assertNotIn('192.0.2.1', output) + self.assertNotIn('198.51.100.0/24', output) + + remove_network_unit('25-route-static-issue-35047.network.d/step1.conf') + copy_network_unit('25-route-static-issue-35047.network.d/step2.conf') + networkctl_reload() + self.wait_online('dummy98:routable') + + print('### ip -4 route show table all dev dummy98') + output = check_output('ip -4 route show table all dev dummy98') + print(output) + self.assertIn('192.0.2.2 proto static scope link', output) + self.assertIn('local 192.0.2.1 table local proto kernel scope host src 192.0.2.1', output) + self.assertIn('198.51.100.0/24 via 192.0.2.2 proto static', output) + @expectedFailureIfRTA_VIAIsNotSupported() def test_route_via_ipv6(self): copy_network_unit('25-route-via-ipv6.network', '12-dummy.netdev')