def _get_updated_quotas(self): # Verify that GET shows the updated quota set of project project_name = data_utils.rand_name('cpu_quota_project') project_desc = project_name + '-desc' project = identity.identity_utils(self.os_admin).create_project( name=project_name, description=project_desc) project_id = project['id'] self.addCleanup(identity.identity_utils(self.os_admin).delete_project, project_id) self.adm_client.update_quota_set(project_id, ram='5120') # Call show_quota_set with detail=true to cover the # get_quota_set_details response schema for microversion tests quota_set = self.adm_client.show_quota_set( project_id, detail=True)['quota_set'] self.assertEqual(5120, quota_set['ram']['limit']) # Verify that GET shows the updated quota set of user user_name = data_utils.rand_name('cpu_quota_user') password = data_utils.rand_password() email = user_name + '@testmail.tm' user = identity.identity_utils(self.os_admin).create_user( username=user_name, password=password, project=project, email=email) user_id = user['id'] self.addCleanup(identity.identity_utils(self.os_admin).delete_user, user_id) self.adm_client.update_quota_set(project_id, user_id=user_id, ram='2048') quota_set = self.adm_client.show_quota_set( project_id, user_id=user_id)['quota_set'] self.assertEqual(2048, quota_set['ram'])
def _get_updated_quotas(self): # Verify that GET shows the updated quota set of project project_name = data_utils.rand_name('cpu_quota_project') project_desc = project_name + '-desc' project = identity.identity_utils(self.os_admin).create_project( name=project_name, description=project_desc) project_id = project['id'] self.addCleanup(identity.identity_utils(self.os_admin).delete_project, project_id) self.adm_client.update_quota_set(project_id, ram='5120') # Call show_quota_set with detail=true to cover the # get_quota_set_details response schema for microversion tests quota_set = self.adm_client.show_quota_set( project_id, detail=True)['quota_set'] self.assertEqual(5120, quota_set['ram']['limit']) # Verify that GET shows the updated quota set of user user_name = data_utils.rand_name('cpu_quota_user') password = data_utils.rand_password() email = user_name + '@testmail.tm' user = identity.identity_utils(self.os_admin).create_user( username=user_name, password=password, project=project, email=email) user_id = user['id'] self.addCleanup(identity.identity_utils(self.os_admin).delete_user, user_id) self.adm_client.update_quota_set(project_id, user_id=user_id, ram='2048') quota_set = self.adm_client.show_quota_set( project_id, user_id=user_id)['quota_set'] self.assertEqual(2048, quota_set['ram'])
def setUp(self): super(QuotasNegativeTest, self).setUp() name = data_utils.rand_name('test_project_') description = data_utils.rand_name('desc_') self.project = identity.identity_utils(self.os_admin).create_project( name=name, description=description) self.addCleanup(identity.identity_utils(self.os_admin).delete_project, self.project['id'])
def test_update_default_quota(self): """Test updating default volume quota class set Check current project and new project's default quota are updated to the provided one. """ LOG.debug("Get the current default quota class values") body = self.admin_quota_classes_client.show_quota_class_set( 'default')['quota_class_set'] # Note(jeremyZ) Only include specified quota keys to avoid the conflict # that other tests may create/delete volume types or update volume # type's default quotas in concurrency running. update_kwargs = {key: body[key] for key in body if key in QUOTA_KEYS} # Restore the defaults when the test is done. self.addCleanup(self._restore_default_quotas, update_kwargs.copy()) # Note(jeremyZ) Increment some of the values for updating the default # quota class. For safety, only items with value >= 0 will be updated, # and items with value < 0 (-1 means unlimited) will be ignored. for quota, default in update_kwargs.items(): if default >= 0: update_kwargs[quota] = default + 1 # Create a volume type for updating default quotas class. volume_type_name = self.create_volume_type()['name'] for key in ['volumes', 'snapshots', 'gigabytes']: update_kwargs['%s_%s' % (key, volume_type_name)] = \ random.randint(1, 10) LOG.debug("Update limits for the default quota class set") update_body = self.admin_quota_classes_client.update_quota_class_set( 'default', **update_kwargs)['quota_class_set'] self.assertThat(update_body.items(), matchers.ContainsAll(update_kwargs.items())) # Verify current project's default quotas. default_quotas = self.admin_quotas_client.show_default_quota_set( self.os_admin.credentials.tenant_id)['quota_set'] self.assertThat(default_quotas.items(), matchers.ContainsAll(update_kwargs.items())) # Verify a new project's default quotas. project_name = data_utils.rand_name('quota_class_tenant') description = data_utils.rand_name('desc_') project_id = identity.identity_utils(self.os_admin).create_project( name=project_name, description=description)['id'] self.addCleanup(identity.identity_utils(self.os_admin).delete_project, project_id) default_quotas = self.admin_quotas_client.show_default_quota_set( project_id)['quota_set'] self.assertThat(default_quotas.items(), matchers.ContainsAll(update_kwargs.items()))
def resource_setup(cls): super(QuotaClassesRbacTest, cls).resource_setup() # Create a project with its own quota. project_name = data_utils.rand_name(cls.__name__) project_desc = project_name + '-desc' project = identity.identity_utils(cls.os_admin).create_project( name=project_name, description=project_desc) cls.project_id = project['id'] cls.addClassResourceCleanup( identity.identity_utils(cls.os_admin).delete_project, cls.project_id)
def test_delete_quota_set(self): project_name = data_utils.rand_name( self.__class__.__name__) project_desc = project_name + '-desc' project = identity.identity_utils(self.os_admin).create_project( name=project_name, description=project_desc) project_id = project['id'] self.addCleanup( identity.identity_utils(self.os_admin).delete_project, project_id) with self.override_role(): self.quotas_client.delete_quota_set(project_id)
def test_update_default_quota(self): LOG.debug("Get the current default quota class values") body = self.admin_quota_classes_client.show_quota_class_set( 'default')['quota_class_set'] # Note(jeremyZ) Only include specified quota keys to avoid the conflict # that other tests may create/delete volume types or update volume # type's default quotas in concurrency running. update_kwargs = {key: body[key] for key in body if key in QUOTA_KEYS} # Restore the defaults when the test is done. self.addCleanup(self._restore_default_quotas, update_kwargs.copy()) # Note(jeremyZ) Increment some of the values for updating the default # quota class. For safety, only items with value >= 0 will be updated, # and items with value < 0 (-1 means unlimited) will be ignored. for quota, default in update_kwargs.items(): if default >= 0: update_kwargs[quota] = default + 1 # Create a volume type for updating default quotas class. volume_type_name = self.create_volume_type()['name'] for key in ['volumes', 'snapshots', 'gigabytes']: update_kwargs['%s_%s' % (key, volume_type_name)] = \ random.randint(1, 10) LOG.debug("Update limits for the default quota class set") update_body = self.admin_quota_classes_client.update_quota_class_set( 'default', **update_kwargs)['quota_class_set'] self.assertThat(update_body.items(), matchers.ContainsAll(update_kwargs.items())) # Verify current project's default quotas. default_quotas = self.admin_quotas_client.show_default_quota_set( self.os_admin.credentials.tenant_id)['quota_set'] self.assertThat(default_quotas.items(), matchers.ContainsAll(update_kwargs.items())) # Verify a new project's default quotas. project_name = data_utils.rand_name('quota_class_tenant') description = data_utils.rand_name('desc_') project_id = identity.identity_utils(self.os_admin).create_project( name=project_name, description=description)['id'] self.addCleanup(identity.identity_utils(self.os_admin).delete_project, project_id) default_quotas = self.admin_quotas_client.show_default_quota_set( project_id)['quota_set'] self.assertThat(default_quotas.items(), matchers.ContainsAll(update_kwargs.items()))
def test_create_router_setting_project_id(self): # Test creating router from admin user setting project_id. project = data_utils.rand_name('test_tenant_') description = data_utils.rand_name('desc_') project = identity.identity_utils(self.os_admin).create_project( name=project, description=description) project_id = project['id'] self.addCleanup( identity.identity_utils(self.os_admin).delete_project, project_id) name = data_utils.rand_name('router-') create_body = self.admin_routers_client.create_router( name=name, tenant_id=project_id) self.addCleanup(self.admin_routers_client.delete_router, create_body['router']['id']) self.assertEqual(project_id, create_body['router']['tenant_id'])
def test_create_router_setting_project_id(self): # Test creating router from admin user setting project_id. project = data_utils.rand_name('test_tenant_') description = data_utils.rand_name('desc_') project = identity.identity_utils(self.os_admin).create_project( name=project, description=description) project_id = project['id'] self.addCleanup(identity.identity_utils(self.os_admin).delete_project, project_id) name = data_utils.rand_name('router-') create_body = self.admin_routers_client.create_router( name=name, tenant_id=project_id) self.addCleanup(self.admin_routers_client.delete_router, create_body['router']['id']) self.assertEqual(project_id, create_body['router']['tenant_id'])
def test_delete_quota(self): """Test admin can delete the compute quota set for a project""" project_name = data_utils.rand_name('ram_quota_project') project_desc = project_name + '-desc' project = identity.identity_utils(self.os_admin).create_project( name=project_name, description=project_desc) project_id = project['id'] self.addCleanup(identity.identity_utils(self.os_admin).delete_project, project_id) quota_set_default = (self.adm_client.show_quota_set(project_id) ['quota_set']) ram_default = quota_set_default['ram'] self.adm_client.update_quota_set(project_id, ram='5120') self.adm_client.delete_quota_set(project_id) quota_set_new = self.adm_client.show_quota_set(project_id)['quota_set'] self.assertEqual(ram_default, quota_set_new['ram'])
def test_delete_quota(self): # Admin can delete the resource quota set for a project project_name = data_utils.rand_name('ram_quota_project') project_desc = project_name + '-desc' project = identity.identity_utils(self.os_admin).create_project( name=project_name, description=project_desc) project_id = project['id'] self.addCleanup(identity.identity_utils(self.os_admin).delete_project, project_id) quota_set_default = (self.adm_client.show_quota_set(project_id) ['quota_set']) ram_default = quota_set_default['ram'] self.adm_client.update_quota_set(project_id, ram='5120') self.adm_client.delete_quota_set(project_id) quota_set_new = self.adm_client.show_quota_set(project_id)['quota_set'] self.assertEqual(ram_default, quota_set_new['ram'])
def test_delete_quota(self): # Admin can delete the resource quota set for a project project_name = data_utils.rand_name('quota_tenant') description = data_utils.rand_name('desc_') project = identity.identity_utils(self.os_admin).create_project( project_name, description=description) project_id = project['id'] self.addCleanup( identity.identity_utils(self.os_admin).delete_project, project_id) quota_set_default = self.admin_quotas_client.show_default_quota_set( project_id)['quota_set'] volume_default = quota_set_default['volumes'] self.admin_quotas_client.update_quota_set(project_id, volumes=(volume_default + 5)) self.admin_quotas_client.delete_quota_set(project_id) quota_set_new = ( self.admin_quotas_client.show_quota_set(project_id)['quota_set']) self.assertEqual(volume_default, quota_set_new['volumes'])
def test_delete_quota(self): # Admin can delete the resource quota set for a project project_name = data_utils.rand_name('quota_tenant') description = data_utils.rand_name('desc_') project = identity.identity_utils(self.os_admin).create_project( project_name, description=description) project_id = project['id'] self.addCleanup(identity.identity_utils(self.os_admin).delete_project, project_id) quota_set_default = self.admin_quotas_client.show_default_quota_set( project_id)['quota_set'] volume_default = quota_set_default['volumes'] self.admin_quotas_client.update_quota_set( project_id, volumes=(volume_default + 5)) self.admin_quotas_client.delete_quota_set(project_id) quota_set_new = (self.admin_quotas_client.show_quota_set(project_id) ['quota_set']) self.assertEqual(volume_default, quota_set_new['volumes'])
def _check_quotas(self, new_quotas): # Add a project to conduct the test project = data_utils.rand_name('test_project_') description = data_utils.rand_name('desc_') project = identity.identity_utils(self.os_admin).create_project( name=project, description=description) project_id = project['id'] self.addCleanup( identity.identity_utils(self.os_admin).delete_project, project_id) # Change quotas for project quota_set = self.admin_quotas_client.update_quotas( project_id, **new_quotas)['quota'] self.addCleanup(test_utils.call_and_ignore_notfound_exc, self.admin_quotas_client.reset_quotas, project_id) for key, value in new_quotas.items(): self.assertEqual(value, quota_set[key]) # Confirm our project is listed among projects with non default quotas non_default_quotas = self.admin_quotas_client.list_quotas() found = False for qs in non_default_quotas['quotas']: if qs['tenant_id'] == project_id: found = True self.assertTrue(found) # Confirm from API quotas were changed as requested for project quota_set = self.admin_quotas_client.show_quotas(project_id) quota_set = quota_set['quota'] for key, value in new_quotas.items(): self.assertEqual(value, quota_set[key]) # Reset quotas to default and confirm self.admin_quotas_client.reset_quotas(project_id) non_default_quotas = self.admin_quotas_client.list_quotas() for q in non_default_quotas['quotas']: self.assertNotEqual(project_id, q['tenant_id']) quota_set = self.admin_quotas_client.show_quotas(project_id)['quota'] default_quotas = self.admin_quotas_client.show_default_quotas( project_id)['quota'] self.assertEqual(default_quotas, quota_set)
def _check_quotas(self, new_quotas): # Add a project to conduct the test project = data_utils.rand_name('test_project_') description = data_utils.rand_name('desc_') project = identity.identity_utils(self.os_admin).create_project( name=project, description=description) project_id = project['id'] self.addCleanup(identity.identity_utils(self.os_admin).delete_project, project_id) # Change quotas for project quota_set = self.admin_quotas_client.update_quotas( project_id, **new_quotas)['quota'] self.addCleanup(test_utils.call_and_ignore_notfound_exc, self.admin_quotas_client.reset_quotas, project_id) for key, value in new_quotas.items(): self.assertEqual(value, quota_set[key]) # Confirm our project is listed among projects with non default quotas non_default_quotas = self.admin_quotas_client.list_quotas() found = False for qs in non_default_quotas['quotas']: if qs['tenant_id'] == project_id: found = True self.assertTrue(found) # Confirm from API quotas were changed as requested for project quota_set = self.admin_quotas_client.show_quotas(project_id) quota_set = quota_set['quota'] for key, value in new_quotas.items(): self.assertEqual(value, quota_set[key]) # Reset quotas to default and confirm self.admin_quotas_client.reset_quotas(project_id) non_default_quotas = self.admin_quotas_client.list_quotas() for q in non_default_quotas['quotas']: self.assertNotEqual(project_id, q['tenant_id']) quota_set = self.admin_quotas_client.show_quotas(project_id)['quota'] default_quotas = self.admin_quotas_client.show_default_quotas( project_id)['quota'] self.assertEqual(default_quotas, quota_set)