def test_update_quota_not_in_sizes_asc(self): """ Tests that the quota will still update to a size even if it is not placed in QUOTA_SIZES_ASC """ project = mock.Mock() project.id = 'test_project_id' project.name = 'test_project' project.domain = 'default' project.roles = {} user = mock.Mock() user.id = 'user_id' user.name = "*****@*****.**" user.email = "*****@*****.**" user.domain = 'default' user.password = "******" setup_identity_cache(projects=[project], users=[user]) setup_mock_caches('RegionOne', project.id) setup_mock_caches('RegionTwo', project.id) task = Task.objects.create(ip_address="0.0.0.0", keystone_user={'roles': ['admin']}) data = { 'project_id': 'test_project_id', 'size': 'large', 'domain_id': 'default', 'regions': ['RegionOne', 'RegionTwo'], } action = UpdateProjectQuotasAction(data, task=task, order=1) action.pre_approve() self.assertEqual(action.valid, True) action.post_approve() self.assertEqual(action.valid, True) # check the quotas were updated # This relies on test_settings heavily. cinderquota = cinder_cache['RegionOne']['test_project_id']['quota'] self.assertEqual(cinderquota['gigabytes'], 50000) novaquota = nova_cache['RegionOne']['test_project_id']['quota'] self.assertEqual(novaquota['ram'], 655360) neutronquota = neutron_cache['RegionOne']['test_project_id']['quota'] self.assertEqual(neutronquota['network'], 10) cinderquota = cinder_cache['RegionTwo']['test_project_id']['quota'] self.assertEqual(cinderquota['gigabytes'], 50000) novaquota = nova_cache['RegionTwo']['test_project_id']['quota'] self.assertEqual(novaquota['ram'], 655360) neutronquota = neutron_cache['RegionTwo']['test_project_id']['quota'] self.assertEqual(neutronquota['network'], 10)
def test_update_quota_not_in_sizes_asc(self): """ Tests that the quota will still update to a size even if it is not placed in QUOTA_SIZES_ASC """ project = mock.Mock() project.id = "test_project_id" project.name = "test_project" project.domain = "default" project.roles = {} user = mock.Mock() user.id = "user_id" user.name = "*****@*****.**" user.email = "*****@*****.**" user.domain = "default" user.password = "******" setup_identity_cache(projects=[project], users=[user]) setup_mock_caches("RegionOne", project.id) setup_mock_caches("RegionTwo", project.id) task = Task.objects.create(keystone_user={"roles": ["admin"]}) data = { "project_id": "test_project_id", "size": "large", "domain_id": "default", "regions": ["RegionOne", "RegionTwo"], } action = UpdateProjectQuotasAction(data, task=task, order=1) action.prepare() self.assertEqual(action.valid, True) action.approve() self.assertEqual(action.valid, True) # check the quotas were updated cinderquota = cinder_cache["RegionOne"]["test_project_id"]["quota"] self.assertEqual(cinderquota["gigabytes"], 50000) novaquota = nova_cache["RegionOne"]["test_project_id"]["quota"] self.assertEqual(novaquota["ram"], 655360) neutronquota = neutron_cache["RegionOne"]["test_project_id"]["quota"] self.assertEqual(neutronquota["network"], 10) cinderquota = cinder_cache["RegionTwo"]["test_project_id"]["quota"] self.assertEqual(cinderquota["gigabytes"], 50000) novaquota = nova_cache["RegionTwo"]["test_project_id"]["quota"] self.assertEqual(novaquota["ram"], 655360) neutronquota = neutron_cache["RegionTwo"]["test_project_id"]["quota"] self.assertEqual(neutronquota["network"], 10)
def test_update_quota_multi_region(self): """ Sets a new quota on all services of a project in multiple regions """ project = mock.Mock() project.id = "test_project_id" project.name = "test_project" project.domain = "default" project.roles = {} user = mock.Mock() user.id = "user_id" user.name = "*****@*****.**" user.email = "*****@*****.**" user.domain = "default" user.password = "******" setup_identity_cache(projects=[project], users=[user]) setup_mock_caches("RegionOne", project.id) setup_mock_caches("RegionTwo", project.id) task = Task.objects.create(keystone_user={"roles": ["admin"]}) data = { "project_id": "test_project_id", "size": "large", "domain_id": "default", "regions": ["RegionOne", "RegionTwo"], "user_id": "user_id", } action = UpdateProjectQuotasAction(data, task=task, order=1) action.prepare() self.assertEqual(action.valid, True) action.approve() self.assertEqual(action.valid, True) # check the quotas were updated cinderquota = cinder_cache["RegionOne"]["test_project_id"]["quota"] self.assertEqual(cinderquota["gigabytes"], 50000) novaquota = nova_cache["RegionOne"]["test_project_id"]["quota"] self.assertEqual(novaquota["ram"], 655360) neutronquota = neutron_cache["RegionOne"]["test_project_id"]["quota"] self.assertEqual(neutronquota["network"], 10) cinderquota = cinder_cache["RegionTwo"]["test_project_id"]["quota"] self.assertEqual(cinderquota["gigabytes"], 50000) novaquota = nova_cache["RegionTwo"]["test_project_id"]["quota"] self.assertEqual(novaquota["ram"], 655360) neutronquota = neutron_cache["RegionTwo"]["test_project_id"]["quota"] self.assertEqual(neutronquota["network"], 10)
def test_update_quota_other_project_history(self): """ Tests that a quota update to another project does not interfer with the 30 days per project limit. """ project = fake_clients.FakeProject(name="test_project", id="test_project_id") project2 = fake_clients.FakeProject(name="second_project") user = fake_clients.FakeUser( name="*****@*****.**", password="******", email="*****@*****.**" ) setup_identity_cache(projects=[project, project2], users=[user]) headers = { "project_name": "test_project", "project_id": project.id, "roles": "project_admin,member,project_mod", "username": "******", "user_id": "user_id", "authenticated": True, } setup_mock_caches("RegionOne", project2.id) url = "/v1/openstack/quotas/" data = {"size": "medium", "regions": ["RegionOne"]} response = self.client.post(url, data, headers=headers, format="json") self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) # Then check to see the quotas have changed self.check_quota_cache("RegionOne", project.id, "medium") headers = { "project_name": "second_project", "project_id": project2.id, "roles": "project_admin,member,project_mod", "username": "******", "user_id": user.id, "authenticated": True, } data = {"regions": ["RegionOne"], "size": "medium", "project_id": project2.id} response = self.client.post(url, data, headers=headers, format="json") # First check we can actually access the page correctly self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) # Then check to see the quotas have changed self.check_quota_cache("RegionOne", project2.id, "medium")
def test_update_quota_octavia_over_usage(self): """When octavia usage is higher than new quota it won't be changed""" project = mock.Mock() project.id = 'test_project_id' project.name = 'test_project' project.domain = 'default' project.roles = {} user = mock.Mock() user.id = 'user_id' user.name = "*****@*****.**" user.email = "*****@*****.**" user.domain = 'default' user.password = "******" setup_identity_cache(projects=[project], users=[user]) setup_mock_caches('RegionOne', project.id) task = Task.objects.create(ip_address="0.0.0.0", keystone_user={'roles': ['admin']}) data = { 'project_id': 'test_project_id', 'size': 'small', 'domain_id': 'default', 'regions': ['RegionOne'], } # setup 2 load balancers octavia_cache['RegionOne'][project.id]['load_balancer'] = [{ 'id': 'fake_id' }, { 'id': 'fake_id2' }] action = UpdateProjectQuotasAction(data, task=task, order=1) action.pre_approve() self.assertEqual(action.valid, False) action.post_approve() self.assertEqual(action.valid, False) # check the quotas were updated # This relies on test_settings heavily. octaviaquota = octavia_cache['RegionOne']['test_project_id']['quota'] # Still set to default self.assertEqual(octaviaquota['load_balancer'], 1)
def test_update_quota_extra_services(self): """Tests the quota update of extra services over and above core openstack services. """ project = mock.Mock() project.id = "test_project_id" project.name = "test_project" project.domain = "default" project.roles = {} user = mock.Mock() user.id = "user_id" user.name = "*****@*****.**" user.email = "*****@*****.**" user.domain = "default" user.password = "******" setup_identity_cache(projects=[project], users=[user]) setup_mock_caches("RegionOne", project.id) task = Task.objects.create(keystone_user={"roles": ["admin"]}) data = { "project_id": "test_project_id", "size": "large", "domain_id": "default", "regions": ["RegionOne"], } action = UpdateProjectQuotasAction(data, task=task, order=1) action.prepare() self.assertEqual(action.valid, True) action.approve() self.assertEqual(action.valid, True) # check the quotas were updated cinderquota = cinder_cache["RegionOne"]["test_project_id"]["quota"] self.assertEqual(cinderquota["gigabytes"], 50000) novaquota = nova_cache["RegionOne"]["test_project_id"]["quota"] self.assertEqual(novaquota["ram"], 655360) neutronquota = neutron_cache["RegionOne"]["test_project_id"]["quota"] self.assertEqual(neutronquota["network"], 10) octaviaquota = octavia_cache["RegionOne"]["test_project_id"]["quota"] self.assertEqual(octaviaquota["load_balancer"], 10) trove_quota = trove_cache["RegionOne"]["test_project_id"]["quota"] self.assertEqual(trove_quota["instances"], 20)
def test_update_quota_username_not_email(self): """ Test that the action correctly handles its username is not email case. """ project = FakeProject(name="test_project") user = FakeUser( name="test", password="******", email="*****@*****.**", ) setup_identity_cache(projects=[project], users=[user]) setup_mock_caches("RegionOne", "test_project_id") task = Task.objects.create(keystone_user={ "user_id": user.id, "roles": ["admin"] }) data = { "project_id": "test_project_id", "size": "medium", "regions": ["RegionOne"], "user_id": user.id, } action = UpdateProjectQuotasAction(data, task=task, order=1) user_email = action.get_email() self.assertEqual(user_email, user.email) # Now we reset the user/task/action and try without an email user = FakeUser( name="test", password="******", ) setup_identity_cache(projects=[project], users=[user]) task = Task.objects.create(keystone_user={ "user_id": user.id, "roles": ["admin"] }) action = UpdateProjectQuotasAction(data, task=task, order=1) user_email = action.get_email() self.assertEqual(user_email, None)
def test_set_quota(self): """ Base case, sets quota on all services of the cached project id. """ project = mock.Mock() project.id = 'test_project_id' project.name = 'test_project' project.domain = 'default' project.roles = {} setup_identity_cache(projects=[project]) setup_mock_caches('RegionOne', 'test_project_id') task = Task.objects.create(ip_address="0.0.0.0", keystone_user={'roles': ['admin']}) task.cache = {'project_id': "test_project_id"} action = SetProjectQuotaAction({}, task=task, order=1) action.pre_approve() self.assertEqual(action.valid, True) action.post_approve() self.assertEqual(action.valid, True) # check the quotas were updated # This relies on test_settings heavily. cinderquota = cinder_cache['RegionOne']['test_project_id']['quota'] self.assertEqual(cinderquota['gigabytes'], 5000) novaquota = nova_cache['RegionOne']['test_project_id']['quota'] self.assertEqual(novaquota['ram'], 65536) neutronquota = neutron_cache['RegionOne']['test_project_id']['quota'] self.assertEqual(neutronquota['network'], 3) # RegionThree, cinder only self.assertFalse('RegionThree' in nova_cache) r2_cinderquota = cinder_cache['RegionThree']['test_project_id'][ 'quota'] self.assertEqual(r2_cinderquota['gigabytes'], 50001) self.assertEqual(r2_cinderquota['snapshots'], 600) self.assertEqual(r2_cinderquota['volumes'], 200)
def test_set_quota(self): """ Base case, sets quota on all services of the cached project id. """ project = mock.Mock() project.id = "test_project_id" project.name = "test_project" project.domain = "default" project.roles = {} setup_identity_cache(projects=[project]) setup_mock_caches("RegionOne", "test_project_id") task = Task.objects.create(keystone_user={"roles": ["admin"]}) task.cache = {"project_id": "test_project_id"} action = SetProjectQuotaAction({}, task=task, order=1) action.prepare() self.assertEqual(action.valid, True) action.approve() self.assertEqual(action.valid, True) # check the quotas were updated cinderquota = cinder_cache["RegionOne"]["test_project_id"]["quota"] self.assertEqual(cinderquota["gigabytes"], 5000) novaquota = nova_cache["RegionOne"]["test_project_id"]["quota"] self.assertEqual(novaquota["ram"], 65536) neutronquota = neutron_cache["RegionOne"]["test_project_id"]["quota"] self.assertEqual(neutronquota["network"], 3) # RegionThree, cinder only self.assertFalse("RegionThree" in nova_cache) r2_cinderquota = cinder_cache["RegionThree"]["test_project_id"][ "quota"] self.assertEqual(r2_cinderquota["gigabytes"], 50001) self.assertEqual(r2_cinderquota["snapshots"], 600) self.assertEqual(r2_cinderquota["volumes"], 200)
def setUp(self): super(QuotaAPITests, self).setUp() setup_mock_caches("RegionOne", "test_project_id") setup_mock_caches("RegionTwo", "test_project_id")
def test_quota_downgrade_fails_when_usage_exceeds_requested_quota(self): """Ensures that a quota change will fail validation when the current usage exceeds the requested quota. """ project = mock.Mock() project.id = "test_project_id" project.name = "test_project" project.domain = "default" project.roles = {} user = mock.Mock() user.id = "user_id" user.name = "*****@*****.**" user.email = "*****@*****.**" user.domain = "default" user.password = "******" setup_identity_cache(projects=[project], users=[user]) setup_mock_caches("RegionOne", project.id) task = Task.objects.create(keystone_user={"roles": ["admin"]}) data = { "project_id": "test_project_id", "size": "small", "domain_id": "default", "regions": ["RegionOne"], } # setup 2 load balancers octavia_cache["RegionOne"][project.id]["load_balancer"] = [ { "id": "fake_id" }, { "id": "fake_id2" }, ] trove_cache["RegionOne"][project.id]["instances"] = [ { "id": "fake_id" }, { "id": "fake_id2" }, { "id": "fake_id3" }, { "id": "fake_id4" }, ] action = UpdateProjectQuotasAction(data, task=task, order=1) action.prepare() self.assertEqual(action.valid, False) action.approve() self.assertEqual(action.valid, False) # check the quotas were updated octaviaquota = octavia_cache["RegionOne"]["test_project_id"]["quota"] trove_quota = trove_cache["RegionOne"]["test_project_id"]["quota"] # Still set to default self.assertEqual(octaviaquota["load_balancer"], 1) self.assertEqual(trove_quota["instances"], 3)