summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMartin Gracik <mgracik@redhat.com>2009-03-09 10:59:19 +0100
committerMartin Gracik <mgracik@redhat.com>2009-03-13 11:11:50 +0100
commite9c01eb4e23874e3294d52eabc5673f82e07999f (patch)
tree93b068de9245c065bc9bab9d170b9501c2045585 /tests
parent09e79bc538c870fc50d227780d04555561050447 (diff)
downloadanaconda-e9c01eb4e23874e3294d52eabc5673f82e07999f.tar.gz
anaconda-e9c01eb4e23874e3294d52eabc5673f82e07999f.tar.xz
anaconda-e9c01eb4e23874e3294d52eabc5673f82e07999f.zip
Added test case for devicelib mdraid.py.
Rewrote the devicelibs unittest baseclass so we can create and remove another loop devices within the tests. Rewrote the isRaidXY(raidlevel) functions in mdraid.py into one function isRaid(XY, raidlevel). Rewrote the get_raid_min_members and get_raid_max_spares functions to use the new isRaid function, and not use many if-elif-else statements. Changed the minimum raid members for raid10 to 2.
Diffstat (limited to 'tests')
-rw-r--r--tests/storage/devicelibs/baseclass.py60
-rw-r--r--tests/storage/devicelibs/mdraid.py105
2 files changed, 138 insertions, 27 deletions
diff --git a/tests/storage/devicelibs/baseclass.py b/tests/storage/devicelibs/baseclass.py
index efc9c803f..01fe6c779 100644
--- a/tests/storage/devicelibs/baseclass.py
+++ b/tests/storage/devicelibs/baseclass.py
@@ -15,33 +15,39 @@ class TestDevicelibs(unittest.TestCase):
def setUp(self):
for dev, file in self._LOOP_DEVICES:
- proc = subprocess.Popen(["dd", "if=/dev/zero", "of=%s" % file, "bs=1024", "count=102400"])
- 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
-
- proc = subprocess.Popen(["losetup", dev, file])
- 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" % dev
+ self.makeLoopDev(dev, file)
def tearDown(self):
for dev, file in self._LOOP_DEVICES:
- proc = subprocess.Popen(["losetup", "-d", dev])
- 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" % dev
-
- os.remove(file)
+ self.removeLoopDev(dev, file)
+
+ def makeLoopDev(self, device_name, file_name):
+ proc = subprocess.Popen(["dd", "if=/dev/zero", "of=%s" % file_name, "bs=1024", "count=102400"])
+ 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])
+ 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(self, device_name, file_name):
+ proc = subprocess.Popen(["losetup", "-d", device_name])
+ 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.remove(file_name)
diff --git a/tests/storage/devicelibs/mdraid.py b/tests/storage/devicelibs/mdraid.py
new file mode 100644
index 000000000..6e49e55b0
--- /dev/null
+++ b/tests/storage/devicelibs/mdraid.py
@@ -0,0 +1,105 @@
+import baseclass
+import unittest
+import storage.devicelibs.mdraid as mdraid
+
+import time
+
+class TestMDRaid(baseclass.TestDevicelibs):
+
+ def testMDRaidStuff(self):
+ ##
+ ## getRaidLevels
+ ##
+ # pass
+ self.assertEqual(mdraid.getRaidLevels(), mdraid.getRaidLevels())
+
+ ##
+ ## get_raid_min_members
+ ##
+ # pass
+ self.assertEqual(mdraid.get_raid_min_members(mdraid.RAID0), 2)
+ self.assertEqual(mdraid.get_raid_min_members(mdraid.RAID1), 2)
+ self.assertEqual(mdraid.get_raid_min_members(mdraid.RAID5), 3)
+ self.assertEqual(mdraid.get_raid_min_members(mdraid.RAID6), 4)
+ self.assertEqual(mdraid.get_raid_min_members(mdraid.RAID10), 2)
+
+ # fail
+ # unsupported raid
+ self.assertRaises(ValueError, mdraid.get_raid_min_members, 4)
+
+ ##
+ ## get_raid_max_spares
+ ##
+ # pass
+ self.assertEqual(mdraid.get_raid_max_spares(mdraid.RAID0, 5), 0)
+ self.assertEqual(mdraid.get_raid_max_spares(mdraid.RAID1, 5), 3)
+ self.assertEqual(mdraid.get_raid_max_spares(mdraid.RAID5, 5), 2)
+ self.assertEqual(mdraid.get_raid_max_spares(mdraid.RAID6, 5), 1)
+ self.assertEqual(mdraid.get_raid_max_spares(mdraid.RAID10, 5), 3)
+
+ # fail
+ # unsupported raid
+ self.assertRaises(ValueError, mdraid.get_raid_max_spares, 4, 5)
+
+ ##
+ ## mdcreate
+ ##
+ # pass
+ self.assertEqual(mdraid.mdcreate("/dev/md0", 1, [self._LOOP_DEV0, self._LOOP_DEV1]), None)
+ # wait for raid to settle
+ time.sleep(2)
+
+ # fail
+ self.assertRaises(mdraid.MDRaidError, mdraid.mdcreate, "/dev/md1", 1, ["/not/existing/dev0", "/not/existing/dev1"])
+
+ ##
+ ## mddeactivate
+ ##
+ # pass
+ self.assertEqual(mdraid.mddeactivate("/dev/md0"), None)
+
+ # fail
+ self.assertRaises(mdraid.MDRaidError, mdraid.mddeactivate, "/not/existing/md")
+
+ ##
+ ## mdadd
+ ##
+ # pass
+ # TODO
+
+ # fail
+ self.assertRaises(mdraid.MDRaidError, mdraid.mdadd, "/not/existing/device")
+
+ ##
+ ## mdactivate
+ ##
+ # pass
+ self.assertEqual(mdraid.mdactivate("/dev/md0", [self._LOOP_DEV0, self._LOOP_DEV1], super_minor=0), None)
+ # wait for raid to settle
+ time.sleep(2)
+
+ # fail
+ self.assertRaises(mdraid.MDRaidError, mdraid.mdactivate, "/not/existing/md", super_minor=1)
+ # requires super_minor or uuid
+ self.assertRaises(ValueError, mdraid.mdactivate, "/dev/md1")
+
+ ##
+ ## mddestroy
+ ##
+ # pass
+ # deactivate first
+ self.assertEqual(mdraid.mddeactivate("/dev/md0"), None)
+
+ self.assertEqual(mdraid.mddestroy(self._LOOP_DEV0), None)
+ self.assertEqual(mdraid.mddestroy(self._LOOP_DEV1), None)
+
+ # fail
+ # not a component
+ self.assertRaises(mdraid.MDRaidError, mdraid.mddestroy, "/dev/md0")
+ self.assertRaises(mdraid.MDRaidError, mdraid.mddestroy, "/not/existing/device")
+
+
+if __name__ == "__main__":
+ suite = unittest.TestLoader().loadTestsFromTestCase(TestMDRaid)
+ unittest.TextTestRunner(verbosity=2).run(suite)
+