Exemple #1
0
    def get_quota_usage_by_tenant(self, tenant_id, resource):
        """Get a specific quota usage by tenant."""

        quotas = QuotaUsage.find_all(tenant_id=tenant_id, resource=resource).all()
        if len(quotas) == 0:
            return QuotaUsage.create(tenant_id=tenant_id, in_use=0, reserved=0, resource=resource)
        return quotas[0]
Exemple #2
0
    def test_reserve(self):

        FAKE_QUOTAS = [
            QuotaUsage(id=1,
                       tenant_id=FAKE_TENANT1,
                       resource=Resource.INSTANCES,
                       in_use=1,
                       reserved=2),
            QuotaUsage(id=2,
                       tenant_id=FAKE_TENANT1,
                       resource=Resource.VOLUMES,
                       in_use=1,
                       reserved=1)
        ]

        self.mock_quota_result.all = Mock(return_value=[])
        self.mock_usage_result.all = Mock(return_value=FAKE_QUOTAS)
        QuotaUsage.save = Mock()
        Reservation.create = Mock()

        delta = {'instances': 2, 'volumes': 3}
        self.driver.reserve(FAKE_TENANT1, resources, delta)
        _, kw = Reservation.create.call_args_list[0]
        self.assertEquals(1, kw['usage_id'])
        self.assertEquals(2, kw['delta'])
        self.assertEquals(Reservation.Statuses.RESERVED, kw['status'])
        _, kw = Reservation.create.call_args_list[1]
        self.assertEquals(2, kw['usage_id'])
        self.assertEquals(3, kw['delta'])
        self.assertEquals(Reservation.Statuses.RESERVED, kw['status'])
Exemple #3
0
    def test_get_all_quota_usages_by_tenant_with_one_default(self):

        FAKE_QUOTAS = [
            QuotaUsage(tenant_id=FAKE_TENANT1,
                       resource=Resource.INSTANCES,
                       in_use=0,
                       reserved=0)
        ]

        NEW_FAKE_QUOTA = QuotaUsage(tenant_id=FAKE_TENANT1,
                                    resource=Resource.VOLUMES,
                                    in_use=0,
                                    reserved=0)
        self.mock_usage_result.all = Mock(return_value=FAKE_QUOTAS)
        QuotaUsage.create = Mock(return_value=NEW_FAKE_QUOTA)

        usages = self.driver.get_all_quota_usages_by_tenant(
            FAKE_TENANT1, resources.keys())

        self.assertEquals(FAKE_TENANT1, usages[Resource.INSTANCES].tenant_id)
        self.assertEquals(Resource.INSTANCES,
                          usages[Resource.INSTANCES].resource)
        self.assertEquals(0, usages[Resource.INSTANCES].in_use)
        self.assertEquals(0, usages[Resource.INSTANCES].reserved)
        self.assertEquals(FAKE_TENANT1, usages[Resource.VOLUMES].tenant_id)
        self.assertEquals(Resource.VOLUMES, usages[Resource.VOLUMES].resource)
        self.assertEquals(0, usages[Resource.VOLUMES].in_use)
        self.assertEquals(0, usages[Resource.VOLUMES].reserved)
Exemple #4
0
    def test_get_all_quota_usages_by_tenant(self):

        FAKE_QUOTAS = [
            QuotaUsage(tenant_id=FAKE_TENANT1,
                       resource=Resource.INSTANCES,
                       in_use=2,
                       reserved=1),
            QuotaUsage(tenant_id=FAKE_TENANT1,
                       resource=Resource.VOLUMES,
                       in_use=1,
                       reserved=1)
        ]

        self.mock_usage_result.all = Mock(return_value=FAKE_QUOTAS)

        usages = self.driver.get_all_quota_usages_by_tenant(
            FAKE_TENANT1, resources.keys())

        self.assertEquals(FAKE_TENANT1, usages[Resource.INSTANCES].tenant_id)
        self.assertEquals(Resource.INSTANCES,
                          usages[Resource.INSTANCES].resource)
        self.assertEquals(2, usages[Resource.INSTANCES].in_use)
        self.assertEquals(1, usages[Resource.INSTANCES].reserved)
        self.assertEquals(FAKE_TENANT1, usages[Resource.VOLUMES].tenant_id)
        self.assertEquals(Resource.VOLUMES, usages[Resource.VOLUMES].resource)
        self.assertEquals(1, usages[Resource.VOLUMES].in_use)
        self.assertEquals(1, usages[Resource.VOLUMES].reserved)
