]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test-network: add testcase for overriding Address.RouteMetric= 28573/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 9 Jul 2023 00:54:25 +0000 (09:54 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 30 Jul 2023 17:31:17 +0000 (02:31 +0900)
For issue #25843.

test/test-network/conf/25-address-static.network
test/test-network/conf/25-address-static.network.d/10-many-address.conf [new file with mode: 0644]
test/test-network/conf/25-address-static.network.d/10-override-route-metric.conf [new file with mode: 0644]
test/test-network/systemd-networkd-tests.py

index 6d2baa3972485028083c739fd33ba5d1334510c2..2a96491b52f8dc5ccebf100768aadf63ea1b853b 100644 (file)
@@ -55,6 +55,10 @@ Address=2001:db8:0:f102::16/64
 Address=2001:db8:0:f103::20/128
 Peer=2001:db8:0:f103::10/128
 
+[Address]
+Address=2001:db8:0:f104::16/64
+RouteMetric=128
+
 [Address]
 Address=::/64
 
@@ -105,263 +109,6 @@ RouteMetric=128
 Address=10.9.0.1/16
 RouteMetric=hoge
 
-# test for ENOBUFS issue #17012
-[Network]
-Address=10.3.3.1/16
-Address=10.3.3.2/16
-Address=10.3.3.3/16
-Address=10.3.3.4/16
-Address=10.3.3.5/16
-Address=10.3.3.6/16
-Address=10.3.3.7/16
-Address=10.3.3.8/16
-Address=10.3.3.9/16
-Address=10.3.3.10/16
-Address=10.3.3.11/16
-Address=10.3.3.12/16
-Address=10.3.3.13/16
-Address=10.3.3.14/16
-Address=10.3.3.15/16
-Address=10.3.3.16/16
-Address=10.3.3.17/16
-Address=10.3.3.18/16
-Address=10.3.3.19/16
-Address=10.3.3.20/16
-Address=10.3.3.21/16
-Address=10.3.3.22/16
-Address=10.3.3.23/16
-Address=10.3.3.24/16
-Address=10.3.3.25/16
-Address=10.3.3.26/16
-Address=10.3.3.27/16
-Address=10.3.3.28/16
-Address=10.3.3.29/16
-Address=10.3.3.30/16
-Address=10.3.3.31/16
-Address=10.3.3.32/16
-Address=10.3.3.33/16
-Address=10.3.3.34/16
-Address=10.3.3.35/16
-Address=10.3.3.36/16
-Address=10.3.3.37/16
-Address=10.3.3.38/16
-Address=10.3.3.39/16
-Address=10.3.3.40/16
-Address=10.3.3.41/16
-Address=10.3.3.42/16
-Address=10.3.3.43/16
-Address=10.3.3.44/16
-Address=10.3.3.45/16
-Address=10.3.3.46/16
-Address=10.3.3.47/16
-Address=10.3.3.48/16
-Address=10.3.3.49/16
-Address=10.3.3.50/16
-Address=10.3.3.51/16
-Address=10.3.3.52/16
-Address=10.3.3.53/16
-Address=10.3.3.54/16
-Address=10.3.3.55/16
-Address=10.3.3.56/16
-Address=10.3.3.57/16
-Address=10.3.3.58/16
-Address=10.3.3.59/16
-Address=10.3.3.60/16
-Address=10.3.3.61/16
-Address=10.3.3.62/16
-Address=10.3.3.63/16
-Address=10.3.3.64/16
-Address=10.3.3.65/16
-Address=10.3.3.66/16
-Address=10.3.3.67/16
-Address=10.3.3.68/16
-Address=10.3.3.69/16
-Address=10.3.3.70/16
-Address=10.3.3.71/16
-Address=10.3.3.72/16
-Address=10.3.3.73/16
-Address=10.3.3.74/16
-Address=10.3.3.75/16
-Address=10.3.3.76/16
-Address=10.3.3.77/16
-Address=10.3.3.78/16
-Address=10.3.3.79/16
-Address=10.3.3.80/16
-Address=10.3.3.81/16
-Address=10.3.3.82/16
-Address=10.3.3.83/16
-Address=10.3.3.84/16
-Address=10.3.3.85/16
-Address=10.3.3.86/16
-Address=10.3.3.87/16
-Address=10.3.3.88/16
-Address=10.3.3.89/16
-Address=10.3.3.90/16
-Address=10.3.3.91/16
-Address=10.3.3.92/16
-Address=10.3.3.93/16
-Address=10.3.3.94/16
-Address=10.3.3.95/16
-Address=10.3.3.96/16
-Address=10.3.3.97/16
-Address=10.3.3.98/16
-Address=10.3.3.99/16
-Address=10.3.3.100/16
-Address=10.3.3.101/16
-Address=10.3.3.102/16
-Address=10.3.3.103/16
-Address=10.3.3.104/16
-Address=10.3.3.105/16
-Address=10.3.3.106/16
-Address=10.3.3.107/16
-Address=10.3.3.108/16
-Address=10.3.3.109/16
-Address=10.3.3.110/16
-Address=10.3.3.111/16
-Address=10.3.3.112/16
-Address=10.3.3.113/16
-Address=10.3.3.114/16
-Address=10.3.3.115/16
-Address=10.3.3.116/16
-Address=10.3.3.117/16
-Address=10.3.3.118/16
-Address=10.3.3.119/16
-Address=10.3.3.120/16
-Address=10.3.3.121/16
-Address=10.3.3.122/16
-Address=10.3.3.123/16
-Address=10.3.3.124/16
-Address=10.3.3.125/16
-Address=10.3.3.126/16
-Address=10.3.3.127/16
-Address=10.3.3.128/16
-Address=10.3.3.129/16
-Address=10.3.3.130/16
-Address=10.3.3.131/16
-Address=10.3.3.132/16
-Address=10.3.3.133/16
-Address=10.3.3.134/16
-Address=10.3.3.135/16
-Address=10.3.3.136/16
-Address=10.3.3.137/16
-Address=10.3.3.138/16
-Address=10.3.3.139/16
-Address=10.3.3.140/16
-Address=10.3.3.141/16
-Address=10.3.3.142/16
-Address=10.3.3.143/16
-Address=10.3.3.144/16
-Address=10.3.3.145/16
-Address=10.3.3.146/16
-Address=10.3.3.147/16
-Address=10.3.3.148/16
-Address=10.3.3.149/16
-Address=10.3.3.150/16
-Address=10.3.3.151/16
-Address=10.3.3.152/16
-Address=10.3.3.153/16
-Address=10.3.3.154/16
-Address=10.3.3.155/16
-Address=10.3.3.156/16
-Address=10.3.3.157/16
-Address=10.3.3.158/16
-Address=10.3.3.159/16
-Address=10.3.3.160/16
-Address=10.3.3.161/16
-Address=10.3.3.162/16
-Address=10.3.3.163/16
-Address=10.3.3.164/16
-Address=10.3.3.165/16
-Address=10.3.3.166/16
-Address=10.3.3.167/16
-Address=10.3.3.168/16
-Address=10.3.3.169/16
-Address=10.3.3.170/16
-Address=10.3.3.171/16
-Address=10.3.3.172/16
-Address=10.3.3.173/16
-Address=10.3.3.174/16
-Address=10.3.3.175/16
-Address=10.3.3.176/16
-Address=10.3.3.177/16
-Address=10.3.3.178/16
-Address=10.3.3.179/16
-Address=10.3.3.180/16
-Address=10.3.3.181/16
-Address=10.3.3.182/16
-Address=10.3.3.183/16
-Address=10.3.3.184/16
-Address=10.3.3.185/16
-Address=10.3.3.186/16
-Address=10.3.3.187/16
-Address=10.3.3.188/16
-Address=10.3.3.189/16
-Address=10.3.3.190/16
-Address=10.3.3.191/16
-Address=10.3.3.192/16
-Address=10.3.3.193/16
-Address=10.3.3.194/16
-Address=10.3.3.195/16
-Address=10.3.3.196/16
-Address=10.3.3.197/16
-Address=10.3.3.198/16
-Address=10.3.3.199/16
-Address=10.3.3.200/16
-Address=10.3.3.201/16
-Address=10.3.3.202/16
-Address=10.3.3.203/16
-Address=10.3.3.204/16
-Address=10.3.3.205/16
-Address=10.3.3.206/16
-Address=10.3.3.207/16
-Address=10.3.3.208/16
-Address=10.3.3.209/16
-Address=10.3.3.210/16
-Address=10.3.3.211/16
-Address=10.3.3.212/16
-Address=10.3.3.213/16
-Address=10.3.3.214/16
-Address=10.3.3.215/16
-Address=10.3.3.216/16
-Address=10.3.3.217/16
-Address=10.3.3.218/16
-Address=10.3.3.219/16
-Address=10.3.3.220/16
-Address=10.3.3.221/16
-Address=10.3.3.222/16
-Address=10.3.3.223/16
-Address=10.3.3.224/16
-Address=10.3.3.225/16
-Address=10.3.3.226/16
-Address=10.3.3.227/16
-Address=10.3.3.228/16
-Address=10.3.3.229/16
-Address=10.3.3.230/16
-Address=10.3.3.231/16
-Address=10.3.3.232/16
-Address=10.3.3.233/16
-Address=10.3.3.234/16
-Address=10.3.3.235/16
-Address=10.3.3.236/16
-Address=10.3.3.237/16
-Address=10.3.3.238/16
-Address=10.3.3.239/16
-Address=10.3.3.240/16
-Address=10.3.3.241/16
-Address=10.3.3.242/16
-Address=10.3.3.243/16
-Address=10.3.3.244/16
-Address=10.3.3.245/16
-Address=10.3.3.246/16
-Address=10.3.3.247/16
-Address=10.3.3.248/16
-Address=10.3.3.249/16
-Address=10.3.3.250/16
-Address=10.3.3.251/16
-Address=10.3.3.252/16
-Address=10.3.3.253/16
-Address=10.3.3.254/16
-
 [Address]
 Address=10.4.3.2/24
 # just a random label which should exist
diff --git a/test/test-network/conf/25-address-static.network.d/10-many-address.conf b/test/test-network/conf/25-address-static.network.d/10-many-address.conf
new file mode 100644 (file)
index 0000000..73c64c6
--- /dev/null
@@ -0,0 +1,258 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+[Network]
+# test for ENOBUFS issue #17012
+Address=10.3.3.1/16
+Address=10.3.3.2/16
+Address=10.3.3.3/16
+Address=10.3.3.4/16
+Address=10.3.3.5/16
+Address=10.3.3.6/16
+Address=10.3.3.7/16
+Address=10.3.3.8/16
+Address=10.3.3.9/16
+Address=10.3.3.10/16
+Address=10.3.3.11/16
+Address=10.3.3.12/16
+Address=10.3.3.13/16
+Address=10.3.3.14/16
+Address=10.3.3.15/16
+Address=10.3.3.16/16
+Address=10.3.3.17/16
+Address=10.3.3.18/16
+Address=10.3.3.19/16
+Address=10.3.3.20/16
+Address=10.3.3.21/16
+Address=10.3.3.22/16
+Address=10.3.3.23/16
+Address=10.3.3.24/16
+Address=10.3.3.25/16
+Address=10.3.3.26/16
+Address=10.3.3.27/16
+Address=10.3.3.28/16
+Address=10.3.3.29/16
+Address=10.3.3.30/16
+Address=10.3.3.31/16
+Address=10.3.3.32/16
+Address=10.3.3.33/16
+Address=10.3.3.34/16
+Address=10.3.3.35/16
+Address=10.3.3.36/16
+Address=10.3.3.37/16
+Address=10.3.3.38/16
+Address=10.3.3.39/16
+Address=10.3.3.40/16
+Address=10.3.3.41/16
+Address=10.3.3.42/16
+Address=10.3.3.43/16
+Address=10.3.3.44/16
+Address=10.3.3.45/16
+Address=10.3.3.46/16
+Address=10.3.3.47/16
+Address=10.3.3.48/16
+Address=10.3.3.49/16
+Address=10.3.3.50/16
+Address=10.3.3.51/16
+Address=10.3.3.52/16
+Address=10.3.3.53/16
+Address=10.3.3.54/16
+Address=10.3.3.55/16
+Address=10.3.3.56/16
+Address=10.3.3.57/16
+Address=10.3.3.58/16
+Address=10.3.3.59/16
+Address=10.3.3.60/16
+Address=10.3.3.61/16
+Address=10.3.3.62/16
+Address=10.3.3.63/16
+Address=10.3.3.64/16
+Address=10.3.3.65/16
+Address=10.3.3.66/16
+Address=10.3.3.67/16
+Address=10.3.3.68/16
+Address=10.3.3.69/16
+Address=10.3.3.70/16
+Address=10.3.3.71/16
+Address=10.3.3.72/16
+Address=10.3.3.73/16
+Address=10.3.3.74/16
+Address=10.3.3.75/16
+Address=10.3.3.76/16
+Address=10.3.3.77/16
+Address=10.3.3.78/16
+Address=10.3.3.79/16
+Address=10.3.3.80/16
+Address=10.3.3.81/16
+Address=10.3.3.82/16
+Address=10.3.3.83/16
+Address=10.3.3.84/16
+Address=10.3.3.85/16
+Address=10.3.3.86/16
+Address=10.3.3.87/16
+Address=10.3.3.88/16
+Address=10.3.3.89/16
+Address=10.3.3.90/16
+Address=10.3.3.91/16
+Address=10.3.3.92/16
+Address=10.3.3.93/16
+Address=10.3.3.94/16
+Address=10.3.3.95/16
+Address=10.3.3.96/16
+Address=10.3.3.97/16
+Address=10.3.3.98/16
+Address=10.3.3.99/16
+Address=10.3.3.100/16
+Address=10.3.3.101/16
+Address=10.3.3.102/16
+Address=10.3.3.103/16
+Address=10.3.3.104/16
+Address=10.3.3.105/16
+Address=10.3.3.106/16
+Address=10.3.3.107/16
+Address=10.3.3.108/16
+Address=10.3.3.109/16
+Address=10.3.3.110/16
+Address=10.3.3.111/16
+Address=10.3.3.112/16
+Address=10.3.3.113/16
+Address=10.3.3.114/16
+Address=10.3.3.115/16
+Address=10.3.3.116/16
+Address=10.3.3.117/16
+Address=10.3.3.118/16
+Address=10.3.3.119/16
+Address=10.3.3.120/16
+Address=10.3.3.121/16
+Address=10.3.3.122/16
+Address=10.3.3.123/16
+Address=10.3.3.124/16
+Address=10.3.3.125/16
+Address=10.3.3.126/16
+Address=10.3.3.127/16
+Address=10.3.3.128/16
+Address=10.3.3.129/16
+Address=10.3.3.130/16
+Address=10.3.3.131/16
+Address=10.3.3.132/16
+Address=10.3.3.133/16
+Address=10.3.3.134/16
+Address=10.3.3.135/16
+Address=10.3.3.136/16
+Address=10.3.3.137/16
+Address=10.3.3.138/16
+Address=10.3.3.139/16
+Address=10.3.3.140/16
+Address=10.3.3.141/16
+Address=10.3.3.142/16
+Address=10.3.3.143/16
+Address=10.3.3.144/16
+Address=10.3.3.145/16
+Address=10.3.3.146/16
+Address=10.3.3.147/16
+Address=10.3.3.148/16
+Address=10.3.3.149/16
+Address=10.3.3.150/16
+Address=10.3.3.151/16
+Address=10.3.3.152/16
+Address=10.3.3.153/16
+Address=10.3.3.154/16
+Address=10.3.3.155/16
+Address=10.3.3.156/16
+Address=10.3.3.157/16
+Address=10.3.3.158/16
+Address=10.3.3.159/16
+Address=10.3.3.160/16
+Address=10.3.3.161/16
+Address=10.3.3.162/16
+Address=10.3.3.163/16
+Address=10.3.3.164/16
+Address=10.3.3.165/16
+Address=10.3.3.166/16
+Address=10.3.3.167/16
+Address=10.3.3.168/16
+Address=10.3.3.169/16
+Address=10.3.3.170/16
+Address=10.3.3.171/16
+Address=10.3.3.172/16
+Address=10.3.3.173/16
+Address=10.3.3.174/16
+Address=10.3.3.175/16
+Address=10.3.3.176/16
+Address=10.3.3.177/16
+Address=10.3.3.178/16
+Address=10.3.3.179/16
+Address=10.3.3.180/16
+Address=10.3.3.181/16
+Address=10.3.3.182/16
+Address=10.3.3.183/16
+Address=10.3.3.184/16
+Address=10.3.3.185/16
+Address=10.3.3.186/16
+Address=10.3.3.187/16
+Address=10.3.3.188/16
+Address=10.3.3.189/16
+Address=10.3.3.190/16
+Address=10.3.3.191/16
+Address=10.3.3.192/16
+Address=10.3.3.193/16
+Address=10.3.3.194/16
+Address=10.3.3.195/16
+Address=10.3.3.196/16
+Address=10.3.3.197/16
+Address=10.3.3.198/16
+Address=10.3.3.199/16
+Address=10.3.3.200/16
+Address=10.3.3.201/16
+Address=10.3.3.202/16
+Address=10.3.3.203/16
+Address=10.3.3.204/16
+Address=10.3.3.205/16
+Address=10.3.3.206/16
+Address=10.3.3.207/16
+Address=10.3.3.208/16
+Address=10.3.3.209/16
+Address=10.3.3.210/16
+Address=10.3.3.211/16
+Address=10.3.3.212/16
+Address=10.3.3.213/16
+Address=10.3.3.214/16
+Address=10.3.3.215/16
+Address=10.3.3.216/16
+Address=10.3.3.217/16
+Address=10.3.3.218/16
+Address=10.3.3.219/16
+Address=10.3.3.220/16
+Address=10.3.3.221/16
+Address=10.3.3.222/16
+Address=10.3.3.223/16
+Address=10.3.3.224/16
+Address=10.3.3.225/16
+Address=10.3.3.226/16
+Address=10.3.3.227/16
+Address=10.3.3.228/16
+Address=10.3.3.229/16
+Address=10.3.3.230/16
+Address=10.3.3.231/16
+Address=10.3.3.232/16
+Address=10.3.3.233/16
+Address=10.3.3.234/16
+Address=10.3.3.235/16
+Address=10.3.3.236/16
+Address=10.3.3.237/16
+Address=10.3.3.238/16
+Address=10.3.3.239/16
+Address=10.3.3.240/16
+Address=10.3.3.241/16
+Address=10.3.3.242/16
+Address=10.3.3.243/16
+Address=10.3.3.244/16
+Address=10.3.3.245/16
+Address=10.3.3.246/16
+Address=10.3.3.247/16
+Address=10.3.3.248/16
+Address=10.3.3.249/16
+Address=10.3.3.250/16
+Address=10.3.3.251/16
+Address=10.3.3.252/16
+Address=10.3.3.253/16
+Address=10.3.3.254/16
diff --git a/test/test-network/conf/25-address-static.network.d/10-override-route-metric.conf b/test/test-network/conf/25-address-static.network.d/10-override-route-metric.conf
new file mode 100644 (file)
index 0000000..da5bec2
--- /dev/null
@@ -0,0 +1,9 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+[Address]
+Address=10.9.0.1/16
+RouteMetric=256
+
+[Address]
+Address=2001:db8:0:f104::16/64
+RouteMetric=256
index c1a017d16b01b47d23431865746b09585b49e33f..7c13af58e83aa93ac14597ab092a3c95f69a6d56 100755 (executable)
@@ -2329,20 +2329,8 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
     def tearDown(self):
         tear_down_common()
 
-    def test_address_static(self):
-        # test for #22515. The address will be removed and replaced with /64 prefix.
-        check_output('ip link add dummy98 type dummy')
-        check_output('ip link set dev dummy98 up')
-        check_output('ip -6 address add 2001:db8:0:f101::15/128 dev dummy98')
-        self.wait_address('dummy98', '2001:db8:0:f101::15/128', ipv='-6')
-        check_output('ip -4 address add 10.3.2.3/16 brd 10.3.255.250 scope global label dummy98:hoge dev dummy98')
-        self.wait_address('dummy98', '10.3.2.3/16 brd 10.3.255.250', ipv='-4')
-
-        copy_network_unit('25-address-static.network', '12-dummy.netdev')
-        start_networkd()
-
-        self.wait_online(['dummy98:routable'])
-
+    def verify_address_static(self, route_metric):
+        # IPv4 addresses
         output = check_output('ip -4 address show dev dummy98')
         print(output)
         self.assertIn('inet 10.1.2.3/16 brd 10.1.255.255 scope global dummy98', output)
@@ -2351,16 +2339,13 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
         self.assertIn('inet 10.7.8.9/16 brd 10.7.255.255 scope link deprecated dummy98', output)
         self.assertIn('inet 10.8.8.1/16 scope global dummy98', output)
         self.assertIn('inet 10.8.8.2/16 brd 10.8.8.128 scope global secondary dummy98', output)
-        self.assertRegex(output, 'inet 10.9.0.1/16 (metric 128 |)brd 10.9.255.255 scope global dummy98')
-
-        # test for ENOBUFS issue #17012
-        for i in range(1, 254):
-            self.assertIn(f'inet 10.3.3.{i}/16 brd 10.3.255.255', output)
+        self.assertRegex(output, rf'inet 10.9.0.1/16 (metric {route_metric} |)brd 10.9.255.255 scope global dummy98')
 
         # invalid sections
         self.assertNotIn('10.10.0.1/16', output)
         self.assertNotIn('10.10.0.2/16', output)
 
+        # address labels
         output = check_output('ip -4 address show dev dummy98 label 32')
         self.assertIn('inet 10.3.2.3/16 brd 10.3.255.255 scope global 32', output)
 
@@ -2373,10 +2358,15 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
         output = check_output('ip -4 address show dev dummy98 label 35')
         self.assertRegex(output, r'inet 172.[0-9]*.0.1/16 brd 172.[0-9]*.255.255 scope global 35')
 
-        output = check_output('ip -4 route show dev dummy98')
+        # check metric of prefix route
+        output = check_output('ip -4 route show dev dummy98 10.9.0.0/16')
+        print(output)
+        self.assertIn(f'10.9.0.0/16 proto kernel scope link src 10.9.0.1 metric {route_metric}', output)
+        output = check_output('ip -6 route show dev dummy98 2001:db8:0:f104::/64')
         print(output)
-        self.assertIn('10.9.0.0/16 proto kernel scope link src 10.9.0.1 metric 128', output)
+        self.assertIn(f'2001:db8:0:f104::/64 proto kernel metric {route_metric}', output)
 
+        # IPv6 addresses
         output = check_output('ip -6 address show dev dummy98')
         print(output)
         self.assertIn('inet6 2001:db8:0:f101::15/64 scope global', output)
@@ -2384,11 +2374,40 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
         self.assertIn('inet6 2001:db8:0:f102::15/64 scope global', output)
         self.assertIn('inet6 2001:db8:0:f102::16/64 scope global', output)
         self.assertIn('inet6 2001:db8:0:f103::20 peer 2001:db8:0:f103::10/128 scope global', output)
+        self.assertRegex(output, rf'inet6 2001:db8:0:f104::16/64 (metric {route_metric} |)scope global')
         self.assertIn('inet6 2001:db8:1:f101::1/64 scope global deprecated', output)
         self.assertRegex(output, r'inet6 fd[0-9a-f:]*1/64 scope global')
 
+        # netlabel
         self.check_netlabel('dummy98', r'10\.4\.3\.0/24')
 
+        output = check_output(*networkctl_cmd, '--json=short', 'status', env=env)
+        check_json(output)
+
+    def test_address_static(self):
+        # test for #22515. The address will be removed and replaced with /64 prefix.
+        check_output('ip link add dummy98 type dummy')
+        check_output('ip link set dev dummy98 up')
+        check_output('ip -6 address add 2001:db8:0:f101::15/128 dev dummy98')
+        self.wait_address('dummy98', '2001:db8:0:f101::15/128', ipv='-6')
+        check_output('ip -4 address add 10.3.2.3/16 brd 10.3.255.250 scope global label dummy98:hoge dev dummy98')
+        self.wait_address('dummy98', '10.3.2.3/16 brd 10.3.255.250', ipv='-4')
+
+        copy_network_unit('25-address-static.network', '12-dummy.netdev', copy_dropins=False)
+        start_networkd()
+
+        self.wait_online(['dummy98:routable'])
+        self.verify_address_static(route_metric=128)
+
+        copy_network_unit('25-address-static.network.d/10-override-route-metric.conf')
+        networkctl_reload()
+        self.wait_online(['dummy98:routable'])
+        self.verify_address_static(route_metric=256)
+
+        networkctl_reconfigure('dummy98')
+        self.wait_online(['dummy98:routable'])
+        self.verify_address_static(route_metric=256)
+
         # Tests for #20891.
         # 1. set preferred lifetime forever to drop the deprecated flag for testing #20891.
         check_output('ip address change 10.7.8.9/16 dev dummy98 preferred_lft forever')
@@ -2412,14 +2431,20 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
         print(output)
         self.assertIn('inet6 2001:db8:1:f101::1/64 scope global deprecated', output)
 
-        # test for ENOBUFS issue #17012
+        # test for ENOBUFS issue #17012 (with reload)
+        copy_network_unit('25-address-static.network.d/10-many-address.conf')
+        networkctl_reload()
+        self.wait_online(['dummy98:routable'])
         output = check_output('ip -4 address show dev dummy98')
         for i in range(1, 254):
             self.assertIn(f'inet 10.3.3.{i}/16 brd 10.3.255.255', output)
 
-        output = check_output(*networkctl_cmd, '--json=short', 'status', env=env)
-        check_json(output)
-
+        # (with reconfigure)
+        networkctl_reconfigure('dummy98')
+        self.wait_online(['dummy98:routable'])
+        output = check_output('ip -4 address show dev dummy98')
+        for i in range(1, 254):
+            self.assertIn(f'inet 10.3.3.{i}/16 brd 10.3.255.255', output)
 
     def test_address_null(self):
         copy_network_unit('25-address-null.network', '12-dummy.netdev')