Change in vdsm[master]: tests: FakeLVM test command failure

alitke at redhat.com alitke at redhat.com
Thu Oct 29 17:52:12 UTC 2015


Adam Litke has uploaded a new change for review.

Change subject: tests: FakeLVM test command failure
......................................................................

tests: FakeLVM test command failure

Change-Id: I954b750d744df0dbd9b7ac13138731d80db54bb8
Signed-off-by: Adam Litke <alitke at redhat.com>
---
M tests/storagefakelib.py
M tests/storagefakelibTests.py
2 files changed, 49 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/64/47864/1

diff --git a/tests/storagefakelib.py b/tests/storagefakelib.py
index 1548ab9..9e2536f 100644
--- a/tests/storagefakelib.py
+++ b/tests/storagefakelib.py
@@ -23,6 +23,7 @@
 from copy import deepcopy
 
 from storage import lvm as real_lvm
+from storage import storage_exception as se
 
 
 class FakeLVM(object):
@@ -77,7 +78,10 @@
     def createLV(self, vgName, lvName, size, activate=True, contiguous=False,
                  initialTag=None):
         # Size is expected as a string in MB, convert to a string in bytes.
-        size = str(int(size) << 20)
+        try:
+            size = str(int(size) << 20)
+        except ValueError:
+            raise se.CannotCreateLogicalVolume(vgName, lvName)
 
         # devices is hard to emulate properly (must have a PE allocator that
         # works the same as for LVM).  Since we don't need this value, use None
@@ -105,36 +109,57 @@
                      opened=False,
                      active=bool(activate))
 
-        vg_dict = self.lvmd.setdefault(vgName, {})
+        try:
+            vg_dict = self.lvmd.setdefault(vgName, {})
+            lv_count = int(self.vgmd[vgName]['lv_count']) + 1
+        except KeyError:
+            raise se.CannotCreateLogicalVolume(vgName, lvName)
+
+        if lvName in vg_dict:
+            raise se.CannotCreateLogicalVolume(vgName, lvName)
+
         vg_dict[lvName] = lv_md
-        lv_count = int(self.vgmd[vgName]['lv_count']) + 1
         self.vgmd[vgName]['lv_count'] = str(lv_count)
 
     def activateLVs(self, vgName, lvNames):
         for lv in lvNames:
-            self.lvmd[vgName][lv]['active'] = True
-            self.lvmd[vgName][lv]['attr']['state'] = 'a'
+            try:
+                self.lvmd[vgName][lv]['active'] = True
+                self.lvmd[vgName][lv]['attr']['state'] = 'a'
+            except KeyError as e:
+                raise se.CannotActivateLogicalVolume(str(e))
 
     def addtag(self, vg, lv, tag):
-        self.lvmd[vg][lv]['tags'] += (tag,)
+        try:
+            self.lvmd[vg][lv]['tags'] += (tag,)
+        except KeyError:
+            raise se.MissingTagOnLogicalVolume("%s/%s" % (vg, lv), tag)
 
     def lvPath(self, vgName, lvName):
         return os.path.join(self.root, "dev", vgName, lvName)
 
     def getPV(self, pvName):
-        md = deepcopy(self.pvmd[pvName])
+        try:
+            md = deepcopy(self.pvmd[pvName])
+        except KeyError:
+            raise se.InaccessiblePhysDev((pvName,))
         vg_name = md['vg_name']
         md['vg_uuid'] = self.vgmd[vg_name]['uuid']
         return real_lvm.PV(**md)
 
     def getVG(self, vgName):
+        if vgName not in self.vgmd:
+            raise se.VolumeGroupDoesNotExist(vgName)
         vg_md = deepcopy(self.vgmd[vgName])
         vg_attr = real_lvm.VG_ATTR(**vg_md['attr'])
         vg_md['attr'] = vg_attr
         return real_lvm.VG(**vg_md)
 
     def _getLV(self, vgName, lvName):
-        lv_md = deepcopy(self.lvmd[vgName][lvName])
+        try:
+            lv_md = deepcopy(self.lvmd[vgName][lvName])
+        except KeyError:
+            raise se.LogicalVolumeDoesNotExistError("%s/%s" % (vgName, lvName))
         lv_attr = real_lvm.LV_ATTR(**lv_md['attr'])
         lv_md['attr'] = lv_attr
         return real_lvm.LV(**lv_md)
diff --git a/tests/storagefakelibTests.py b/tests/storagefakelibTests.py
index ca0d398..c3712dd 100644
--- a/tests/storagefakelibTests.py
+++ b/tests/storagefakelibTests.py
@@ -25,6 +25,7 @@
 from storagefakelib import FakeLVM
 
 from storage import blockSD, blockVolume
+from storage import storage_exception as se
 
 
 @expandPermutations
@@ -281,6 +282,7 @@
             self.assertEqual('a', lv.attr.state)
 
 
+ at expandPermutations
 class FakeLVMGeneralTests(VdsmTestCase):
 
     def test_lvpath(self):
@@ -290,3 +292,17 @@
             lv_name = 'bar'
             expected = os.path.join(tmpdir, 'dev', vg_name, lv_name)
             self.assertEqual(expected, lvm.lvPath(vg_name, lv_name))
+
+    @permutations([
+        [se.VolumeGroupDoesNotExist, 'getVG', ['vg']],
+        [se.CannotActivateLogicalVolume, 'activateLVs', ['vg', ['lv']]],
+        [se.MissingTagOnLogicalVolume, 'addtag', ['vg', 'lv', 'tag']],
+        [se.CannotCreateLogicalVolume, 'createLV', ['vg', 'lv', '1024']],
+        [se.LogicalVolumeDoesNotExistError, 'getLV', ['vg', 'lv']],
+        [se.InaccessiblePhysDev, 'getPV', ['pv']],
+    ])
+    def test_bad_args(self, exception, fn, args):
+        with namedTemporaryDir() as tmpdir:
+            lvm = FakeLVM(tmpdir)
+            lvm_fn = getattr(lvm, fn)
+            self.assertRaises(exception, lvm_fn, *args)


-- 
To view, visit https://gerrit.ovirt.org/47864
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I954b750d744df0dbd9b7ac13138731d80db54bb8
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Adam Litke <alitke at redhat.com>


More information about the vdsm-patches mailing list