[blivet:master 1/2] Further abstract loopbackedtestcase on block_size.

mulhern amulhern at redhat.com
Tue Sep 30 13:02:50 UTC 2014


Also, have deviceSpec contain a list of actual Sizes() instead of counts of
unchangeable size blocks and do the math to infer block size
and number of blocks to pass to makeLoopDev.

Change any overrides of deviceSpec in subclasses appropriately.

Signed-off-by: mulhern <amulhern at redhat.com>
---
 tests/devicelibs_test/btrfs_test.py              |  3 ++-
 tests/devicelibs_test/mdraid_interrogate_test.py |  5 +++--
 tests/devicelibs_test/mdraid_test.py             |  6 +++---
 tests/formats_test/fslabeling.py                 |  3 ++-
 tests/formats_test/selinux_test.py               |  3 ++-
 tests/loopbackedtestcase.py                      | 27 +++++++++++++++---------
 6 files changed, 29 insertions(+), 18 deletions(-)

diff --git a/tests/devicelibs_test/btrfs_test.py b/tests/devicelibs_test/btrfs_test.py
index dcf1bcd..91950d2 100755
--- a/tests/devicelibs_test/btrfs_test.py
+++ b/tests/devicelibs_test/btrfs_test.py
@@ -7,6 +7,7 @@ import unittest
 
 import blivet.devicelibs.btrfs as btrfs
 from blivet.errors import BTRFSError
+from blivet.size import Size
 
 from tests import loopbackedtestcase
 
@@ -164,7 +165,7 @@ class BTRFSAsRootTestCase2(BTRFSMountDevice):
 class BTRFSAsRootTestCase3(loopbackedtestcase.LoopBackedTestCase):
 
     def __init__(self, methodName='runTest'):
-        super(BTRFSAsRootTestCase3, self).__init__(methodName=methodName, deviceSpec=[8192])
+        super(BTRFSAsRootTestCase3, self).__init__(methodName=methodName, deviceSpec=[Size("8192 KiB")])
 
     def testSmallDevice(self):
         """ Creation of a smallish device will result in an error if the
diff --git a/tests/devicelibs_test/mdraid_interrogate_test.py b/tests/devicelibs_test/mdraid_interrogate_test.py
index 2178d79..034c929 100755
--- a/tests/devicelibs_test/mdraid_interrogate_test.py
+++ b/tests/devicelibs_test/mdraid_interrogate_test.py
@@ -8,6 +8,7 @@ import blivet.devicelibs.mdraid as mdraid
 
 from . import mdraid_test
 from blivet.errors import MDRaidError
+from blivet.size import Size
 
 class MDRaidInterrogateTestCase(mdraid_test.MDRaidAsRootTestCase):
 
@@ -33,7 +34,7 @@ class MDRaidInterrogateTestCase(mdraid_test.MDRaidAsRootTestCase):
 class MDExamineTestCase(MDRaidInterrogateTestCase):
 
     def __init__(self, methodName='runTest'):
-        super(MDExamineTestCase, self).__init__(methodName=methodName, deviceSpec=[102400, 102400, 102400])
+        super(MDExamineTestCase, self).__init__(methodName=methodName, deviceSpec=[Size("100 MiB") for _ in range(3)])
 
     names_0 = [
       'DEVICE',
@@ -130,7 +131,7 @@ class MDExamineTestCase(MDRaidInterrogateTestCase):
 class MDDetailTestCase(MDRaidInterrogateTestCase):
 
     def __init__(self, methodName='runTest'):
-        super(MDDetailTestCase, self).__init__(methodName=methodName, deviceSpec=[102400, 102400, 102400])
+        super(MDDetailTestCase, self).__init__(methodName=methodName, deviceSpec=[Size("100 MiB") for _ in range(3)])
 
     names = [
         'ACTIVE DEVICES',
diff --git a/tests/devicelibs_test/mdraid_test.py b/tests/devicelibs_test/mdraid_test.py
index 380d853..687ec12 100755
--- a/tests/devicelibs_test/mdraid_test.py
+++ b/tests/devicelibs_test/mdraid_test.py
@@ -84,7 +84,7 @@ class JustAddTestCaseFactory(TestCaseFactory):
     def makeClass(name, level):
 
         def __init__(self, methodName='runTest'):
-            super(self.__class__, self).__init__(methodName=methodName, deviceSpec=[102400, 102400, 102400, 102400, 102400])
+            super(self.__class__, self).__init__(methodName=methodName, deviceSpec=[Size("100 MiB") for _ in range(5)])
             self.longMessage = True
 
         def testAdd(self):
@@ -127,7 +127,7 @@ class GrowTestCaseFactory(object):
     def makeClass(name, level):
 
         def __init__(self, methodName='runTest'):
-            super(self.__class__, self).__init__(methodName=methodName, deviceSpec=[102400, 102400, 102400, 102400, 102400, 102400])
+            super(self.__class__, self).__init__(methodName=methodName, deviceSpec=[Size("100 MiB") for _ in range(6)])
             self.longMessage = True
 
         def testGrow(self):
@@ -210,7 +210,7 @@ for l in levels:
 class SimpleRaidTest(MDRaidAsRootTestCase):
 
     def __init__(self, methodName='runTest'):
-        super(SimpleRaidTest, self).__init__(methodName=methodName, deviceSpec=[102400, 102400, 102400])
+        super(SimpleRaidTest, self).__init__(methodName=methodName, deviceSpec=[Size("100 MiB") for _ in range(3)])
         self.longMessage = True
 
     def testMDRaidAsRoot(self):
diff --git a/tests/formats_test/fslabeling.py b/tests/formats_test/fslabeling.py
index 22d74ee..c35a7b0 100644
--- a/tests/formats_test/fslabeling.py
+++ b/tests/formats_test/fslabeling.py
@@ -5,6 +5,7 @@ from six import add_metaclass
 
 from tests import loopbackedtestcase
 from blivet.errors import FSError
+from blivet.size import Size
 
 @add_metaclass(abc.ABCMeta)
 class LabelingAsRoot(loopbackedtestcase.LoopBackedTestCase):
@@ -21,7 +22,7 @@ class LabelingAsRoot(loopbackedtestcase.LoopBackedTestCase):
        doc="A label which is invalid for this filesystem.")
 
     def __init__(self, methodName='runTest'):
-        super(LabelingAsRoot, self).__init__(methodName=methodName, deviceSpec=[102400])
+        super(LabelingAsRoot, self).__init__(methodName=methodName, deviceSpec=[Size("100 MiB")])
 
     def setUp(self):
         an_fs = self._fs_class()
diff --git a/tests/formats_test/selinux_test.py b/tests/formats_test/selinux_test.py
index 00771ad..14433da 100755
--- a/tests/formats_test/selinux_test.py
+++ b/tests/formats_test/selinux_test.py
@@ -7,13 +7,14 @@ import unittest
 import blivet
 from tests import loopbackedtestcase
 import blivet.formats.fs as fs
+from blivet.size import Size
 
 class SELinuxContextTestCase(loopbackedtestcase.LoopBackedTestCase):
     """Testing SELinux contexts.
     """
 
     def __init__(self, methodName='runTest'):
-        super(SELinuxContextTestCase, self).__init__(methodName=methodName, deviceSpec=[102400])
+        super(SELinuxContextTestCase, self).__init__(methodName=methodName, deviceSpec=[Size("100 MiB")])
 
     def testMountingExt2FS(self):
         an_fs = fs.Ext2FS(device=self.loopDevices[0], label="test")
diff --git a/tests/loopbackedtestcase.py b/tests/loopbackedtestcase.py
index cd09bf7..6b996f7 100644
--- a/tests/loopbackedtestcase.py
+++ b/tests/loopbackedtestcase.py
@@ -2,16 +2,18 @@ import unittest
 import os
 import subprocess
 
+from blivet.size import Size
 
-def makeLoopDev(device_name, file_name, num_blocks=102400):
+def makeLoopDev(device_name, file_name, num_blocks=102400, block_size=1024):
     """ Set up a loop device with a backing store.
 
         :param str device_name: the path of the loop device
         :param str file_name: the path of the backing file
         :param int num_blocks: the size of file_name in number of blocks
