diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2024-01-02 20:40:48 +0100 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2024-01-04 20:00:16 +0100 |
commit | 78265b5b4aa6c90aeb5f3582a8aa106403f7ed93 (patch) | |
tree | b989180da34f8aa1a05fe54719d8a3172ea43e5d | |
parent | test-network: merge three tests for neighbor (diff) | |
download | systemd-78265b5b4aa6c90aeb5f3582a8aa106403f7ed93.tar.xz systemd-78265b5b4aa6c90aeb5f3582a8aa106403f7ed93.zip |
test-network: add test case about replacing nexthop
-rw-r--r-- | test/test-network/conf/25-nexthop-1.network (renamed from test/test-network/conf/25-nexthop.network) | 1 | ||||
-rw-r--r-- | test/test-network/conf/25-nexthop-2.network | 98 | ||||
-rw-r--r-- | test/test-network/conf/25-nexthop-dummy-1.network (renamed from test/test-network/conf/25-nexthop-dummy.network) | 0 | ||||
-rw-r--r-- | test/test-network/conf/25-nexthop-dummy-2.network | 20 | ||||
-rwxr-xr-x | test/test-network/systemd-networkd-tests.py | 98 |
5 files changed, 190 insertions, 27 deletions
diff --git a/test/test-network/conf/25-nexthop.network b/test/test-network/conf/25-nexthop-1.network index f53a58b059..a5a8d8180d 100644 --- a/test/test-network/conf/25-nexthop.network +++ b/test/test-network/conf/25-nexthop-1.network @@ -6,7 +6,6 @@ Name=veth99 IPv6AcceptRA=no Address=2001:1234:5:8f63::1/120 Address=192.168.5.10/24 -Gateway=192.168.5.1 [NextHop] Id=1 diff --git a/test/test-network/conf/25-nexthop-2.network b/test/test-network/conf/25-nexthop-2.network new file mode 100644 index 0000000000..63062f3d5c --- /dev/null +++ b/test/test-network/conf/25-nexthop-2.network @@ -0,0 +1,98 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +[Match] +Name=veth99 + +[Network] +IPv6AcceptRA=no +Address=2001:1234:5:8f63::1/120 +Address=192.168.5.10/24 + +# Commented out lines are specified in 25-nexthop.network + +[NextHop] +#Id=1 +Id=6 +Gateway=192.168.5.1 + +[NextHop] +#Id=2 +Id=7 +Gateway=2001:1234:5:8f63::2 + +[NextHop] +#Id=3 +Id=4 +Family=ipv6 + +[NextHop] +#Id=4 +Id=3 +Family=ipv4 + +[NextHop] +Id=5 +#Gateway=192.168.10.1 +#OnLink=yes +Gateway=192.168.5.3 +OnLink=no + +[NextHop] +#Id=6 +Id=1 +Family=ipv4 +Blackhole=yes + +[NextHop] +#Id=7 +Id=2 +Family=ipv6 +Blackhole=yes + +[NextHop] +Id=8 +Gateway=fe80::222:4dff:ff:ff:ff:ff + +[NextHop] +Gateway=192.168.5.2 + +[NextHop] +Family=ipv4 +Blackhole=yes + +[NextHop] +Family=ipv6 +Blackhole=yes + +[Route] +#NextHop=1 +NextHop=6 +Destination=10.10.10.10 + +[Route] +#NextHop=2 +NextHop=7 +Destination=10.10.10.11 + +[Route] +#NextHop=2 +NextHop=7 +Destination=2001:1234:5:8f62::1 + +[Route] +NextHop=5 +Destination=10.10.10.12 + +[Route] +#NextHop=6 +NextHop=1 +Destination=10.10.10.13 + +[Route] +#NextHop=7 +NextHop=2 +Destination=2001:1234:5:8f62::2 + +[Route] +#NextHop=21 +NextHop=20 +Destination=10.10.10.14 diff --git a/test/test-network/conf/25-nexthop-dummy.network b/test/test-network/conf/25-nexthop-dummy-1.network index a7bdaa9663..a7bdaa9663 100644 --- a/test/test-network/conf/25-nexthop-dummy.network +++ b/test/test-network/conf/25-nexthop-dummy-1.network diff --git a/test/test-network/conf/25-nexthop-dummy-2.network b/test/test-network/conf/25-nexthop-dummy-2.network new file mode 100644 index 0000000000..2556b1f923 --- /dev/null +++ b/test/test-network/conf/25-nexthop-dummy-2.network @@ -0,0 +1,20 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +[Match] +Name=dummy98 + +[Network] +Address=192.168.20.20/24 +IPv6AcceptRA=no + +# Commented out lines are specified in 25-nexthop-dummy.network + +[NextHop] +#Id=20 +Id=21 +Gateway=192.168.20.1 + +[NextHop] +#Id=21 +#Group=1:3 20:1 +Id=20 +Group=5:3 21:1 diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index a0ec8f1fbc..0a87c5d239 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -3854,23 +3854,34 @@ 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, manage_foreign_nexthops): + def check_nexthop(self, manage_foreign_nexthops, first): self.wait_online(['veth99:routable', 'veth-peer:routable', 'dummy98:routable']) output = check_output('ip nexthop list dev veth99') print(output) - self.assertIn('id 1 via 192.168.5.1 dev veth99', output) - self.assertIn('id 2 via 2001:1234:5:8f63::2 dev veth99', output) + if first: + self.assertIn('id 1 via 192.168.5.1 dev veth99', output) + self.assertIn('id 2 via 2001:1234:5:8f63::2 dev veth99', output) + else: + self.assertIn('id 6 via 192.168.5.1 dev veth99', output) + self.assertIn('id 7 via 2001:1234:5:8f63::2 dev veth99', output) self.assertIn('id 3 dev veth99', output) self.assertIn('id 4 dev veth99', output) - self.assertRegex(output, 'id 5 via 192.168.10.1 dev veth99 .*onlink') + if first: + self.assertRegex(output, 'id 5 via 192.168.10.1 dev veth99 .*onlink') + else: + self.assertIn('id 5 via 192.168.5.3 dev veth99', output) + self.assertNotRegex(output, 'id 5 via 192.168.5.3 dev veth99 .*onlink') self.assertIn('id 8 via fe80:0:222:4dff:ff:ff:ff:ff dev veth99', output) 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 first: + self.assertIn('id 20 via 192.168.20.1 dev dummy98', output) + else: + self.assertIn('id 21 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: @@ -3879,43 +3890,74 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities): # kernel manages blackhole nexthops on lo output = check_output('ip nexthop list dev lo') print(output) - self.assertIn('id 6 blackhole', output) - self.assertIn('id 7 blackhole', output) + if first: + self.assertIn('id 6 blackhole', output) + self.assertIn('id 7 blackhole', output) + else: + self.assertIn('id 1 blackhole', output) + self.assertIn('id 2 blackhole', output) # group nexthops are shown with -0 option - output = check_output('ip -0 nexthop list id 21') - print(output) - self.assertRegex(output, r'id 21 group (1,3/20|20/1,3)') + if first: + output = check_output('ip -0 nexthop list id 21') + print(output) + self.assertRegex(output, r'id 21 group (1,3/20|20/1,3)') + else: + output = check_output('ip -0 nexthop list id 20') + print(output) + self.assertRegex(output, r'id 20 group (5,3/21|21/5,3)') output = check_output('ip route show dev veth99 10.10.10.10') print(output) - self.assertEqual('10.10.10.10 nhid 1 via 192.168.5.1 proto static', output) + if first: + self.assertEqual('10.10.10.10 nhid 1 via 192.168.5.1 proto static', output) + else: + self.assertEqual('10.10.10.10 nhid 6 via 192.168.5.1 proto static', output) output = check_output('ip route show dev veth99 10.10.10.11') print(output) - self.assertEqual('10.10.10.11 nhid 2 via inet6 2001:1234:5:8f63::2 proto static', output) + if first: + self.assertEqual('10.10.10.11 nhid 2 via inet6 2001:1234:5:8f63::2 proto static', output) + else: + self.assertEqual('10.10.10.11 nhid 7 via inet6 2001:1234:5:8f63::2 proto static', output) output = check_output('ip route show dev veth99 10.10.10.12') print(output) - self.assertEqual('10.10.10.12 nhid 5 via 192.168.10.1 proto static onlink', output) + if first: + self.assertEqual('10.10.10.12 nhid 5 via 192.168.10.1 proto static onlink', output) + else: + self.assertEqual('10.10.10.12 nhid 5 via 192.168.5.3 proto static', output) output = check_output('ip -6 route show dev veth99 2001:1234:5:8f62::1') print(output) - self.assertEqual('2001:1234:5:8f62::1 nhid 2 via 2001:1234:5:8f63::2 proto static metric 1024 pref medium', output) + if first: + self.assertEqual('2001:1234:5:8f62::1 nhid 2 via 2001:1234:5:8f63::2 proto static metric 1024 pref medium', output) + else: + self.assertEqual('2001:1234:5:8f62::1 nhid 7 via 2001:1234:5:8f63::2 proto static metric 1024 pref medium', output) output = check_output('ip route show 10.10.10.13') print(output) - self.assertEqual('blackhole 10.10.10.13 nhid 6 dev lo proto static', output) + if first: + self.assertEqual('blackhole 10.10.10.13 nhid 6 dev lo proto static', output) + else: + self.assertEqual('blackhole 10.10.10.13 nhid 1 dev lo proto static', output) output = check_output('ip -6 route show 2001:1234:5:8f62::2') print(output) - self.assertEqual('blackhole 2001:1234:5:8f62::2 nhid 7 dev lo proto static metric 1024 pref medium', output) + if first: + self.assertEqual('blackhole 2001:1234:5:8f62::2 nhid 7 dev lo proto static metric 1024 pref medium', output) + else: + self.assertEqual('blackhole 2001:1234:5:8f62::2 nhid 2 dev lo proto static metric 1024 pref medium', output) output = check_output('ip route show 10.10.10.14') print(output) - self.assertIn('10.10.10.14 nhid 21 proto static', output) + if first: + self.assertIn('10.10.10.14 nhid 21 proto static', output) + self.assertIn('nexthop via 192.168.5.1 dev veth99 weight 3', output) + else: + self.assertIn('10.10.10.14 nhid 20 proto static', output) + self.assertIn('nexthop via 192.168.5.3 dev veth99 weight 3', output) self.assertIn('nexthop via 192.168.20.1 dev dummy98 weight 1', output) - self.assertIn('nexthop via 192.168.5.1 dev veth99 weight 3', output) output = check_output(*networkctl_cmd, '--json=short', 'status', env=env) check_json(output) @@ -3929,13 +3971,18 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities): 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') + copy_network_unit('25-nexthop-1.network', '25-veth.netdev', '25-veth-peer.network', + '12-dummy.netdev', '25-nexthop-dummy-1.network') start_networkd() - self.check_nexthop(manage_foreign_nexthops) + self.check_nexthop(manage_foreign_nexthops, first=True) + + remove_network_unit('25-nexthop-1.network', '25-nexthop-dummy-1.network') + copy_network_unit('25-nexthop-2.network', '25-nexthop-dummy-2.network') + networkctl_reload() + self.check_nexthop(manage_foreign_nexthops, first=False) - remove_network_unit('25-nexthop.network') + remove_network_unit('25-nexthop-2.network') copy_network_unit('25-nexthop-nothing.network') networkctl_reload() self.wait_online(['veth99:routable', 'veth-peer:routable']) @@ -3947,12 +3994,11 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities): print(output) self.assertEqual(output, '') - remove_network_unit('25-nexthop-nothing.network') - copy_network_unit('25-nexthop.network') - networkctl_reconfigure('dummy98') + remove_network_unit('25-nexthop-nothing.network', '25-nexthop-dummy-2.network') + copy_network_unit('25-nexthop-1.network', '25-nexthop-dummy-1.network') networkctl_reload() - self.check_nexthop(manage_foreign_nexthops) + self.check_nexthop(manage_foreign_nexthops, first=True) remove_link('veth99') time.sleep(2) |