Exemple #5
0
    def test_rollback(self):

        Reservation.save = Mock()
        QuotaUsage.save = Mock()

        FAKE_QUOTAS = [QuotaUsage(id=1,
                                  tenant_id=FAKE_TENANT1,
                                  resource=Resource.INSTANCES,
                                  in_use=5,
                                  reserved=2),
                       QuotaUsage(id=2,
                                  tenant_id=FAKE_TENANT1,
                                  resource=Resource.VOLUMES,
                                  in_use=1,
                                  reserved=2)]

        FAKE_RESERVATIONS = [Reservation(usage_id=1,
                                         delta=1,
                                         status=Reservation.Statuses.RESERVED),
                             Reservation(usage_id=2,
                                         delta=2,
                                         status=Reservation.Statuses.RESERVED)]

        QuotaUsage.find_by = Mock(side_effect=FAKE_QUOTAS)
        self.driver.rollback(FAKE_RESERVATIONS)

        self.assertEqual(5, FAKE_QUOTAS[0].in_use)
        self.assertEqual(1, FAKE_QUOTAS[0].reserved)
        self.assertEqual(Reservation.Statuses.ROLLEDBACK,
                         FAKE_RESERVATIONS[0].status)

        self.assertEqual(1, FAKE_QUOTAS[1].in_use)
        self.assertEqual(0, FAKE_QUOTAS[1].reserved)
        self.assertEqual(Reservation.Statuses.ROLLEDBACK,
                         FAKE_RESERVATIONS[1].status)
Exemple #6
0
    def get_quota_usage_by_tenant(self, tenant_id, resource):
        """Get a specific quota usage by tenant."""

        quotas = QuotaUsage.find_all(tenant_id=tenant_id,
                                     resource=resource).all()
        if len(quotas) == 0:
            return QuotaUsage.create(tenant_id=tenant_id,
                                     in_use=0,
                                     reserved=0,
                                     resource=resource)
        return quotas[0]
Exemple #7
0
    def get_all_quota_usages_by_tenant(self, tenant_id, resources):
        """
        Retrieve the quota usagess for the given tenant.

        :param tenant_id: The ID of the tenant to return quotas for.
        :param resources: A list of the registered resources to get.
        """

        all_usages = QuotaUsage.find_all(tenant_id=tenant_id).all()
        result_usages = dict((usage.resource, usage) for usage in all_usages if usage.resource in resources)
        if len(result_usages) != len(resources):
            for resource in resources:
                # Not in the DB, return default value
                if resource not in result_usages:
                    usage = QuotaUsage.create(tenant_id=tenant_id, in_use=0, reserved=0, resource=resource)
                    result_usages[resource] = usage

        return result_usages
Exemple #8
0
    def test_reserve_over_quota_with_reserved(self):

        FAKE_QUOTAS = [
            QuotaUsage(id=1,
                       tenant_id=FAKE_TENANT1,
                       resource=Resource.INSTANCES,
                       in_use=1,
                       reserved=2),
            QuotaUsage(id=2,
                       tenant_id=FAKE_TENANT1,
                       resource=Resource.VOLUMES,
                       in_use=0,
                       reserved=0)
        ]

        self.mock_quota_result.all = Mock(return_value=[])
        self.mock_usage_result.all = Mock(return_value=FAKE_QUOTAS)

        delta = {'instances': 4, 'volumes': 2}
        self.assertRaises(exception.QuotaExceeded, self.driver.reserve,
                          FAKE_TENANT1, resources, delta)
