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_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(self): """ Sets a new quota on all services of a project in a single region """ 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_neutron_cache('RegionOne', 'test_project_id') # Test sending to only a single region task = Task.objects.create(ip_address="0.0.0.0", keystone_user={'roles': ['admin']}) data = { 'project_id': 'test_project_id', 'size': 'medium', 'regions': ['RegionOne'], 'user_id': user.id } 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'], 10000) novaquota = nova_cache['RegionOne']['test_project_id']['quota'] self.assertEqual(novaquota['ram'], 327680) neutronquota = neutron_cache['RegionOne']['test_project_id']['quota'] self.assertEqual(neutronquota['network'], 5)
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_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)