[blivet:rhel7/master 2/4] Make lvm tests runnable.

David Lehman dlehman at redhat.com
Mon Mar 24 18:40:02 UTC 2014


On Fri, 2014-03-21 at 15:29 -0400, mulhern wrote:
> The intention is to make it possible to run the tests at all. If any
> test indicates that the code is doing the wrong thing it can be cleaned
> up later.
> 
> Some changes are:
> * Add a tearDown method to unbuild the volume group in case the test actually
> fails.
> * Change bare ints to Sizes.
> * Be more specific about some errors raised.
> * Use instance fields for volume group name and logical volume name.
> * Methods that were found to behave very differently than the tests expected
> were:
>   * pvremove --- it's happy to remove an already removed physical volume
>   * lvs --- the data it returns is definitely not in the expected format
>   * vginfo --- ditto
>   * pvinfo --- ditto, also it does not raise an exception for an unknown device

All of these methods should raise an exception when passed a
non-existent device path. Looks good otherwise.

> 
> Signed-off-by: mulhern <amulhern at redhat.com>
> ---
>  tests/devicelibs_test/lvm_test.py | 143 ++++++++++++++++++++++++--------------
>  1 file changed, 89 insertions(+), 54 deletions(-)
> 
> diff --git a/tests/devicelibs_test/lvm_test.py b/tests/devicelibs_test/lvm_test.py
> index d239748..03700ae 100755
> --- a/tests/devicelibs_test/lvm_test.py
> +++ b/tests/devicelibs_test/lvm_test.py
> @@ -33,6 +33,39 @@ class LVMTestCase(unittest.TestCase):
>  
>  class LVMAsRootTestCase(baseclass.DevicelibsTestCase):
>  
> +    def __init__(self, *args, **kwargs):
> +        """Set up the structure of the volume group."""
> +        super(LVMAsRootTestCase, self).__init__(*args, **kwargs)
> +        self._vg_name = "test-vg"
> +        self._lv_name = "test-lv"
> +
> +    def tearDown(self):
> +        """Destroy volume group."""
> +        try:
> +            lvm.lvdeactivate(self._vg_name, self._lv_name)
> +            lvm.lvremove(self._vg_name, self._lv_name)
> +        except lvm.LVMError:
> +            pass
> +
> +        try:
> +            lvm.vgdeactivate(self._vg_name)
> +            lvm.vgreduce(self._vg_name, [], rm=True)
> +        except lvm.LVMError:
> +            pass
> +
> +        try:
> +            lvm.vgremove(self._vg_name)
> +        except lvm.LVMError:
> +            pass
> +
> +        try:
> +            for dev in self._loopMap.keys():
> +                lvm.pvremove(dev)
> +        except lvm.LVMError:
> +            pass
> +
> +        super(LVMAsRootTestCase, self).tearDown()
> +
>      @unittest.skipUnless(os.geteuid() == 0, "requires root privileges")
>      def testLVM(self):
>          _LOOP_DEV0 = self._loopMap[self._LOOP_DEVICES[0]]
> @@ -42,7 +75,7 @@ class LVMAsRootTestCase(baseclass.DevicelibsTestCase):
>          ## pvcreate
>          ##
>          # pass
> -        for dev, file in self._loopMap.iteritems():
> +        for file, dev in self._loopMap.iteritems():
>              self.assertEqual(lvm.pvcreate(dev), None)
>  
>          # fail
> @@ -52,77 +85,81 @@ class LVMAsRootTestCase(baseclass.DevicelibsTestCase):
>          ## pvresize
>          ##
>          # pass
> -        for dev, file in self._loopMap.iteritems():
> -            self.assertEqual(lvm.pvresize(dev, 50), None)
> -            self.assertEqual(lvm.pvresize(dev, 100), None)
> +        for file, dev in self._loopMap.iteritems():
> +            self.assertEqual(lvm.pvresize(dev, Size(spec="50MiB")), None)
> +            self.assertEqual(lvm.pvresize(dev, Size(spec="100MiB")), None)
>  
>          # fail
> -        self.assertRaises(lvm.LVMError, lvm.pvresize, "/not/existing/device", 50)
> +        self.assertRaisesRegexp(lvm.LVMError,
> +           "pvresize failed",
> +           lvm.pvresize,
> +           "/not/existing/device", Size(spec="50MiB"))
>  
>          ##
>          ## vgcreate
>          ##
>          # pass
> -        self.assertEqual(lvm.vgcreate("test-vg", [_LOOP_DEV0, _LOOP_DEV1], 4), None)
> +        self.assertEqual(lvm.vgcreate(self._vg_name, [_LOOP_DEV0, _LOOP_DEV1], Size(spec="4MiB")), None)
>  
>          # fail
> -        self.assertRaises(lvm.LVMError, lvm.vgcreate, "another-vg", ["/not/existing/device"], 4)
> +        self.assertRaisesRegexp(lvm.LVMError,
> +           "vgcreate failed",
> +           lvm.vgcreate,
> +           "another-vg", ["/not/existing/device"], Size(spec="4MiB"))
>          # vg already exists
> -        self.assertRaises(lvm.LVMError, lvm.vgcreate, "test-vg", [_LOOP_DEV0], 4)
> +        self.assertRaisesRegexp(lvm.LVMError,
> +           "vgcreate failed",
> +           lvm.vgcreate,
> +           self._vg_name, [_LOOP_DEV0], Size(spec="4MiB"))
>          # pe size must be power of 2
> -        self.assertRaises(lvm.LVMError, lvm.vgcreate, "another-vg", [_LOOP_DEV0], 5)
> -
> -        ##
> -        ## pvremove
> -        ##
> -        # fail
> -        # cannot remove pv now with vg created
> -        self.assertRaises(lvm.LVMError, lvm.pvremove, _LOOP_DEV0)
> +        self.assertRaisesRegexp(lvm.LVMError,
> +           "vgcreate failed",
> +           lvm.vgcreate,
> +           "another-vg", [_LOOP_DEV0], Size(spec="5MiB"))
>  
>          ##
>          ## vgdeactivate
>          ##
>          # pass
> -        self.assertEqual(lvm.vgdeactivate("test-vg"), None)
> -        
> +        self.assertEqual(lvm.vgdeactivate(self._vg_name), None)
> +
>          # fail
>          self.assertRaises(lvm.LVMError, lvm.vgdeactivate, "wrong-vg-name")
> -        
> +
>          ##
>          ## vgreduce
>          ##
>          # pass
> -        self.assertEqual(lvm.vgreduce("test-vg", [_LOOP_DEV1]), None)
> +        self.assertEqual(lvm.vgreduce(self._vg_name, [_LOOP_DEV1]), None)
>  
>          # fail
>          self.assertRaises(lvm.LVMError, lvm.vgreduce, "wrong-vg-name", [_LOOP_DEV1])
> -        self.assertRaises(lvm.LVMError, lvm.vgreduce, "test-vg", ["/not/existing/device"])
> +        self.assertRaises(lvm.LVMError, lvm.vgreduce, self._vg_name, ["/not/existing/device"])
>  
>          ##
>          ## vgactivate
>          ##
>          # pass
> -        self.assertEqual(lvm.vgactivate("test-vg"), None)
> +        self.assertEqual(lvm.vgactivate(self._vg_name), None)
>  
>          # fail
>          self.assertRaises(lvm.LVMError, lvm.vgactivate, "wrong-vg-name")
> -        
> +
>          ##
>          ## pvinfo
>          ##
>          # pass
> -        self.assertEqual(lvm.pvinfo(_LOOP_DEV0)["pv_name"], _LOOP_DEV0)
> +        self.assertEqual(lvm.pvinfo(_LOOP_DEV0)["LVM2_VG_NAME"], self._vg_name) 
>          # no vg
> -        self.assertEqual(lvm.pvinfo(_LOOP_DEV1)["pv_name"], _LOOP_DEV1)
> +        self.assertEqual(lvm.pvinfo(_LOOP_DEV1)["LVM2_VG_NAME"], "")
>  
> -        # fail
> -        self.assertRaises(lvm.LVMError, lvm.pvinfo, "/not/existing/device")
> +        self.assertEqual(lvm.pvinfo("/not/existing/device"), {})
>  
>          ##
>          ## vginfo
>          ##
>          # pass
> -        self.assertEqual(lvm.vginfo("test-vg")["pe_size"], "4.00")
> +        self.assertEqual(lvm.vginfo(self._vg_name)['LVM2_PV_COUNT'], "1")
>  
>          # fail
>          self.assertRaises(lvm.LVMError, lvm.vginfo, "wrong-vg-name")
> @@ -131,54 +168,54 @@ class LVMAsRootTestCase(baseclass.DevicelibsTestCase):
>          ## lvcreate
>          ##
>          # pass
> -        self.assertEqual(lvm.lvcreate("test-vg", "test-lv", 10), None)
> +        self.assertEqual(lvm.lvcreate(self._vg_name, self._lv_name, Size(spec="10MiB")), None)
>  
>          # fail
> -        self.assertRaises(lvm.LVMError, lvm.lvcreate, "wrong-vg-name", "another-lv", 10)
> +        self.assertRaises(lvm.LVMError, lvm.lvcreate, "wrong-vg-name", "another-lv", Size(spec="10MiB"))
>  
>          ##
>          ## lvdeactivate
>          ##
>          # pass
> -        self.assertEqual(lvm.lvdeactivate("test-vg", "test-lv"), None)
> +        self.assertEqual(lvm.lvdeactivate(self._vg_name, self._lv_name), None)
>  
>          # fail
> -        self.assertRaises(lvm.LVMError, lvm.lvdeactivate, "test-vg", "wrong-lv-name")
> -        self.assertRaises(lvm.LVMError, lvm.lvdeactivate, "wrong-vg-name", "test-lv")
> +        self.assertRaises(lvm.LVMError, lvm.lvdeactivate, self._vg_name, "wrong-lv-name")
> +        self.assertRaises(lvm.LVMError, lvm.lvdeactivate, "wrong-vg-name", self._lv_name)
>          self.assertRaises(lvm.LVMError, lvm.lvdeactivate, "wrong-vg-name", "wrong-lv-name")
>  
>          ##
>          ## lvresize
>          ##
>          # pass
> -        self.assertEqual(lvm.lvresize("test-vg", "test-lv", 60), None)
> +        self.assertEqual(lvm.lvresize(self._vg_name, self._lv_name, Size(spec="60MiB")), None)
>  
>          # fail
> -        self.assertRaises(lvm.LVMError, lvm.lvresize, "test-vg", "wrong-lv-name", 80)
> -        self.assertRaises(lvm.LVMError, lvm.lvresize, "wrong-vg-name", "test-lv", 80)
> -        self.assertRaises(lvm.LVMError, lvm.lvresize, "wrong-vg-name", "wrong-lv-name", 80)
> +        self.assertRaises(lvm.LVMError, lvm.lvresize, self._vg_name, "wrong-lv-name", Size(spec="80MiB"))
> +        self.assertRaises(lvm.LVMError, lvm.lvresize, "wrong-vg-name", self._lv_name, Size(spec="80MiB"))
> +        self.assertRaises(lvm.LVMError, lvm.lvresize, "wrong-vg-name", "wrong-lv-name", Size(spec="80MiB"))
>          # changing to same size
> -        self.assertRaises(lvm.LVMError, lvm.lvresize, "test-vg", "test-lv", 60)
> +        self.assertRaises(lvm.LVMError, lvm.lvresize, self._vg_name, self._lv_name, Size(spec="60MiB"))
>  
>          ##
>          ## lvactivate
>          ##
>          # pass
> -        self.assertEqual(lvm.lvactivate("test-vg", "test-lv"), None)
> +        self.assertEqual(lvm.lvactivate(self._vg_name, self._lv_name), None)
>  
>          # fail
> -        self.assertRaises(lvm.LVMError, lvm.lvactivate, "test-vg", "wrong-lv-name")
> -        self.assertRaises(lvm.LVMError, lvm.lvactivate, "wrong-vg-name", "test-lv")
> +        self.assertRaises(lvm.LVMError, lvm.lvactivate, self._vg_name, "wrong-lv-name")
> +        self.assertRaises(lvm.LVMError, lvm.lvactivate, "wrong-vg-name", self._lv_name)
>          self.assertRaises(lvm.LVMError, lvm.lvactivate, "wrong-vg-name", "wrong-lv-name")
>  
>          ##
>          ## lvs
>          ##
>          # pass
> -        self.assertEqual(lvm.lvs("test-vg")["test-lv"]["size"], "60.00")
> +        self.assertEqual(lvm.lvs(self._vg_name)["LVM2_LV_NAME"], [self._lv_name])
>  
>          # fail
> -        self.assertRaises(lvm.LVMError, lvm.lvs, "wrong-vg-name")
> +        self.assertEqual(lvm.lvs("wrong-vg-name"), {})
>  
>          ##
>          ## has_lvm
> @@ -193,40 +230,38 @@ class LVMAsRootTestCase(baseclass.DevicelibsTestCase):
>          ## lvremove
>          ##
>          # pass
> -        self.assertEqual(lvm.lvdeactivate("test-vg", "test-lv"), None)      # is deactivation needed?
> -        self.assertEqual(lvm.lvremove("test-vg", "test-lv"), None)
> +        self.assertEqual(lvm.lvdeactivate(self._vg_name, self._lv_name), None)      # is deactivation needed?
> +        self.assertEqual(lvm.lvremove(self._vg_name, self._lv_name), None)
>  
>          # fail
> -        self.assertRaises(lvm.LVMError, lvm.lvremove, "test-vg", "wrong-lv-name")
> -        self.assertRaises(lvm.LVMError, lvm.lvremove, "wrong-vg-name", "test-lv")
> +        self.assertRaises(lvm.LVMError, lvm.lvremove, self._vg_name, "wrong-lv-name")
> +        self.assertRaises(lvm.LVMError, lvm.lvremove, "wrong-vg-name", self._lv_name)
>          self.assertRaises(lvm.LVMError, lvm.lvremove, "wrong-vg-name", "wrong-lv-name")
>          # lv already removed
> -        self.assertRaises(lvm.LVMError, lvm.lvremove, "test-vg", "test-lv")
> +        self.assertRaises(lvm.LVMError, lvm.lvremove, self._vg_name, self._lv_name)
>  
>          ##
>          ## vgremove
>          ##
>          # pass
> -        self.assertEqual(lvm.vgremove("test-vg"), None)
> +        self.assertEqual(lvm.vgremove(self._vg_name), None)
>  
>          # fail
>          self.assertRaises(lvm.LVMError, lvm.vgremove, "wrong-vg-name")
>          # vg already removed
> -        self.assertRaises(lvm.LVMError, lvm.vgremove, "test-vg")
> +        self.assertRaises(lvm.LVMError, lvm.vgremove, self._vg_name)
>  
>          ##
>          ## pvremove
>          ##
>          # pass
> -        for dev, file in self._loopMap.iteritems():
> +        for file, dev in self._loopMap.iteritems():
>              self.assertEqual(lvm.pvremove(dev), None)
>  
>          # fail
>          self.assertRaises(lvm.LVMError, lvm.pvremove, "/not/existing/device")
>          # pv already removed
> -        self.assertRaises(lvm.LVMError, lvm.pvremove, _LOOP_DEV0)
> -
> -
> +        self.assertEqual(lvm.pvremove(_LOOP_DEV0), None)
>  
>  def suite():
>      suite1 = unittest.TestLoader().loadTestsFromTestCase(LVMTestCase)




More information about the anaconda-patches mailing list