]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test-network: add tests to verify IPv6MTUBytes 13915/head
authorDan Streetman <ddstreet@canonical.com>
Wed, 30 Oct 2019 12:35:37 +0000 (08:35 -0400)
committerDan Streetman <ddstreet@canonical.com>
Thu, 5 Dec 2019 22:53:10 +0000 (17:53 -0500)
test/test-network/conf/12-dummy-mtu.link [new file with mode: 0644]
test/test-network/conf/12-dummy-mtu.netdev [new file with mode: 0644]
test/test-network/conf/12-dummy.network [new file with mode: 0644]
test/test-network/conf/12-dummy.network.d/ipv6-mtu-1400.conf [new file with mode: 0644]
test/test-network/conf/12-dummy.network.d/ipv6-mtu-1550.conf [new file with mode: 0644]
test/test-network/conf/12-dummy.network.d/mtu.conf [new file with mode: 0644]
test/test-network/systemd-networkd-tests.py

diff --git a/test/test-network/conf/12-dummy-mtu.link b/test/test-network/conf/12-dummy-mtu.link
new file mode 100644 (file)
index 0000000..cb7965c
--- /dev/null
@@ -0,0 +1,5 @@
+[Match]
+OriginalName=dummy98
+
+[Link]
+MTUBytes=1600
diff --git a/test/test-network/conf/12-dummy-mtu.netdev b/test/test-network/conf/12-dummy-mtu.netdev
new file mode 100644 (file)
index 0000000..c51d2a4
--- /dev/null
@@ -0,0 +1,4 @@
+[NetDev]
+Name=dummy98
+Kind=dummy
+MTUBytes=1600
diff --git a/test/test-network/conf/12-dummy.network b/test/test-network/conf/12-dummy.network
new file mode 100644 (file)
index 0000000..29ced8b
--- /dev/null
@@ -0,0 +1,7 @@
+[Match]
+Name=dummy98
+
+[Network]
+IPv6AcceptRA=no
+Address=10.1.2.3/16
+Address=2001:db8:0:f101::15/64
diff --git a/test/test-network/conf/12-dummy.network.d/ipv6-mtu-1400.conf b/test/test-network/conf/12-dummy.network.d/ipv6-mtu-1400.conf
new file mode 100644 (file)
index 0000000..7a2eb53
--- /dev/null
@@ -0,0 +1,2 @@
+[Network]
+IPv6MTUBytes=1400
diff --git a/test/test-network/conf/12-dummy.network.d/ipv6-mtu-1550.conf b/test/test-network/conf/12-dummy.network.d/ipv6-mtu-1550.conf
new file mode 100644 (file)
index 0000000..6a88073
--- /dev/null
@@ -0,0 +1,2 @@
+[Network]
+IPv6MTUBytes=1550
diff --git a/test/test-network/conf/12-dummy.network.d/mtu.conf b/test/test-network/conf/12-dummy.network.d/mtu.conf
new file mode 100644 (file)
index 0000000..6e7da63
--- /dev/null
@@ -0,0 +1,2 @@
+[Link]
+MTUBytes=1600
index e63cca50f2948dc744f5425b33be13fadea5753f..3b041f88cffd35cfc81af110d73e9ea260d95899 100755 (executable)
@@ -3297,6 +3297,101 @@ class NetworkdIPv6PrefixTests(unittest.TestCase, Utilities):
         print(output)
         self.assertRegex(output, '2001:db8:0:1::/64 proto ra')
 
