def test_get_related_disks(self): tree = DeviceTree() sda = DiskDevice("sda", size=Size('300g')) sdb = DiskDevice("sdb", size=Size('300g')) sdc = DiskDevice("sdc", size=Size('300G')) tree._add_device(sda) tree._add_device(sdb) tree._add_device(sdc) self.assertTrue(sda in tree.devices) self.assertTrue(sdb in tree.devices) self.assertTrue(sdc in tree.devices) sda.format = get_format("lvmpv", device=sda.path) sdb.format = get_format("lvmpv", device=sdb.path) vg = LVMVolumeGroupDevice("relvg", parents=[sda, sdb]) tree._add_device(vg) self.assertEqual(tree.get_related_disks(sda), set([sda, sdb])) self.assertEqual(tree.get_related_disks(sdb), set([sda, sdb])) self.assertEqual(tree.get_related_disks(sdc), set()) tree.hide(sda) self.assertEqual(tree.get_related_disks(sda), set([sda, sdb])) self.assertEqual(tree.get_related_disks(sdb), set([sda, sdb])) tree.hide(sdb) self.assertEqual(tree.get_related_disks(sda), set([sda, sdb])) self.assertEqual(tree.get_related_disks(sdb), set([sda, sdb])) tree.unhide(sda) self.assertEqual(tree.get_related_disks(sda), set([sda, sdb])) self.assertEqual(tree.get_related_disks(sdb), set([sda, sdb]))
def test_device_name(self): # check that devicetree.names property contains all device's names # mock lvs_info to avoid blockdev call allowing run as non-root with patch.object(LVsInfo, 'cache', new_callable=PropertyMock) as mock_lvs_cache: mock_lvs_cache.return_value = { "sdmock": "dummy", "testvg-testlv": "dummy" } tree = DeviceTree() dev_names = ["sda", "sdb", "sdc"] for dev_name in dev_names: dev = DiskDevice(dev_name, size=Size("1 GiB")) tree._add_device(dev) self.assertTrue(dev in tree.devices) self.assertTrue(dev.name in tree.names) dev.format = get_format("lvmpv", device=dev.path) vg = LVMVolumeGroupDevice("testvg", parents=[dev]) tree._add_device(vg) dev_names.append(vg.name) lv = LVMLogicalVolumeDevice("testlv", parents=[vg]) tree._add_device(lv) dev_names.append(lv.name) # frobnicate a bit with the hidden status of the devices: # * hide sda # * hide and unhide again sdb # * leave sdc unchanged tree.hide(tree.get_device_by_name("sda")) tree.hide(tree.get_device_by_name("sdb")) tree.unhide(tree.get_device_by_name("sdb", hidden=True)) # some lvs names may be already present in the system (mocked) lv_info = list(lvs_info.cache.keys()) # all devices should still be present in the tree.names self.assertEqual(set(tree.names), set(lv_info + dev_names)) # "remove" the LV, it should no longer be in the list tree.actions._actions.append( Mock(device=lv, type=ACTION_TYPE_DESTROY, obj=ACTION_OBJECT_DEVICE)) tree._remove_device(lv) self.assertFalse(lv.name in tree.names)
def test_hide_ignored_disks(self): tree = DeviceTree() sda = DiskDevice("sda") sdb = DiskDevice("sdb") sdc = DiskDevice("sdc") tree._add_device(sda) tree._add_device(sdb) tree._add_device(sdc) self.assertTrue(sda in tree.devices) self.assertTrue(sdb in tree.devices) self.assertTrue(sdc in tree.devices) # test ignored_disks tree.ignored_disks = ["sdb"] # verify hide is called as expected with patch.object(tree, "hide") as hide: tree._hide_ignored_disks() hide.assert_called_with(sdb) # verify that hide works as expected tree._hide_ignored_disks() self.assertTrue(sda in tree.devices) self.assertFalse(sdb in tree.devices) self.assertTrue(sdc in tree.devices) # unhide sdb and make sure it works tree.unhide(sdb) self.assertTrue(sda in tree.devices) self.assertTrue(sdb in tree.devices) self.assertTrue(sdc in tree.devices) # test exclusive_disks tree.ignored_disks = [] tree.exclusive_disks = ["sdc"] with patch.object(tree, "hide") as hide: tree._hide_ignored_disks() hide.assert_any_call(sda) hide.assert_any_call(sdb) tree._hide_ignored_disks() self.assertFalse(sda in tree.devices) self.assertFalse(sdb in tree.devices) self.assertTrue(sdc in tree.devices) tree.unhide(sda) tree.unhide(sdb) self.assertTrue(sda in tree.devices) self.assertTrue(sdb in tree.devices) self.assertTrue(sdc in tree.devices) # now test exclusive_disks special cases for multipath sda.format = get_format("multipath_member", exists=True) sdb.format = get_format("multipath_member", exists=True) sdc.format = get_format("multipath_member", exists=True) mpatha = MultipathDevice("mpatha", parents=[sda, sdb, sdc]) tree._add_device(mpatha) tree.ignored_disks = [] tree.exclusive_disks = ["mpatha"] with patch.object(tree, "hide") as hide: tree._hide_ignored_disks() self.assertFalse(hide.called) tree._hide_ignored_disks() self.assertTrue(sda in tree.devices) self.assertTrue(sdb in tree.devices) self.assertTrue(sdc in tree.devices) self.assertTrue(mpatha in tree.devices) # all members in exclusive_disks implies the mpath in exclusive_disks tree.exclusive_disks = ["sda", "sdb", "sdc"] with patch.object(tree, "hide") as hide: tree._hide_ignored_disks() self.assertFalse(hide.called) tree._hide_ignored_disks() self.assertTrue(sda in tree.devices) self.assertTrue(sdb in tree.devices) self.assertTrue(sdc in tree.devices) self.assertTrue(mpatha in tree.devices) tree.exclusive_disks = ["sda", "sdb"] with patch.object(tree, "hide") as hide: tree._hide_ignored_disks() hide.assert_any_call(mpatha) hide.assert_any_call(sdc) # verify that hide works as expected tree._hide_ignored_disks() self.assertTrue(sda in tree.devices) self.assertTrue(sdb in tree.devices) self.assertFalse(sdc in tree.devices) self.assertFalse(mpatha in tree.devices)