File 0001-tests-Add-offline-and-online-filesystem-grow-tests.patch of Package udisks2

From c73288f465107567d91be2658a68c61e5f3f5a16 Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek@redhat.com>
Date: Tue, 22 Aug 2023 14:19:05 +0200
Subject: [PATCH] tests: Add offline and online filesystem grow tests

---
 src/tests/dbus-tests/test_80_filesystem.py | 81 +++++++++++++++++++++-
 1 file changed, 80 insertions(+), 1 deletion(-)

diff --git a/src/tests/dbus-tests/test_80_filesystem.py b/src/tests/dbus-tests/test_80_filesystem.py
index 59946720..87d63922 100644
--- a/src/tests/dbus-tests/test_80_filesystem.py
+++ b/src/tests/dbus-tests/test_80_filesystem.py
@@ -314,7 +314,7 @@ class UdisksFSTestCase(udiskstestcase.UdisksTestCase):
           rpr, _ = manager.CanRepair(self._fs_signature)
         except:
           rpr = chk = rep = False
-        if not (rpr and chk and rep) or mode & (1 << 1) == 0:
+        if not (rpr and chk and rep) or mode & BlockDev.FSResizeFlags.OFFLINE_SHRINK == 0:
             self.skipTest('Cannot check, offline-shrink and repair %s filesystem' % self._fs_signature)
 
         disk = self.get_object('/block_devices/' + os.path.basename(self.vdevs[0]))
@@ -344,6 +344,85 @@ class UdisksFSTestCase(udiskstestcase.UdisksTestCase):
         self.assertTrue(block_fs.Check(self.no_options, dbus_interface=self.iface_prefix + '.Filesystem'))
         self.get_property(block_fs, '.Filesystem', 'Size').assertAlmostEqual(size // 2, delta=1024**2)
 
+    def _test_grow(self, online):
+        TMP_SIZE_1 = 500 * 1024**2
+        TMP_SIZE_2 = 2 * TMP_SIZE_1
+
+        self._check_can_create()
+
+        if not self._can_mount:
+            self.skipTest('Cannot mount %s filesystem' % self._fs_signature)
+
+        if not self._can_query_size:
+            self.skipTest('Cannot determine size of %s filesystem' % self._fs_signature)
+
+        manager = self.get_interface(self.get_object('/Manager'), '.Manager')
+        try:
+            res, mode, _ = manager.CanResize(self._fs_signature)
+        except:
+            res = False
+            mode = 0
+        if not res:
+            self.skipTest('Cannot resize %s filesystem' % self._fs_signature)
+        if online and mode & BlockDev.FSResizeFlags.ONLINE_GROW == 0:
+            self.skipTest('Cannot online-grow %s filesystem' % self._fs_signature)
+        if not online and mode & BlockDev.FSResizeFlags.OFFLINE_GROW == 0:
+            self.skipTest('Cannot offline-grow %s filesystem' % self._fs_signature)
+
+        with tempfile.NamedTemporaryFile(prefix="udisks_test", delete=True, mode='w+b') as temp:
+            temp.truncate(TMP_SIZE_1)
+            loop_dev_obj_path = manager.LoopSetup(temp.fileno(), self.no_options)
+            loop_dev_obj = self.get_object(loop_dev_obj_path)
+            _, loop_dev = loop_dev_obj_path.rsplit("/", 1)
+            self.addCleanup(self.run_command, 'losetup --detach /dev/%s' % loop_dev)
+
+            # check the initial size
+            bsize = self.get_property(loop_dev_obj, '.Block', 'Size')
+            bsize.assertEqual(TMP_SIZE_1)
+
+            # create filesystem
+            loop_dev_obj.Format(self._fs_signature, self.no_options, dbus_interface=self.iface_prefix + '.Block')
+            fssize = self.get_property(loop_dev_obj, '.Filesystem', 'Size')
+            fssize.assertAlmostEqual(TMP_SIZE_1, delta=1024**2)
+
+            # not mounted
+            mounts = self.get_property(loop_dev_obj, '.Filesystem', 'MountPoints')
+            mounts.assertLen(0)
+
+            # mount it
+            if online:
+                d = dbus.Dictionary(signature='sv')
+                if self._fs_name:
+                    d['fstype'] = self._fs_name
+                mnt_path = loop_dev_obj.Mount(d, dbus_interface=self.iface_prefix + '.Filesystem')
+                self.addCleanup(self.try_unmount, mnt_path)
+                self.addCleanup(self.try_unmount, '/dev/%s' % loop_dev)
+
+            # resize the loop device
+            temp.truncate(TMP_SIZE_2)
+            self.run_command('losetup -c /dev/%s' % loop_dev)
+            time.sleep(2)
+            bsize = self.get_property(loop_dev_obj, '.Block', 'Size')
+            bsize.assertEqual(TMP_SIZE_2)
+            fssize = self.get_property(loop_dev_obj, '.Filesystem', 'Size')
+            fssize.assertAlmostEqual(TMP_SIZE_1, delta=1024**2)
+
+            # perform the grow
+            loop_dev_obj.Resize(dbus.UInt64(TMP_SIZE_2), self.no_options, dbus_interface=self.iface_prefix + '.Filesystem')
+            fssize = self.get_property(loop_dev_obj, '.Filesystem', 'Size')
+            fssize.assertAlmostEqual(TMP_SIZE_2, delta=1024**2)
+
+            # unmount
+            if online:
+                loop_dev_obj.Unmount(self.no_options, dbus_interface=self.iface_prefix + '.Filesystem')
+                self.assertFalse(os.path.ismount(mnt_path))
+
+    def test_online_grow(self):
+        self._test_grow(True)
+
+    def test_offline_grow(self):
+        self._test_grow(True)
+
     def test_size(self):
         self._check_can_create()
 
-- 
2.42.0

openSUSE Build Service is sponsored by