+class NetworkdMTUTests(unittest.TestCase, Utilities):
+    links = ['dummy98']
+
+    units = [
+        '12-dummy.netdev',
+        '12-dummy-mtu.netdev',
+        '12-dummy-mtu.link',
+        '12-dummy.network',
+        ]
+
+    def setUp(self):
+        remove_links(self.links)
+        stop_networkd(show_logs=False)
+
+    def tearDown(self):
+        remove_log_file()
+        remove_links(self.links)
+        remove_unit_from_networkd_path(self.units)
+        stop_networkd(show_logs=True)
+
+    def check_mtu(self, mtu, ipv6_mtu=None, reset=True):
+        if not ipv6_mtu:
+            ipv6_mtu = mtu
+
+        # test normal start
+        start_networkd()
+        self.wait_online(['dummy98:routable'])
+        self.assertEqual(read_ipv6_sysctl_attr('dummy98', 'mtu'), ipv6_mtu)
+        self.assertEqual(read_link_attr('dummy98', 'mtu'), mtu)
+
+        # test normal restart
+        restart_networkd()
+        self.wait_online(['dummy98:routable'])
+        self.assertEqual(read_ipv6_sysctl_attr('dummy98', 'mtu'), ipv6_mtu)
+        self.assertEqual(read_link_attr('dummy98', 'mtu'), mtu)
+
+        if reset:
+            self.reset_check_mtu(mtu, ipv6_mtu)
+
+    def reset_check_mtu(self, mtu, ipv6_mtu=None):
+        ''' test setting mtu/ipv6_mtu with interface already up '''
+        stop_networkd()
+
+        # note - changing the device mtu resets the ipv6 mtu
+        run('ip link set up mtu 1501 dev dummy98')
+        run('ip link set up mtu 1500 dev dummy98')
+        self.assertEqual(read_link_attr('dummy98', 'mtu'), '1500')
+        self.assertEqual(read_ipv6_sysctl_attr('dummy98', 'mtu'), '1500')
+
+        self.check_mtu(mtu, ipv6_mtu, reset=False)
+
+    def test_mtu_network(self):
+        copy_unit_to_networkd_unit_path('12-dummy.netdev', '12-dummy.network.d/mtu.conf')
+        self.check_mtu('1600')
+
+    def test_mtu_netdev(self):
+        copy_unit_to_networkd_unit_path('12-dummy-mtu.netdev', '12-dummy.network', dropins=False)
+        # note - MTU set by .netdev happens ONLY at device creation!
+        self.check_mtu('1600', reset=False)
+
+    def test_mtu_link(self):
+        copy_unit_to_networkd_unit_path('12-dummy.netdev', '12-dummy-mtu.link', '12-dummy.network', dropins=False)
+        # must reload udev because it only picks up new files after 3 second delay
+        call('udevadm control --reload')
+        # note - MTU set by .link happens ONLY at udev processing of device 'add' uevent!
+        self.check_mtu('1600', reset=False)
+
+    def test_ipv6_mtu(self):
+        ''' set ipv6 mtu without setting device mtu '''
+        copy_unit_to_networkd_unit_path('12-dummy.netdev', '12-dummy.network.d/ipv6-mtu-1400.conf')
+        self.check_mtu('1500', '1400')
+
+    def test_ipv6_mtu_toolarge(self):
+        ''' try set ipv6 mtu over device mtu (it shouldn't work) '''
+        copy_unit_to_networkd_unit_path('12-dummy.netdev', '12-dummy.network.d/ipv6-mtu-1550.conf')
+        self.check_mtu('1500', '1500')
+
+    def test_mtu_network_ipv6_mtu(self):
+        ''' set ipv6 mtu and set device mtu via network file '''
+        copy_unit_to_networkd_unit_path('12-dummy.netdev', '12-dummy.network.d/mtu.conf', '12-dummy.network.d/ipv6-mtu-1550.conf')
+        self.check_mtu('1600', '1550')
+
+    def test_mtu_netdev_ipv6_mtu(self):
+        ''' set ipv6 mtu and set device mtu via netdev file '''
+        copy_unit_to_networkd_unit_path('12-dummy-mtu.netdev', '12-dummy.network.d/ipv6-mtu-1550.conf')
+        self.check_mtu('1600', '1550', reset=False)
+
+    def test_mtu_link_ipv6_mtu(self):
+        ''' set ipv6 mtu and set device mtu via link file '''
+        copy_unit_to_networkd_unit_path('12-dummy.netdev', '12-dummy-mtu.link', '12-dummy.network.d/ipv6-mtu-1550.conf')
+        # must reload udev because it only picks up new files after 3 second delay
+        call('udevadm control --reload')
+        self.check_mtu('1600', '1550', reset=False)
+
+
 if __name__ == '__main__':
     parser = argparse.ArgumentParser()
     parser.add_argument('--build-dir', help='Path to build dir', dest='build_dir')