+        :param int block_size: the number of bytes in a block
     """
     proc = subprocess.Popen(["dd", "if=/dev/zero", "of=%s" % file_name,
-                             "bs=1024", "count=%d" % num_blocks],
+                             "bs=%d" % block_size, "count=%d" % num_blocks],
                             stdout=subprocess.PIPE, stderr=subprocess.PIPE)
     while True:
         proc.communicate()
@@ -67,33 +69,38 @@ def getFreeLoopDev():
 @unittest.skipUnless(os.geteuid() == 0, "requires root privileges")
 class LoopBackedTestCase(unittest.TestCase):
 
-    DEFAULT_STORE_SIZE = 102400
+    DEFAULT_BLOCK_SIZE = Size(1024)
+    DEFAULT_STORE_SIZE = Size("100 MiB")
     _DEFAULT_DEVICE_SPEC = [DEFAULT_STORE_SIZE, DEFAULT_STORE_SIZE]
     _STORE_FILE_TEMPLATE = 'test-virtdev%d'
     _STORE_FILE_PATH = '/var/tmp'
 
-    def __init__(self, methodName='runTest', deviceSpec=None):
+    def __init__(self, methodName='runTest', deviceSpec=None, block_size=None):
         """ DevicelibsTestCase manages loop devices.
 
             It constructs loop devices according to loopDeviceSpec,
             sets them up, and tears them down again.
 
-            :param deviceSpec: Specification for the loop devices.
-            :type deviceSpec: list of int
-
-            deviceSpec is currently just a list of ints corresponding
-            to the number of blocks for each backing store.
+            :param deviceSpec: list containing the size of each loop device
+            :type deviceSpec: list of Size or NoneType
+            :param block_size: block size for dd command when making devices
+            :type block_size: Size or NoneType
         """
         unittest.TestCase.__init__(self, methodName=methodName)
         self._deviceSpec = deviceSpec or self._DEFAULT_DEVICE_SPEC
         self._loopMap = {}
         self.loopDevices = []
+        self.block_size = block_size or self.DEFAULT_BLOCK_SIZE
+
+        if any(d % self.block_size != Size(0) for d in self._deviceSpec):
+            raise ValueError("Every device size must be a multiple of the block size.")
 
     def setUp(self):
         for index, size in enumerate(self._deviceSpec):
             store = os.path.join(self._STORE_FILE_PATH, self._STORE_FILE_TEMPLATE % index)
             dev = getFreeLoopDev()
-            makeLoopDev(dev, store, num_blocks=size)
+            num_blocks = int(size / self.block_size)
+            makeLoopDev(dev, store, num_blocks=num_blocks, block_size=int(self.block_size))
             self._loopMap[dev] = store
             self.loopDevices.append(dev)
 
-- 
1.9.3



More information about the anaconda-patches mailing list