def test_reset(self): dt = DeviceTree() names = ["fakedev1", "fakedev2"] for name in names: device = Mock(name=name, spec=StorageDevice, parents=[], exists=True) dt._devices.append(device) dt.names = names[:] dt.actions._actions.append(Mock(name="fake action")) lvm.lvm_cc_addFilterRejectRegexp("xxx") lvm.config_args_data["filterAccepts"].append("yyy") dt.ignored_disks.append(names[0]) dt.exclusive_disks.append(names[1]) dt._hidden.append(dt._devices.pop(1)) dt.edd_dict = {"a": 22} dt.reset() empty_list = list() self.assertEqual(dt._devices, empty_list) self.assertEqual(list(dt.actions), empty_list) self.assertIsInstance(dt.actions, ActionList) self.assertEqual(dt._hidden, empty_list) self.assertEqual(lvm.config_args_data["filterAccepts"], empty_list) self.assertEqual(lvm.config_args_data["filterRejects"], empty_list) self.assertEqual(dt.exclusive_disks, empty_list) self.assertEqual(dt.ignored_disks, empty_list) self.assertEqual(dt.edd_dict, dict())
def test_recursive_remove(self): dt = DeviceTree() dev1 = StorageDevice("dev1", exists=False, parents=[]) dev2 = StorageDevice("dev2", exists=False, parents=[dev1]) dt._add_device(dev1) dt._add_device(dev2) # normal self.assertTrue(dev1 in dt.devices) self.assertTrue(dev2 in dt.devices) self.assertEqual(dt.actions._actions, list()) dt.recursive_remove(dev1) self.assertFalse(dev1 in dt.devices) self.assertFalse(dev2 in dt.devices) self.assertNotEqual(dt.actions._actions, list()) dt.reset() dt._add_device(dev1) dt._add_device(dev2, new=False) # restore parent/child relationships # remove_device clears descendants and formatting but preserves the device dev1.format = get_format("swap") self.assertEqual(dev1.format.type, "swap") self.assertEqual(dt.actions._actions, list()) dt.recursive_remove(dev1, remove_device=False) self.assertTrue(dev1 in dt.devices) self.assertFalse(dev2 in dt.devices) self.assertEqual(dev1.format.type, None) self.assertNotEqual(dt.actions._actions, list()) dt.reset() dt._add_device(dev1) dt._add_device(dev2, new=False) # restore parent/child relationships # actions=False performs the removals without scheduling actions self.assertEqual(dt.actions._actions, list()) dt.recursive_remove(dev1, actions=False) self.assertFalse(dev1 in dt.devices) self.assertFalse(dev2 in dt.devices) self.assertEqual(dt.actions._actions, list()) dt.reset() dt._add_device(dev1) dt._add_device(dev2, new=False) # restore parent/child relationships # modparent only works when actions=False is passed with patch.object(dt, "_remove_device") as remove_device: dt.recursive_remove(dev1, actions=False) remove_device.assert_called_with(dev1, modparent=True) dt.recursive_remove(dev1, actions=False, modparent=False) remove_device.assert_called_with(dev1, modparent=False)