[blivet:master 11/11] Move DevicelibsTestCase up to the top level of the testing directory.

mulhern amulhern at redhat.com
Tue Jun 17 15:08:02 UTC 2014


It is used by formats_test tests as well as tests in devicelibs_test.
Change all uses appropriately.

Signed-off-by: mulhern <amulhern at redhat.com>
---
 tests/devicelibs_test/baseclass.py   | 102 -----------------------------------
 tests/devicelibs_test/btrfs_test.py  |  12 ++---
 tests/devicelibs_test/crypto_test.py |   6 +--
 tests/devicelibs_test/lvm_test.py    |   4 +-
 tests/devicelibs_test/mdraid_test.py |   4 +-
 tests/devicelibs_test/swap_test.py   |   4 +-
 tests/formats_test/fslabeling.py     |   4 +-
 tests/formats_test/labeling_test.py  |   4 +-
 tests/formats_test/selinux_test.py   |   4 +-
 tests/loopbacktestcase.py            | 102 +++++++++++++++++++++++++++++++++++
 10 files changed, 123 insertions(+), 123 deletions(-)
 delete mode 100644 tests/devicelibs_test/baseclass.py
 create mode 100644 tests/loopbacktestcase.py

diff --git a/tests/devicelibs_test/baseclass.py b/tests/devicelibs_test/baseclass.py
deleted file mode 100644
index 5e6d51e..0000000
--- a/tests/devicelibs_test/baseclass.py
+++ /dev/null
@@ -1,102 +0,0 @@
-import unittest
-import os
-import subprocess
-
-
-def makeLoopDev(device_name, file_name, num_blocks=102400):
-    """ 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
-    """
-    proc = subprocess.Popen(["dd", "if=/dev/zero", "of=%s" % file_name,
-                             "bs=1024", "count=%d" % num_blocks],
-                            stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-    while True:
-        proc.communicate()
-        if proc.returncode is not None:
-            rc = proc.returncode
-            break
-    if rc:
-        raise OSError("dd failed creating the file %s" % file_name)
-
-    proc = subprocess.Popen(["losetup", device_name, file_name],
-                            stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-    while True:
-        proc.communicate()
-        if proc.returncode is not None:
-            rc = proc.returncode
-            break
-    if rc:
-        raise OSError("losetup failed setting up the loop device %s" % device_name)
-
-def removeLoopDev(device_name, file_name):
-    proc = subprocess.Popen(["losetup", "-d", device_name],
-                            stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-    while True:
-        proc.communicate()
-        if proc.returncode is not None:
-            rc = proc.returncode
-            break
-    if rc:
-        raise OSError("losetup failed removing the loop device %s" % device_name)
-
-    os.unlink(file_name)
-
-def getFreeLoopDev():
-    # There's a race condition here where another process could grab the loop
-    # device losetup gives us before we have time to set it up, but that's just
-    # a chance we'll have to take.
-    proc = subprocess.Popen(["losetup", "-f"],
-                            stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-    out = None
-
-    while True:
-        (out, _err) = proc.communicate()
-        if proc.returncode is not None:
-            rc = proc.returncode
-            out = out.strip()
-            break
-
-    if rc:
-        raise OSError("losetup failed to find a free device")
-
-    return out
-
- at unittest.skipUnless(os.geteuid() == 0, "requires root privileges")
-class DevicelibsTestCase(unittest.TestCase):
-
-    DEFAULT_STORE_SIZE = 102400
-    _DEFAULT_DEVICE_SPEC = [DEFAULT_STORE_SIZE, DEFAULT_STORE_SIZE]
-    _STORE_FILE_BASE_NAME = 'test-virtdev'
-    _STORE_FILE_PATH = '/tmp'
-
-    def __init__(self, methodName='runTest', deviceSpec=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.
-        """
-        unittest.TestCase.__init__(self, methodName=methodName)
-        self._deviceSpec = deviceSpec or self._DEFAULT_DEVICE_SPEC
-        self._loopMap = {}
-        self.loopDevices = []
-
-    def setUp(self):
-        for index, size in enumerate(self._deviceSpec):
-            store = os.path.join(self._STORE_FILE_PATH, (self._STORE_FILE_BASE_NAME + "%d") % index)
-            dev = getFreeLoopDev()
-            makeLoopDev(dev, store, num_blocks=size)
-            self._loopMap[dev] = store
-            self.loopDevices.append(dev)
-
-    def tearDown(self):
-        for (dev, store) in self._loopMap.iteritems():
-            removeLoopDev(dev, store)
diff --git a/tests/devicelibs_test/btrfs_test.py b/tests/devicelibs_test/btrfs_test.py
index 40a26de..4957855 100755
--- a/tests/devicelibs_test/btrfs_test.py
+++ b/tests/devicelibs_test/btrfs_test.py
@@ -8,9 +8,9 @@ import unittest
 import blivet.devicelibs.btrfs as btrfs
 from blivet.errors import BTRFSError
 
-import tests.devicelibs_test.baseclass as baseclass
+import tests.loopbacktestcase as loopbacktestcase
 
-class BTRFSMountDevice(baseclass.DevicelibsTestCase):
+class BTRFSMountDevice(loopbacktestcase.LoopBackTestCase):
     """A superclass that mounts and unmounts the filesystem.
        It must create the filesystem on its chosen devices before mounting.
        It always mounts the filesystem using self.device at self.mountpoint.
@@ -26,7 +26,7 @@ class BTRFSMountDevice(baseclass.DevicelibsTestCase):
 
            Chooses the device to specify to mount command arbitrarily.
         """
-        baseclass.DevicelibsTestCase.setUp(self)
+        loopbacktestcase.LoopBackTestCase.setUp(self)
 
         btrfs.create_volume(self.loopDevices)
         self.device = self.loopDevices[0]
@@ -50,9 +50,9 @@ class BTRFSMountDevice(baseclass.DevicelibsTestCase):
             raise OSError("failed to unmount device %s" % self.device)
 
         os.rmdir(self.mountpoint)
-        baseclass.DevicelibsTestCase.tearDown(self)
+        loopbacktestcase.LoopBackTestCase.tearDown(self)
 
-class BTRFSAsRootTestCase1(baseclass.DevicelibsTestCase):
+class BTRFSAsRootTestCase1(loopbacktestcase.LoopBackTestCase):
 
     def testUnmountedBTRFS(self):
         """A series of simple tests on an unmounted file system.
@@ -177,7 +177,7 @@ class BTRFSAsRootTestCase2(BTRFSMountDevice):
         subvolumes = btrfs.list_subvolumes(self.mountpoint)
         self.assertEqual(len([v for v in subvolumes if v['path'].find("SV1.1") != -1]), 1)
 
-class BTRFSAsRootTestCase3(baseclass.DevicelibsTestCase):
+class BTRFSAsRootTestCase3(loopbacktestcase.LoopBackTestCase):
 
     def __init__(self, methodName='runTest'):
         super(BTRFSAsRootTestCase3, self).__init__(methodName=methodName, deviceSpec=[8192])
diff --git a/tests/devicelibs_test/crypto_test.py b/tests/devicelibs_test/crypto_test.py
index 8316a21..dc12645 100755
--- a/tests/devicelibs_test/crypto_test.py
+++ b/tests/devicelibs_test/crypto_test.py
@@ -6,7 +6,7 @@ import os
 
 from blivet.devicelibs import crypto
 from blivet.errors import CryptoError
-from tests.devicelibs_test import baseclass
+from tests import loopbacktestcase
 
 #FIXME: some of these tests expect behavior which is not correct
 #
@@ -27,7 +27,7 @@ from tests.devicelibs_test import baseclass
 # CryptSetup.status is informative and that it would be useful to preserve it.
 # The numeric values are enumerated in libcryptsetup.h.
 
-class CryptoTestCase(baseclass.DevicelibsTestCase):
+class CryptoTestCase(loopbacktestcase.LoopBackTestCase):
 
     def testCryptoMisc(self):
         _LOOP_DEV0 = self.loopDevices[0]
@@ -129,7 +129,7 @@ class CryptoTestCase(baseclass.DevicelibsTestCase):
         # cleanup
         os.unlink(keyfile)
 
-class CryptoTestCase2(baseclass.DevicelibsTestCase):
+class CryptoTestCase2(loopbacktestcase.LoopBackTestCase):
 
     def __init__(self, methodName='runTest'):
         """Set up the names by which luks knows these devices."""
diff --git a/tests/devicelibs_test/lvm_test.py b/tests/devicelibs_test/lvm_test.py
index a66c756..fa546f4 100755
--- a/tests/devicelibs_test/lvm_test.py
+++ b/tests/devicelibs_test/lvm_test.py
@@ -5,7 +5,7 @@ import blivet.devicelibs.lvm as lvm
 from blivet.size import Size
 from blivet.errors import LVMError
 
-from tests.devicelibs_test import baseclass
+from tests import loopbacktestcase
 
 class LVMTestCase(unittest.TestCase):
 
@@ -31,7 +31,7 @@ class LVMTestCase(unittest.TestCase):
 # call if the device is non-existant, and usually that exception is caught and
 # an LVMError is then raised, but not always.
 
-class LVMAsRootTestCase(baseclass.DevicelibsTestCase):
+class LVMAsRootTestCase(loopbacktestcase.LoopBackTestCase):
 
     def __init__(self, methodName='runTest'):
         """Set up the structure of the volume group."""
diff --git a/tests/devicelibs_test/mdraid_test.py b/tests/devicelibs_test/mdraid_test.py
index 3b12aaf..8185132 100755
--- a/tests/devicelibs_test/mdraid_test.py
+++ b/tests/devicelibs_test/mdraid_test.py
@@ -7,7 +7,7 @@ import blivet.devicelibs.mdraid as mdraid
 from blivet.errors import MDRaidError
 from blivet.size import Size
 
-from tests.devicelibs_test import baseclass
+from tests import loopbacktestcase
 
 class MDRaidTestCase(unittest.TestCase):
 
@@ -49,7 +49,7 @@ class MDRaidTestCase(unittest.TestCase):
                          mdraid.MD_SUPERBLOCK_SIZE)
 
 
-class MDRaidAsRootTestCase(baseclass.DevicelibsTestCase):
+class MDRaidAsRootTestCase(loopbacktestcase.LoopBackTestCase):
 
     def __init__(self, methodName='runTest'):
         """Set up the structure of the mdraid array."""
diff --git a/tests/devicelibs_test/swap_test.py b/tests/devicelibs_test/swap_test.py
index 8f7d2bb..9fa8240 100755
--- a/tests/devicelibs_test/swap_test.py
+++ b/tests/devicelibs_test/swap_test.py
@@ -4,9 +4,9 @@ import unittest
 import blivet.devicelibs.swap as swap
 from blivet.errors import SwapError
 
-from tests.devicelibs_test import baseclass
+from tests import loopbacktestcase
 
-class SwapTestCase(baseclass.DevicelibsTestCase):
+class SwapTestCase(loopbacktestcase.LoopBackTestCase):
 
     def testSwap(self):
         _LOOP_DEV0 = self.loopDevices[0]
diff --git a/tests/formats_test/fslabeling.py b/tests/formats_test/fslabeling.py
index 4cfa9f1..12624a3 100644
--- a/tests/formats_test/fslabeling.py
+++ b/tests/formats_test/fslabeling.py
@@ -2,10 +2,10 @@
 
 import abc
 
-from tests.devicelibs_test import baseclass
+from tests import loopbacktestcase
 from blivet.errors import FSError
 
-class LabelingAsRoot(baseclass.DevicelibsTestCase):
+class LabelingAsRoot(loopbacktestcase.LoopBackTestCase):
     """Tests various aspects of labeling a filesystem where there
        is no easy way to read the filesystem's label once it has been
        set and where the filesystem can not be relabeled.
diff --git a/tests/formats_test/labeling_test.py b/tests/formats_test/labeling_test.py
index 1519cca..b880ac9 100755
--- a/tests/formats_test/labeling_test.py
+++ b/tests/formats_test/labeling_test.py
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 import unittest
 
-from tests.devicelibs_test import baseclass
+from tests import loopbacktestcase
 from blivet.formats import device_formats
 import blivet.formats.fs as fs
 import blivet.formats.swap as swap
@@ -126,7 +126,7 @@ class HFSTestCase(fslabeling.LabelingAsRoot):
     def setUp(self):
         super(HFSTestCase, self).setUp()
 
-class LabelingSwapSpaceTestCase(baseclass.DevicelibsTestCase):
+class LabelingSwapSpaceTestCase(loopbacktestcase.LoopBackTestCase):
 
     def testLabeling(self):
         swp = swap.SwapSpace(device=self.loopDevices[0])
diff --git a/tests/formats_test/selinux_test.py b/tests/formats_test/selinux_test.py
index 9c48ea4..ce3bcb1 100755
--- a/tests/formats_test/selinux_test.py
+++ b/tests/formats_test/selinux_test.py
@@ -5,10 +5,10 @@ import tempfile
 import unittest
 
 import blivet
-from tests.devicelibs_test import baseclass
+from tests import loopbacktestcase
 import blivet.formats.fs as fs
 
-class SELinuxContextTestCase(baseclass.DevicelibsTestCase):
+class SELinuxContextTestCase(loopbacktestcase.LoopBackTestCase):
     """Testing SELinux contexts.
     """
 
diff --git a/tests/loopbacktestcase.py b/tests/loopbacktestcase.py
new file mode 100644
index 0000000..de6cfb0
--- /dev/null
+++ b/tests/loopbacktestcase.py
@@ -0,0 +1,102 @@
+import unittest
+import os
+import subprocess
+
+
+def makeLoopDev(device_name, file_name, num_blocks=102400):
+    """ 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
+    """
+    proc = subprocess.Popen(["dd", "if=/dev/zero", "of=%s" % file_name,
+                             "bs=1024", "count=%d" % num_blocks],
+                            stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+    while True:
+        proc.communicate()
+        if proc.returncode is not None:
+            rc = proc.returncode
+            break
+    if rc:
+        raise OSError("dd failed creating the file %s" % file_name)
+
+    proc = subprocess.Popen(["losetup", device_name, file_name],
+                            stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+    while True:
+        proc.communicate()
+        if proc.returncode is not None:
+            rc = proc.returncode
+            break
+    if rc:
+        raise OSError("losetup failed setting up the loop device %s" % device_name)
+
+def removeLoopDev(device_name, file_name):
+    proc = subprocess.Popen(["losetup", "-d", device_name],
+                            stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+    while True:
+        proc.communicate()
+        if proc.returncode is not None:
+            rc = proc.returncode
+            break
+    if rc:
+        raise OSError("losetup failed removing the loop device %s" % device_name)
+
+    os.unlink(file_name)
+
+def getFreeLoopDev():
+    # There's a race condition here where another process could grab the loop
+    # device losetup gives us before we have time to set it up, but that's just
+    # a chance we'll have to take.
+    proc = subprocess.Popen(["losetup", "-f"],
+                            stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+    out = None
+
+    while True:
+        (out, _err) = proc.communicate()
+        if proc.returncode is not None:
+            rc = proc.returncode
+            out = out.strip()
+            break
+
+    if rc:
+        raise OSError("losetup failed to find a free device")
+
+    return out
+
+ at unittest.skipUnless(os.geteuid() == 0, "requires root privileges")
+class LoopBackTestCase(unittest.TestCase):
+
+    DEFAULT_STORE_SIZE = 102400
+    _DEFAULT_DEVICE_SPEC = [DEFAULT_STORE_SIZE, DEFAULT_STORE_SIZE]
+    _STORE_FILE_BASE_NAME = 'test-virtdev'
+    _STORE_FILE_PATH = '/tmp'
+
+    def __init__(self, methodName='runTest', deviceSpec=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.
+        """
+        unittest.TestCase.__init__(self, methodName=methodName)
+        self._deviceSpec = deviceSpec or self._DEFAULT_DEVICE_SPEC
+        self._loopMap = {}
+        self.loopDevices = []
+
+    def setUp(self):
+        for index, size in enumerate(self._deviceSpec):
+            store = os.path.join(self._STORE_FILE_PATH, (self._STORE_FILE_BASE_NAME + "%d") % index)
+            dev = getFreeLoopDev()
+            makeLoopDev(dev, store, num_blocks=size)
+            self._loopMap[dev] = store
+            self.loopDevices.append(dev)
+
+    def tearDown(self):
+        for (dev, store) in self._loopMap.iteritems():
+            removeLoopDev(dev, store)
-- 
1.9.3



More information about the anaconda-patches mailing list