[PATCH 1/3] Add a base class for tests backed by disk image storage.
David Lehman
dlehman at redhat.com
Mon May 5 17:57:48 UTC 2014
---
tests/imagebackedtestcase.py | 106 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 106 insertions(+)
create mode 100644 tests/imagebackedtestcase.py
diff --git a/tests/imagebackedtestcase.py b/tests/imagebackedtestcase.py
new file mode 100644
index 0000000..ba6481b
--- /dev/null
+++ b/tests/imagebackedtestcase.py
@@ -0,0 +1,106 @@
+
+import os
+import unittest
+
+from blivet import Blivet
+from blivet import util
+from blivet.size import Size
+from blivet.flags import flags
+
+ at unittest.skipUnless(os.geteuid() == 0, "requires root access")
+class ImageBackedTestCase(unittest.TestCase):
+ """ A class to encapsulate testing of blivet using block devices.
+
+ The basic idea is you create some scratch block devices and then run
+ some test code on them.
+
+ :attr:`~.ImageBackedTestCase.disks` defines the set of disk images.
+
+ :meth:`~.ImageBackedTestCase._set_up_storage` is where you specify the
+ initial layout of the disks. It will be written to the disk images in
+ :meth:`~.ImageBackedTestCase.set_up_storage`.
+
+ You then write test methods as usual that use the disk images, which
+ will be cleaned up and removed when each test method finishes.
+ """
+
+ initialize_disks = True
+ """ Whether or not to create a disklabel on the disks. """
+
+ disks = { "disk1": Size(spec="2 GiB"),
+ "disk2": Size(spec="2 GiB") }
+ """ The names and sizes of the disk images to create/use. """
+
+ def set_up_disks(self):
+ """ Create disk image files to build the test's storage on.
+
+ If you are actually creating the disk image files here don't forget
+ to set the initializeDisks flag so they get a fresh disklabel when
+ clearPartitions gets called from create_storage later.
+ """
+ for (name, size) in self.disks.iteritems():
+ path = util.create_sparse_tempfile(name, size)
+ self.blivet.config.diskImages[name] = path
+
+ #
+ # set up the disk images with a disklabel
+ #
+ self.blivet.config.initializeDisks = self.initialize_disks
+
+ def _set_up_storage(self):
+ """ Schedule creation of storage devices on the disk images.
+
+ .. note::
+
+ The disk images should already be in a populated devicetree.
+
+ """
+ pass
+
+ def set_up_storage(self):
+ """ Create a device stack on top of disk images for this test to run on.
+
+ This will write the configuration to whatever disk images are
+ defined in create_variant_disks.
+ """
+ #
+ # create disk images
+ #
+ self.set_up_disks()
+
+ #
+ # populate the devicetree
+ #
+ self.blivet.reset()
+
+ #
+ # clear and/or initialize disks as specified in create_variant_disks
+ #
+ self.blivet.clearPartitions()
+
+ #
+ # create the rest of the stack
+ #
+ self._set_up_storage()
+
+ #
+ # write configuration to disk images
+ #
+ self.blivet.doIt()
+
+ def setUp(self):
+ """ Do any setup required prior to running a test. """
+ flags.image_install = True
+ self.blivet = Blivet()
+
+ self.addCleanup(self._cleanUp)
+ self.set_up_storage()
+
+ def _cleanUp(self):
+ """ Clean up any resources that may have been set up for a test. """
+ self.blivet.devicetree.teardownDiskImages()
+ for fn in self.blivet.config.diskImages.values():
+ if os.path.exists(fn):
+ os.unlink(fn)
+
+ flags.image_install = False
--
1.9.0
More information about the anaconda-patches
mailing list