diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-10-28 14:38:23 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-10-28 15:56:59 +0900 |
commit | bb80f633bfde9f7fed166c8d8d02a5b79fced9f5 (patch) | |
tree | 38caee1135d53e77090da76ed03eccc0e69f9ab5 /test | |
parent | 6f812d289946a3e0e386378263b40d09e125752e (diff) | |
download | systemd-bb80f633bfde9f7fed166c8d8d02a5b79fced9f5.tar.gz |
test-network: add testcase for router preference
Diffstat (limited to 'test')
-rw-r--r-- | test/test-network/conf/25-veth-bridge.network | 10 | ||||
-rw-r--r-- | test/test-network/conf/25-veth-client.netdev | 9 | ||||
-rw-r--r-- | test/test-network/conf/25-veth-client.network | 10 | ||||
-rw-r--r-- | test/test-network/conf/25-veth-router-high.netdev | 9 | ||||
-rw-r--r-- | test/test-network/conf/25-veth-router-high.network | 17 | ||||
-rw-r--r-- | test/test-network/conf/25-veth-router-low.netdev | 9 | ||||
-rw-r--r-- | test/test-network/conf/25-veth-router-low.network | 17 | ||||
-rwxr-xr-x | test/test-network/systemd-networkd-tests.py | 59 |
8 files changed, 140 insertions, 0 deletions
diff --git a/test/test-network/conf/25-veth-bridge.network b/test/test-network/conf/25-veth-bridge.network new file mode 100644 index 0000000000..b2f163412a --- /dev/null +++ b/test/test-network/conf/25-veth-bridge.network @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +[Match] +Name=client-p +Name=router-high-p +Name=router-low-p + +[Network] +Bridge=bridge99 +IPv6AcceptRA=no +IPv6SendRA=yes diff --git a/test/test-network/conf/25-veth-client.netdev b/test/test-network/conf/25-veth-client.netdev new file mode 100644 index 0000000000..511c1e59ce --- /dev/null +++ b/test/test-network/conf/25-veth-client.netdev @@ -0,0 +1,9 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +[NetDev] +Name=client +Kind=veth +MACAddress=12:34:56:78:9a:00 + +[Peer] +Name=client-p +MACAddress=12:34:56:78:9b:00 diff --git a/test/test-network/conf/25-veth-client.network b/test/test-network/conf/25-veth-client.network new file mode 100644 index 0000000000..152fb4d4c1 --- /dev/null +++ b/test/test-network/conf/25-veth-client.network @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +[Match] +Name=client + +[Network] +IPv6AcceptRA=yes + +[IPv6AcceptRA] +UseDNS=no +UseDomains=no diff --git a/test/test-network/conf/25-veth-router-high.netdev b/test/test-network/conf/25-veth-router-high.netdev new file mode 100644 index 0000000000..845b4a9ce1 --- /dev/null +++ b/test/test-network/conf/25-veth-router-high.netdev @@ -0,0 +1,9 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +[NetDev] +Name=router-high +Kind=veth +MACAddress=12:34:56:78:9a:99 + +[Peer] +Name=router-high-p +MACAddress=12:34:56:78:9b:99 diff --git a/test/test-network/conf/25-veth-router-high.network b/test/test-network/conf/25-veth-router-high.network new file mode 100644 index 0000000000..c6c2df231e --- /dev/null +++ b/test/test-network/conf/25-veth-router-high.network @@ -0,0 +1,17 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +[Match] +Name=router-high + +[Network] +IPv6AcceptRA=no +IPv6SendRA=yes + +[IPv6SendRA] +RouterPreference=high +EmitDNS=no +EmitDomains=no + +[IPv6Prefix] +Prefix=2002:da8:1:99::/64 +PreferredLifetimeSec=1000s +ValidLifetimeSec=2100s diff --git a/test/test-network/conf/25-veth-router-low.netdev b/test/test-network/conf/25-veth-router-low.netdev new file mode 100644 index 0000000000..2842f4f98a --- /dev/null +++ b/test/test-network/conf/25-veth-router-low.netdev @@ -0,0 +1,9 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +[NetDev] +Name=router-low +Kind=veth +MACAddress=12:34:56:78:9a:98 + +[Peer] +Name=router-low-p +MACAddress=12:34:56:78:9b:98 diff --git a/test/test-network/conf/25-veth-router-low.network b/test/test-network/conf/25-veth-router-low.network new file mode 100644 index 0000000000..d2abc1520e --- /dev/null +++ b/test/test-network/conf/25-veth-router-low.network @@ -0,0 +1,17 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +[Match] +Name=router-low + +[Network] +IPv6AcceptRA=no +IPv6SendRA=yes + +[IPv6SendRA] +RouterPreference=low +EmitDNS=no +EmitDomains=no + +[IPv6Prefix] +Prefix=2002:da8:1:98::/64 +PreferredLifetimeSec=1000s +ValidLifetimeSec=2100s diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 2f7614428c..64924a35aa 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -889,6 +889,16 @@ class Utilities(): self.assertNotRegex(output, address_regex) + def wait_route(self, link, route_regex, table='main', ipv='', timeout_sec=100): + for i in range(timeout_sec): + if i > 0: + time.sleep(1) + output = check_output(f'ip {ipv} route show dev {link} table {table}') + if re.search(route_regex, output): + break + + self.assertRegex(output, route_regex) + def check_netlabel(self, interface, address, label='system_u:object_r:root_t:s0'): if not shutil.which('selinuxenabled'): print(f'## Checking NetLabel skipped: selinuxenabled command not found.') @@ -4316,6 +4326,55 @@ class NetworkdRATests(unittest.TestCase, Utilities): self.assertIn('2002:da8:1:0:b47e:7975:fc7a:7d6e', output) self.assertIn('2002:da8:2:0:f689:561a:8eda:7443', output) + def test_router_preference(self): + copy_network_unit('25-veth-client.netdev', + '25-veth-router-high.netdev', + '25-veth-router-low.netdev', + '26-bridge.netdev', + '25-veth-bridge.network', + '25-veth-client.network', + '25-veth-router-high.network', + '25-veth-router-low.network', + '25-bridge99.network') + start_networkd() + self.wait_online(['client-p:enslaved', + 'router-high:degraded', 'router-high-p:enslaved', + 'router-low:degraded', 'router-low-p:enslaved', + 'bridge99:routable']) + + networkctl_reconfigure('client') + self.wait_online(['client:routable']) + + self.wait_address('client', '2002:da8:1:99:1034:56ff:fe78:9a00/64', ipv='-6', timeout_sec=10) + self.wait_address('client', '2002:da8:1:98:1034:56ff:fe78:9a00/64', ipv='-6', timeout_sec=10) + self.wait_route('client', 'default via fe80::1034:56ff:fe78:9a99 proto ra metric 512', ipv='-6', timeout_sec=10) + self.wait_route('client', 'default via fe80::1034:56ff:fe78:9a98 proto ra metric 2048', ipv='-6', timeout_sec=10) + + output = check_output('ip -6 route show dev client default via fe80::1034:56ff:fe78:9a99') + print(output) + self.assertIn('pref high', output) + output = check_output('ip -6 route show dev client default via fe80::1034:56ff:fe78:9a98') + print(output) + self.assertIn('pref low', output) + + with open(os.path.join(network_unit_dir, '25-veth-client.network'), mode='a', encoding='utf-8') as f: + f.write('\n[Link]\nMACAddress=12:34:56:78:9a:01\n[IPv6AcceptRA]\nRouteMetric=100:200:300\n') + + networkctl_reload() + self.wait_online(['client:routable']) + + self.wait_address('client', '2002:da8:1:99:1034:56ff:fe78:9a01/64', ipv='-6', timeout_sec=10) + self.wait_address('client', '2002:da8:1:98:1034:56ff:fe78:9a01/64', ipv='-6', timeout_sec=10) + self.wait_route('client', 'default via fe80::1034:56ff:fe78:9a99 proto ra metric 100', ipv='-6', timeout_sec=10) + self.wait_route('client', 'default via fe80::1034:56ff:fe78:9a98 proto ra metric 300', ipv='-6', timeout_sec=10) + + output = check_output('ip -6 route show dev client default via fe80::1034:56ff:fe78:9a99') + print(output) + self.assertIn('pref high', output) + output = check_output('ip -6 route show dev client default via fe80::1034:56ff:fe78:9a98') + print(output) + self.assertIn('pref low', output) + class NetworkdDHCPServerTests(unittest.TestCase, Utilities): def setUp(self): |