def test_availability_mdraidplugin(self): availability.CACHE_AVAILABILITY = False availability.BLOCKDEV_DM_PLUGIN._method = availability.AvailableMethod # if the plugin is not in, there's nothing to test self.assertIn(availability.BLOCKDEV_MDRAID_PLUGIN, self.luks.external_dependencies) # dev is not among its unavailable dependencies availability.BLOCKDEV_MDRAID_PLUGIN._method = availability.AvailableMethod availability.MKFS_HFSPLUS_APP._method = availability.AvailableMethod # macefi self.assertNotIn(availability.BLOCKDEV_MDRAID_PLUGIN, self.luks.unavailable_dependencies) self.assertIsNotNone(ActionCreateDevice(self.luks)) self.assertIsNotNone(ActionDestroyDevice(self.luks)) self.assertIsNotNone( ActionCreateFormat(self.luks, fmt=get_format("macefi"))) self.assertIsNotNone(ActionDestroyFormat(self.luks)) # dev is among the unavailable dependencies availability.BLOCKDEV_MDRAID_PLUGIN._method = availability.UnavailableMethod self.assertIn(availability.BLOCKDEV_MDRAID_PLUGIN, self.luks.unavailable_dependencies) with self.assertRaises(ValueError): ActionCreateDevice(self.luks) with self.assertRaises(ValueError): ActionDestroyDevice(self.dev) with self.assertRaises(ValueError): ActionCreateFormat(self.dev) with self.assertRaises(ValueError): ActionDestroyFormat(self.dev)
def test_dependencies_handling(self): device = StorageDevice("testdev1") self.assertTrue(device.controllable) self.assertIsNotNone(ActionCreateDevice(device)) device.exists = True self.assertIsNotNone(ActionDestroyDevice(device)) with patch.object(StorageDevice, "resizable", new_callable=PropertyMock(return_value=True)): self.assertIsNotNone(ActionResizeDevice(device, Size("1 GiB"))) # if any external dependency is missing, it should be impossible to create, destroy, setup, # teardown, or resize the device (controllable encompasses setup & teardown) with patch.object(StorageDevice, "_external_dependencies", new_callable=PropertyMock(return_value=[ availability.unavailable_resource("testing") ])): device = StorageDevice("testdev1") self.assertFalse(device.controllable) self.assertRaises(DependencyError, ActionCreateDevice, device) device.exists = True self.assertRaises(DependencyError, ActionDestroyDevice, device) self.assertRaises(ValueError, ActionResizeDevice, device, Size("1 GiB")) # same goes for formats, except that the properties they affect vary by format class fmt = get_format("lvmpv") fmt._plugin = availability.available_resource("lvm-testing") self.assertTrue(fmt.supported) self.assertTrue(fmt.formattable) self.assertTrue(fmt.destroyable) fmt._plugin = availability.unavailable_resource("lvm-testing") self.assertFalse(fmt.supported) self.assertFalse(fmt.formattable) self.assertFalse(fmt.destroyable)