diff options
author | Martin Gracik <mgracik@redhat.com> | 2009-03-09 10:59:19 +0100 |
---|---|---|
committer | Martin Gracik <mgracik@redhat.com> | 2009-03-13 11:11:50 +0100 |
commit | e9c01eb4e23874e3294d52eabc5673f82e07999f (patch) | |
tree | 93b068de9245c065bc9bab9d170b9501c2045585 /tests | |
parent | 09e79bc538c870fc50d227780d04555561050447 (diff) | |
download | anaconda-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.py | 60 | ||||
-rw-r--r-- | tests/storage/devicelibs/mdraid.py | 105 |
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) + |