def testEmptyDevs(self): """ Adding an empty list of cache devs should have no effect. """ managed_objects = \ ObjectManager.Methods.GetManagedObjects(self._proxy, {}) (pool, _) = next( pools(props={ 'Name': self._POOLNAME }).search(managed_objects)) blockdevs1 = blockdevs(props={ 'Pool': pool, 'Tier': 0 }).search(managed_objects) self.assertEqual(self._devpaths, frozenset(op for (op, _) in blockdevs1)) blockdevs2 = blockdevs(props={ 'Pool': pool, 'Tier': 1 }).search(managed_objects) self.assertEqual(list(blockdevs2), []) (result, rc, _) = Pool.Methods.AddCacheDevs(self._pool_object, {'devices': []}) self.assertEqual(len(result), 0) self.assertEqual(rc, StratisdErrors.OK) managed_objects = \ ObjectManager.Methods.GetManagedObjects(self._proxy, {}) blockdevs3 = blockdevs(props={'Pool': pool}).search(managed_objects) self.assertEqual(frozenset(op for (op, _) in blockdevs3), self._devpaths)
def testExecution(self): """ The pool was just created, so it must always be possible to destroy it. """ managed_objects = \ ObjectManager.Methods.GetManagedObjects(self._proxy, {}) (pool1, _) = next( pools(props={ 'Name': self._POOLNAME }).search(managed_objects)) blockdevs1 = blockdevs(props={'Pool': pool1}).search(managed_objects) self.assertEqual( frozenset(MOBlockDev(b).Devnode() for (_, b) in blockdevs1), frozenset(d for d in self._devices)) (result, rc, _) = \ Manager.Methods.DestroyPool(self._proxy, {'pool': pool1}) managed_objects = \ ObjectManager.Methods.GetManagedObjects(self._proxy, {}) blockdevs2 = blockdevs(props={'Pool': pool1}).search(managed_objects) pool2 = next( pools(props={ 'Name': self._POOLNAME }).search(managed_objects), None) self.assertEqual(rc, StratisdErrors.OK) self.assertIsNone(pool2) self.assertTrue(result) self.assertEqual(len(list(blockdevs2)), 0)
def testEmptyDevs(self): """ Adding an empty list of devs should leave the pool empty. """ managed_objects = \ ObjectManager.Methods.GetManagedObjects(self._proxy, {}) (pool, _) = next( pools(props={ 'Name': self._POOLNAME }).search(managed_objects)) blockdevs1 = blockdevs(props={'Pool': pool}).search(managed_objects) self.assertEqual(list(blockdevs1), []) (result, rc, _) = Pool.Methods.AddDataDevs(self._pool_object, {'devices': []}) self.assertEqual(result, []) self.assertEqual(rc, StratisdErrors.OK) managed_objects = \ ObjectManager.Methods.GetManagedObjects(self._proxy, {}) blockdevs2 = blockdevs(props={'Pool': pool}).search(managed_objects) self.assertEqual(list(blockdevs2), []) blockdevs3 = blockdevs(props={}).search(managed_objects) self.assertEqual(list(blockdevs3), [])
def test_empty_devs(self): """ Adding an empty list of devs should fail. """ managed_objects = ObjectManager.Methods.GetManagedObjects( self._proxy, {}) (pool, _) = next( pools(props={ "Name": self._POOLNAME }).search(managed_objects)) blockdevs1 = blockdevs(props={"Pool": pool}).search(managed_objects) self.assertEqual(len(list(blockdevs1)), len(self._data_devices)) ((is_some, _), return_code, _) = Pool.Methods.AddDataDevs(self._pool_object, {"devices": []}) self.assertFalse(is_some) self.assertEqual(return_code, StratisdErrors.OK) managed_objects = ObjectManager.Methods.GetManagedObjects( self._proxy, {}) blockdevs2 = blockdevs(props={"Pool": pool}).search(managed_objects) self.assertEqual(len(list(blockdevs2)), len(self._data_devices)) blockdevs3 = blockdevs(props={}).search(managed_objects) self.assertEqual(len(list(blockdevs3)), len(self._data_devices))
def testEmptyDevs(self): """ Adding an empty list of cache devs should have no effect. """ managed_objects = \ ObjectManager.Methods.GetManagedObjects(self._proxy, {}) (pool, _) = next( pools(props={ 'Name': self._POOLNAME }).search(managed_objects)) (result, rc, _) = Pool.Methods.AddCacheDevs(self._pool_object, { 'force': False, 'devices': [] }) self.assertEqual(len(result), 0) self.assertEqual(rc, StratisdErrors.OK) managed_objects = \ ObjectManager.Methods.GetManagedObjects(self._proxy, {}) blockdevs2 = blockdevs(props={'Pool': pool}).search(managed_objects) self.assertEqual(list(blockdevs2), []) blockdevs3 = blockdevs().search(managed_objects) self.assertEqual(list(blockdevs3), [])
def testEmptyDevs(self): """ Adding an empty list of cache devs should have no effect. """ managed_objects = ObjectManager.Methods.GetManagedObjects( self._proxy, {}) (pool, _) = next( pools(props={ "Name": self._POOLNAME }).search(managed_objects)) ((is_some, result), rc, _) = Pool.Methods.AddCacheDevs(self._pool_object, {"devices": []}) self.assertFalse(is_some) self.assertEqual(len(result), 0) self.assertEqual(rc, StratisdErrors.OK) managed_objects = ObjectManager.Methods.GetManagedObjects( self._proxy, {}) blockdevs2 = blockdevs(props={"Pool": pool}).search(managed_objects) self.assertEqual(list(blockdevs2), []) blockdevs3 = blockdevs().search(managed_objects) self.assertEqual(list(blockdevs3), [])
def test_some_devs(self): """ Adding a non-empty list of devs should increase the number of devs in the pool. """ managed_objects = ObjectManager.Methods.GetManagedObjects( self._proxy, {}) (pool, _) = next( pools(props={ "Name": self._POOLNAME }).search(managed_objects)) blockdevs1 = blockdevs(props={"Pool": pool}).search(managed_objects) self.assertEqual(len(list(blockdevs1)), len(self._data_devices)) ((is_some, result), return_code, _) = Pool.Methods.AddDataDevs(self._pool_object, {"devices": _DEVICE_STRATEGY()}) num_devices_added = len(result) managed_objects = ObjectManager.Methods.GetManagedObjects( self._proxy, {}) if return_code == StratisdErrors.OK: self.assertTrue(is_some) self.assertGreater(num_devices_added, 0) else: self.assertFalse(is_some) self.assertEqual(num_devices_added, 0) blockdev_object_paths = frozenset(result) # blockdevs exported on the D-Bus are those added and the existing data devs blockdevs2 = list( blockdevs(props={ "Pool": pool }).search(managed_objects)) blockdevs2_object_paths = frozenset([op for (op, _) in blockdevs2]) self.assertEqual( blockdevs2_object_paths, blockdev_object_paths.union(frozenset(self._blockdev_paths)), ) # no duplicates in the object paths self.assertEqual( len(blockdevs2) - len(self._blockdev_paths), num_devices_added) # There are no blockdevs but for those in this pool blockdevs3 = blockdevs(props={}).search(managed_objects) self.assertEqual(len(list(blockdevs3)), num_devices_added + len(self._data_devices)) # There are no cachedevs belonging to this pool blockdevs4 = blockdevs(props={ "Pool": pool, "Tier": 1 }).search(managed_objects) self.assertEqual(list(blockdevs4), [])
def testSomeDevs(self): """ Adding a non-empty list of cache devs should succeed. """ managed_objects = \ ObjectManager.Methods.GetManagedObjects(self._proxy, {}) (pool, _) = next( pools(props={ 'Name': self._POOLNAME }).search(managed_objects)) blockdevs1 = blockdevs(props={ 'Pool': pool, 'Tier': 0 }).search(managed_objects) self.assertEqual(self._devpaths, frozenset(op for (op, _) in blockdevs1)) (result, rc, _) = Pool.Methods.AddCacheDevs(self._pool_object, { 'force': False, 'devices': _DEVICE_STRATEGY.example() }) num_devices_added = len(result) managed_objects = \ ObjectManager.Methods.GetManagedObjects(self._proxy, {}) if rc == StratisdErrors.OK: self.assertGreater(num_devices_added, 0) else: self.assertEqual(num_devices_added, 0) blockdev_object_paths = frozenset(result) # cache blockdevs exported on the D-Bus are exactly those added blockdevs2 = list( blockdevs(props={ 'Pool': pool, 'Tier': 1 }).search(managed_objects)) self.assertEqual(frozenset(op for (op, _) in blockdevs2), blockdev_object_paths) # no duplicates in the object paths self.assertEqual(len(blockdevs2), num_devices_added) # There are no blockdevs but for those in this pool blockdevs3 = blockdevs(props={'Pool': pool}).search(managed_objects) blockdevs4 = blockdevs().search(managed_objects) self.assertEqual(len(list(blockdevs3)), len(list(blockdevs4))) # The number of datadevs has remained the same blockdevs5 = blockdevs(props={ 'Pool': pool, 'Tier': 0 }).search(managed_objects) self.assertEqual(frozenset(op for (op, _) in blockdevs5), self._devpaths)
def testSomeDevs(self): """ Adding a non-empty list of devs should increase the number of devs in the pool. """ managed_objects = \ ObjectManager.Methods.GetManagedObjects(self._proxy, {}) (pool, _) = next( pools(props={ 'Name': self._POOLNAME }).search(managed_objects)) blockdevs1 = blockdevs(props={'Pool': pool}).search(managed_objects) self.assertEqual(list(blockdevs1), []) (result, rc, _) = Pool.Methods.AddDataDevs(self._pool_object, {'devices': _DEVICE_STRATEGY.example()}) num_devices_added = len(result) managed_objects = \ ObjectManager.Methods.GetManagedObjects(self._proxy, {}) if rc == StratisdErrors.OK: self.assertGreater(num_devices_added, 0) else: self.assertEqual(num_devices_added, 0) blockdev_object_paths = frozenset(result) # blockdevs exported on the D-Bus are exactly those added blockdevs2 = list( blockdevs(props={ 'Pool': pool }).search(managed_objects)) blockdevs2_object_paths = frozenset([op for (op, _) in blockdevs2]) self.assertEqual(blockdevs2_object_paths, blockdev_object_paths) # no duplicates in the object paths self.assertEqual(len(blockdevs2), num_devices_added) # There are no blockdevs but for those in this pool blockdevs3 = blockdevs(props={}).search(managed_objects) self.assertEqual(len(list(blockdevs3)), num_devices_added) # There are no cachedevs belonging to this pool blockdevs4 = blockdevs(props={ 'Pool': pool, 'Tier': 1 }).search(managed_objects) self.assertEqual(list(blockdevs4), [])
def testSomeDevs(self): """ Adding a non-empty list of cache devs should succeed. """ managed_objects = ObjectManager.Methods.GetManagedObjects( self._proxy, {}) (pool, _) = next( pools(props={ "Name": self._POOLNAME }).search(managed_objects)) ((is_some, result), rc, _) = Pool.Methods.AddCacheDevs(self._pool_object, {"devices": _DEVICE_STRATEGY()}) num_devices_added = len(result) managed_objects = ObjectManager.Methods.GetManagedObjects( self._proxy, {}) if rc == StratisdErrors.OK: self.assertTrue(is_some) self.assertGreater(num_devices_added, 0) else: self.assertFalse(is_some) self.assertEqual(num_devices_added, 0) blockdev_paths = frozenset(result) # blockdevs exported on the D-Bus are exactly those added blockdevs2 = list( blockdevs(props={ "Pool": pool }).search(managed_objects)) blockdevs2_paths = frozenset([op for (op, _) in blockdevs2]) self.assertEqual(blockdevs2_paths, blockdev_paths) # no duplicates in the object paths self.assertEqual(len(blockdevs2), num_devices_added) # There are no blockdevs but for those in this pool blockdevs3 = blockdevs().search(managed_objects) self.assertEqual(len(list(blockdevs3)), num_devices_added) # There are no datadevs belonging to this pool blockdevs4 = blockdevs(props={ "Pool": pool, "Tier": 0 }).search(managed_objects) self.assertEqual(list(blockdevs4), [])
def _get_block_device_sizes(pool_object_path, managed_objects): """ Get sizes of block devices. :param pool_object_path: The object path of the designated pool. :param managed_objects: managed objects dict """ modevs = [ MOBlockDev(info) for objpath, info in blockdevs(props={"Pool": pool_object_path}).search( managed_objects ) ] block_devices = [modev.PhysicalPath() for modev in modevs] return [_call_blockdev_size(dev) for dev in block_devices]