Exemple #9
0
    def rollback(self, reservations):
        """Roll back reservations.

        :param reservations: A list of the reservation UUIDs, as
                             returned by the reserve() method.
        """

        for reservation in reservations:
            usage = QuotaUsage.find_by(id=reservation.usage_id)
            usage.reserved -= reservation.delta
            reservation.status = Reservation.Statuses.ROLLEDBACK
            usage.save()
            reservation.save()
Exemple #10
0
    def get_all_quota_usages_by_tenant(self, tenant_id, resources):
        """
        Retrieve the quota usagess for the given tenant.

        :param tenant_id: The ID of the tenant to return quotas for.
        :param resources: A list of the registered resources to get.
        """

        all_usages = QuotaUsage.find_all(tenant_id=tenant_id).all()
        result_usages = dict((usage.resource, usage) for usage in all_usages
                             if usage.resource in resources)
        if len(result_usages) != len(resources):
            for resource in resources:
                # Not in the DB, return default value
                if resource not in result_usages:
                    usage = QuotaUsage.create(tenant_id=tenant_id,
                                              in_use=0,
                                              reserved=0,
                                              resource=resource)
                    result_usages[resource] = usage

        return result_usages
Exemple #11
0
    def rollback(self, reservations):
        """Roll back reservations.

        :param reservations: A list of the reservation UUIDs, as
                             returned by the reserve() method.
        """

        for reservation in reservations:
            usage = QuotaUsage.find_by(id=reservation.usage_id)
            usage.reserved -= reservation.delta
            reservation.status = Reservation.Statuses.ROLLEDBACK
            usage.save()
            reservation.save()
Exemple #12
0
    def commit(self, reservations):
        """Commit reservations.

        :param reservations: A list of the reservation UUIDs, as
                             returned by the reserve() method.
        """

        for reservation in reservations:
            usage = QuotaUsage.find_by(id=reservation.usage_id)
            usage.in_use += reservation.delta
            usage.reserved -= reservation.delta
            reservation.status = Reservation.Statuses.COMMITTED
            usage.save()
            reservation.save()
Exemple #13
0
    def commit(self, reservations):
        """Commit reservations.

        :param reservations: A list of the reservation UUIDs, as
                             returned by the reserve() method.
        """

        for reservation in reservations:
            usage = QuotaUsage.find_by(id=reservation.usage_id)
            usage.in_use += reservation.delta
            usage.reserved -= reservation.delta
            reservation.status = Reservation.Statuses.COMMITTED
            usage.save()
            reservation.save()
Exemple #14
0
    def test_get_quota_usage_by_tenant(self):

        FAKE_QUOTAS = [QuotaUsage(tenant_id=FAKE_TENANT1,
                                  resource=Resource.VOLUMES,
                                  in_use=3,
                                  reserved=1)]

        self.mock_usage_result.all = Mock(return_value=FAKE_QUOTAS)

        usage = self.driver.get_quota_usage_by_tenant(FAKE_TENANT1,
                                                      Resource.VOLUMES)

        self.assertEquals(FAKE_TENANT1, usage.tenant_id)
        self.assertEquals(Resource.VOLUMES, usage.resource)
        self.assertEquals(3, usage.in_use)
        self.assertEquals(1, usage.reserved)
Exemple #15
0
    def test_get_quota_usage_by_tenant_default(self):

        FAKE_QUOTA = QuotaUsage(tenant_id=FAKE_TENANT1,
                                resource=Resource.VOLUMES,
                                in_use=0,
                                reserved=0)

        self.mock_usage_result.all = Mock(return_value=[])
        QuotaUsage.create = Mock(return_value=FAKE_QUOTA)

        usage = self.driver.get_quota_usage_by_tenant(FAKE_TENANT1,
                                                      Resource.VOLUMES)

        self.assertEquals(FAKE_TENANT1, usage.tenant_id)
        self.assertEquals(Resource.VOLUMES, usage.resource)
        self.assertEquals(0, usage.in_use)
        self.assertEquals(0, usage.reserved)