[blivet 02/13] Make MDRaidArrayDevice initializer not except raid level of None.

mulhern amulhern at redhat.com
Tue Nov 26 18:47:07 UTC 2013


Previously, the initializer would succeed if level was None.
Now, it throws an MDRaidError for None.

Unittests have been updated as necessary.

Code that allowed for the possibility of level being None has been
removed.

Signed-off-by: mulhern <amulhern at redhat.com>
---
 blivet/devices.py     | 21 +++++++--------------
 tests/devices_test.py | 20 ++++++++++++++------
 2 files changed, 21 insertions(+), 20 deletions(-)

diff --git a/blivet/devices.py b/blivet/devices.py
index 276822a..b8503fe 100644
--- a/blivet/devices.py
+++ b/blivet/devices.py
@@ -2980,11 +2980,7 @@ class MDRaidArrayDevice(StorageDevice):
 
         if level == "container":
             self._type = "mdcontainer"
-            self.level = "container"
-        elif level is not None:
-            self.level = mdraid.raidLevel(level)
-        else:
-            self.level = None
+        self.level = level
 
         # For new arrays check if we have enough members
         if (not exists and parents and
@@ -3030,7 +3026,7 @@ class MDRaidArrayDevice(StorageDevice):
         """ Return the raid level
 
             :returns: raid level value
-            :rtype:   an int representing a raid level, "container", or None
+            :rtype:   an int representing a raid level or "container"
         """
         return self._level
 
@@ -3039,16 +3035,15 @@ class MDRaidArrayDevice(StorageDevice):
         """ Set the RAID level and enforce restrictions based on it.
 
             :param value: new raid level
-            :param type:  a valid raid level int, "container", or None
+            :param type:  a valid raid level int or "container"
             :returns:     None
 
             Sets createBitmap True unless level is 0
         """
-        if not value in mdraid.raid_levels and \
-           value != "container" and value is not None:
-            raise mdraid.MDRaidError("invalid raid level %s" % str(value))
-
-        self._level = value
+        if value != "container":
+            self._level = mdraid.raidLevel(value)
+        else:
+            self._level = value
 
         # bitmaps are not meaningful on raid0 according to mdadm-3.0.3
         self.createBitmap = self._level != 0
@@ -3144,8 +3139,6 @@ class MDRaidArrayDevice(StorageDevice):
             levelstr = "stripe"
         elif self.level == mdraid.RAID1:
             levelstr = "mirror"
-        elif self.level is None:
-            levelstr = "unknown level"
         else:
             levelstr = "raid%s" % self.level
 
diff --git a/tests/devices_test.py b/tests/devices_test.py
index 73ab45c..d86d7b9 100644
--- a/tests/devices_test.py
+++ b/tests/devices_test.py
@@ -71,7 +71,6 @@ class MDRaidArrayDeviceTestCase(unittest.TestCase):
                 v(getattr(device, k), k)
 
     def setUp(self):
-        self.dev0 = MDRaidArrayDevice("dev0")
 
         self.dev1 = MDRaidArrayDevice("dev1", level="container")
         self.dev2 = MDRaidArrayDevice("dev2", level="raid0")
@@ -81,13 +80,13 @@ class MDRaidArrayDeviceTestCase(unittest.TestCase):
         self.dev6 = MDRaidArrayDevice("dev6", level="raid6")
         self.dev7 = MDRaidArrayDevice("dev7", level="raid10")
 
-        self.dev8 = MDRaidArrayDevice("dev8", exists=True)
+        self.dev8 = MDRaidArrayDevice("dev8", level=1, exists=True)
         self.dev9 = MDRaidArrayDevice(
            "dev9",
            level="raid0",
            parents=[
               MDRaidArrayDevice("parent", level="container"),
-              MDRaidArrayDevice("other")])
+              MDRaidArrayDevice("other", level=0)])
 
         self.dev10 = MDRaidArrayDevice(
            "dev10",
@@ -99,7 +98,7 @@ class MDRaidArrayDeviceTestCase(unittest.TestCase):
            level=1,
            parents=[
               MDRaidArrayDevice("parent", level="container"),
-              MDRaidArrayDevice("other")],
+              MDRaidArrayDevice("other", level="raid0")],
            size=32)
 
         self.dev12 = MDRaidArrayDevice(
@@ -182,8 +181,6 @@ class MDRaidArrayDeviceTestCase(unittest.TestCase):
            For some combinations of arguments the initializer will throw
            an exception.
         """
-        self.stateCheck(self.dev0)
-
 
         ##
         ## level tests
@@ -216,7 +213,9 @@ class MDRaidArrayDeviceTestCase(unittest.TestCase):
         ## existing device tests
         ##
         self.stateCheck(self.dev8,
+                        description = lambda x, m: self.assertEqual(x, "MDRAID set (mirror)", m),
                         exists=self.assertTrue,
+                        level=lambda x, m: self.assertEqual(x, 1, m),
                         metadataVersion=self.assertIsNone)
 
 
@@ -342,6 +341,11 @@ class MDRaidArrayDeviceTestCase(unittest.TestCase):
         self.assertRaisesRegexp(mdraid.MDRaidError,
                                 "invalid raid level",
                                 MDRaidArrayDevice,
+                                "dev")
+
+        self.assertRaisesRegexp(mdraid.MDRaidError,
+                                "invalid raid level",
+                                MDRaidArrayDevice,
                                 "dev",
                                 level="raid2")
 
@@ -368,6 +372,7 @@ class MDRaidArrayDeviceTestCase(unittest.TestCase):
                                 "memberDevices cannot be greater than totalDevices",
                                 MDRaidArrayDevice,
                                 "dev",
+                                level=0,
                                 memberDevices=2)
 
 
@@ -376,6 +381,9 @@ class MDRaidArrayDeviceTestCase(unittest.TestCase):
         with self.assertRaisesRegexp(mdraid.MDRaidError, "invalid raid level" ):
             self.dev7.level = "junk"
 
+        with self.assertRaisesRegexp(mdraid.MDRaidError, "invalid raid level" ):
+            self.dev7.level = None
+
 
 def suite():
     return unittest.TestLoader().loadTestsFromTestCase(MDRaidArrayDeviceTestCase)
-- 
1.8.3.1



More information about the anaconda-patches mailing list