Example #1
0
    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)
Example #2
0
    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)
Example #3
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), [])
Example #4
0
    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))
Example #5
0
    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), [])
Example #7
0
    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), [])
Example #8
0
    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)
Example #9
0
    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), [])
Example #10
0
    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), [])
Example #11
0
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]