def test_bless_quota(self): def assert_quotas(expected_increased): _pre_usages = dict(pre_usages) _pre_usages.pop('project_id', None) post_usages = sqlalchemy_db.quota_usage_get_all_by_project(self.context, self.context.project_id) # Need to assert something about the quota consumption for quota_key in ['instances', 'ram', 'cores']: pre_usage = _pre_usages.pop(quota_key) self.assertEquals(pre_usage.get('in_use',0) + expected_increased[quota_key], post_usages[quota_key].get('in_use',0)) self.assertEquals(pre_usage.get('reserved',0), post_usages[quota_key].get('reserved',0)) for key, quota_usage in _pre_usages.iteritems(): self.assertEquals(quota_usage.get('reserved', 0), post_usages[key].get('reserved', 0)) self.assertEquals(quota_usage.get('in_use', 0), post_usages[key].get('in_use', 0)) instance_uuid = utils.create_instance(self.context) instance = db.instance_get_by_uuid(self.context, instance_uuid) # Set the quota so that we can have two blessed instances (+ the instance we are blessing). db.quota_create(self.context, self.context.project_id, 'ram', 3 * instance['memory_mb']) pre_usages = sqlalchemy_db.quota_usage_get_all_by_project(self.context, self.context.project_id) # The amount of resources a blessed instance consumes. blessed_uuids = [] for i in range(1, 3): blessed_uuids.append( self.cobalt_api.bless_instance(self.context, instance_uuid)['uuid']) expected = dict(zip(['instances', 'ram', 'cores'], map(lambda x: i * x, [1, instance['memory_mb'], instance['vcpus']]))) assert_quotas(expected) try: self.cobalt_api.bless_instance(self.context, instance_uuid) self.fail("We should not have the quota to bless one more instance.") except exception.TooManyInstances: pass # Discard the blessed uuid and ensure that the quota increases. remaining = len(blessed_uuids) for blessed_uuid in blessed_uuids: self.cobalt_api.discard_instance(self.context, blessed_uuid) remaining -= 1 expected = dict(zip(['instances', 'ram', 'cores'], map(lambda x: remaining * x, [1, instance['memory_mb'], instance['vcpus']]))) assert_quotas(expected)
def assert_quotas(expected_increased): _pre_usages = dict(pre_usages) _pre_usages.pop('project_id', None) post_usages = sqlalchemy_db.quota_usage_get_all_by_project(self.context, self.context.project_id) # Need to assert something about the quota consumption for quota_key in ['instances', 'ram', 'cores']: pre_usage = _pre_usages.pop(quota_key) self.assertEquals(pre_usage.get('in_use',0) + expected_increased[quota_key], post_usages[quota_key].get('in_use',0)) self.assertEquals(pre_usage.get('reserved',0), post_usages[quota_key].get('reserved',0)) for key, quota_usage in _pre_usages.iteritems(): self.assertEquals(quota_usage.get('reserved', 0), post_usages[key].get('reserved', 0)) self.assertEquals(quota_usage.get('in_use', 0), post_usages[key].get('in_use', 0))