[PATCH 15/17] Add tests for snapshots.

Anne Mulhern amulhern at redhat.com
Thu Jun 5 21:05:19 UTC 2014





----- Original Message -----
> From: "David Lehman" <dlehman at redhat.com>
> To: anaconda-patches at lists.fedorahosted.org
> Sent: Thursday, June 5, 2014 12:47:35 PM
> Subject: [PATCH 15/17] Add tests for snapshots.
> 
> ---
>  tests/devices_test.py    | 121
>  +++++++++++++++++++++++++++++++++++++++++++++++
>  tests/devicetree_test.py |  41 ++++++++++++++++
>  2 files changed, 162 insertions(+)
> 
> diff --git a/tests/devices_test.py b/tests/devices_test.py
> index 6598eba..e2ea29d 100644
> --- a/tests/devices_test.py
> +++ b/tests/devices_test.py
> @@ -10,8 +10,15 @@ import blivet
>  from blivet.errors import DeviceError
>  from blivet.errors import MDRaidError
>  
> +from blivet.devices import BTRFSSnapShotDevice
>  from blivet.devices import BTRFSSubVolumeDevice
>  from blivet.devices import BTRFSVolumeDevice
> +from blivet.devices import LVMLogicalVolumeDevice
> +from blivet.devices import LVMSnapShotDevice
> +from blivet.devices import LVMThinPoolDevice
> +from blivet.devices import LVMThinLogicalVolumeDevice
> +from blivet.devices import LVMThinSnapShotDevice
> +from blivet.devices import LVMVolumeGroupDevice
>  from blivet.devices import MDRaidArrayDevice
>  from blivet.devices import OpticalDevice
>  from blivet.devices import StorageDevice
> @@ -486,6 +493,11 @@ class BTRFSDeviceTestCase(DeviceStateTestCase):
>             BTRFSSubVolumeDevice,
>             "dev1", parents=parents)
>  
> +        self.assertEqual(self.dev1.isleaf, False)
> +        self.assertEqual(self.dev2.isleaf, True)
> +        member = self.dev1.parents[0]
> +        self.assertEqual(member.isleaf, False)
> +
>      def testBTRFSDeviceMethods(self):
>          """Test for method calls on initialized BTRFS Devices."""
>          # volumes do not have ancestor volumes
> @@ -503,6 +515,115 @@ class BTRFSDeviceTestCase(DeviceStateTestCase):
>             "cannot directly set size of btrfs volume"):
>              self.dev1.size = 32
>  
> +    def testBTRFSSnapShotDeviceInit(self):
> +        parents = [StorageDevice("p1",
> fmt=blivet.formats.getFormat("btrfs"))]
> +        vol = BTRFSVolumeDevice("test", parents=parents)
> +        self.assertRaisesRegexp(ValueError,
> +                                "non-existent btrfs snapshots must have a
> source",
> +                                BTRFSSnapShotDevice,
> +                                "snap1", parents=[vol])
> +
> +        self.assertRaisesRegexp(ValueError,
> +                                "btrfs snapshot source must already exist",
> +                                BTRFSSnapShotDevice,
> +                                "snap1", parents=[vol], source=vol)
> +
> +        self.assertRaisesRegexp(ValueError,
> +                                "btrfs snapshot source must be a btrfs
> subvolume",
> +                                BTRFSSnapShotDevice,
> +                                "snap1", parents=[vol], source=parents[0])
> +
> +        parents2 = [StorageDevice("p1",
> fmt=blivet.formats.getFormat("btrfs"))]
> +        vol2 = BTRFSVolumeDevice("test2", parents=parents2, exists=True)
> +        self.assertRaisesRegexp(ValueError,
> +                                ".*snapshot and source must be in the same
> volume",
> +                                BTRFSSnapShotDevice,
> +                                "snap1", parents=[vol], source=vol2)
> +
> +        vol.exists = True
> +        snap = BTRFSSnapShotDevice("snap1", parents=[vol], source=vol)
> +        self.assertEqual(snap.isleaf, True)
> +        self.assertEqual(vol.isleaf, False)
> +
> +        self.assertEqual(snap.dependsOn(vol), True)
> +        self.assertEqual(vol.dependsOn(snap), False)
> +
> +class LVMDeviceTest(unittest.TestCase):
> +    def testLVMSnapShotDeviceInit(self):
> +        pv = StorageDevice("pv1", fmt=blivet.formats.getFormat("lvmpv"),
> +                           size=Size("1 GiB"))
> +        vg = LVMVolumeGroupDevice("testvg", parents=[pv])
> +        lv = LVMLogicalVolumeDevice("testlv", parents=[vg],
> +                                    fmt=blivet.formats.getFormat("xfs"))
> +
> +        self.assertRaisesRegexp(ValueError,
> +                                "lvm snapshot devices require an origin lv",
> +                                LVMSnapShotDevice,
> +                                "snap1", parents=[vg])
> +
> +        self.assertRaisesRegexp(ValueError,
> +                                "lvm snapshot origin volume must already
> exist",
> +                                LVMSnapShotDevice,
> +                                "snap1", parents=[vg], origin=lv)
> +
> +        self.assertRaisesRegexp(ValueError,
> +                                "lvm snapshot origin must be a logical
> volume",
> +                                LVMSnapShotDevice,
> +                                "snap1", parents=[vg], origin=pv)
> +
> +        self.assertRaisesRegexp(ValueError,
> +                                "only existing vorigin snapshots are
> supported",
> +                                LVMSnapShotDevice,
> +                                "snap1", parents=[vg], vorigin=True)
> +
> +        lv.exists = True
> +        snap1 = LVMSnapShotDevice("snap1", parents=[vg], origin=lv)
> +
> +        self.assertEqual(snap1.format, lv.format)
> +        snap1.format = blivet.formats.getFormat("DM_snapshot_cow",
> exists=True)
> +        self.assertEqual(snap1.format, lv.format)
> +
> +        self.assertEqual(snap1.isleaf, True)
> +        self.assertEqual(lv.isleaf, False)
> +
> +        self.assertEqual(snap1.dependsOn(lv), True)
> +        self.assertEqual(lv.dependsOn(snap1), False)
> +
> +    def testLVMThinSnapShotDeviceInit(self):
> +        pv = StorageDevice("pv1", fmt=blivet.formats.getFormat("lvmpv"),
> +                           size=Size("1 GiB"))
> +        vg = LVMVolumeGroupDevice("testvg", parents=[pv])
> +        pool = LVMThinPoolDevice("pool1", parents=[vg], size=Size("500
> MiB"))
> +        thinlv = LVMThinLogicalVolumeDevice("thinlv", parents=[pool],
> +                                            size=Size("200 MiB"))
> +
> +        self.assertRaisesRegexp(ValueError,
> +                                "lvm thin snapshots require an origin",
> +                                LVMThinSnapShotDevice,
> +                                "snap1", parents=[pool])
> +
> +        self.assertRaisesRegexp(ValueError,
> +                                "lvm snapshot origin volume must already
> exist",
> +                                LVMThinSnapShotDevice,
> +                                "snap1", parents=[pool], origin=thinlv)
> +
> +        self.assertRaisesRegexp(ValueError,
> +                                "lvm snapshot origin must be a logical
> volume",
> +                                LVMThinSnapShotDevice,
> +                                "snap1", parents=[pool], origin=pv)
> +
> +        # now make the constructor succeed so we can test some properties
> +        thinlv.exists = True
> +        snap1 = LVMThinSnapShotDevice("snap1", parents=[pool],
> origin=thinlv)
> +        self.assertEqual(snap1.isleaf, True)
> +        self.assertEqual(thinlv.isleaf, True)
> +
> +        self.assertEqual(snap1.dependsOn(thinlv), True)
> +        self.assertEqual(thinlv.dependsOn(snap1), False)
> +
> +        snap1.exists = True
> +        self.assertEqual(snap1.dependsOn(thinlv), False)
> +
>  class DeviceNameTestCase(unittest.TestCase):
>      """Test device name validation"""
>  
> diff --git a/tests/devicetree_test.py b/tests/devicetree_test.py
> index b0105f9..004afca 100644
> --- a/tests/devicetree_test.py
> +++ b/tests/devicetree_test.py
> @@ -8,6 +8,7 @@ from blivet import devicelibs
>  from blivet import devicefactory
>  from blivet import util
>  from blivet.udev import udev_trigger
> +from blivet.devices import LVMSnapShotDevice, LVMThinSnapShotDevice
>  
>  """
>      TODO:
> @@ -137,6 +138,27 @@ class LVMTestCase(BlivetResetTestCase):
>                                    None,
>                                    disks=self.blivet.disks[:])
>  
> +class LVMSnapShotTestCase(BlivetResetTestCase):
> +    def _set_up_storage(self):
> +        self.blivet.factoryDevice(devicefactory.DEVICE_TYPE_LVM,
> +                                  Size("1 GiB"),
> +                                  label="ROOT",
> +                                  disks=self.blivet.disks[:],
> +                                  container_name="blivet_test",
> +
> container_size=devicefactory.SIZE_POLICY_MAX)
> +
> +    def setUp(self):
> +        super(BlivetResetTestCase, self).setUp() # pylint:
> disable=bad-super-call
> +        root = self.blivet.lvs[0]
> +        snap = LVMSnapShotDevice("rootsnap1", parents=[root.vg],
> origin=root,
> +                                 size=Size("768MiB"))
> +        self.blivet.createDevice(snap)
> +        self.blivet.doIt()
> +
> +        self.device_attr_dicts = []
> +        self.collect_expected_data()
> +
> +
>  class LVMThinpTestCase(BlivetResetTestCase):
>      def _set_up_storage(self):
>          self.blivet.factoryDevice(devicefactory.DEVICE_TYPE_LVM,
> @@ -148,6 +170,25 @@ class LVMThinpTestCase(BlivetResetTestCase):
>                                    label="ROOT",
>                                    disks=self.blivet.disks[:])
>  
> +class LVMThinSnapShotTestCase(LVMThinpTestCase):
> +    def _set_up_storage(self):
> +        self.blivet.factoryDevice(devicefactory.DEVICE_TYPE_LVM_THINP,
> +                                  Size("1 GiB"),
> +                                  label="ROOT",
> +                                  disks=self.blivet.disks[:])
> +
> +    def setUp(self):
> +        super(BlivetResetTestCase, self).setUp() # pylint:
> disable=bad-super-call
> +
> +        root = self.blivet.thinlvs[0]
> +        snap = LVMThinSnapShotDevice("rootsnap1", parents=[root.pool],
> +                                     origin=root)
> +        self.blivet.createDevice(snap)
> +        self.blivet.doIt()
> +
> +        self.device_attr_dicts = []
> +        self.collect_expected_data()
> +
>  class LVMRaidTestCase(BlivetResetTestCase):
>      def _set_up_storage(self):
>          # This isn't exactly autopart, but it should be plenty close to it.
> --
> 1.9.0
> 
> _______________________________________________
> anaconda-patches mailing list
> anaconda-patches at lists.fedorahosted.org
> https://lists.fedorahosted.org/mailman/listinfo/anaconda-patches
> 

It looks to me like some of these new classes ought to get the
@unittest.skipUnless(os.environ.get("JENKINS_HOME"), "jenkins only test")
decorator.

- mulhern


More information about the anaconda-patches mailing list