Esempio n. 1
0
    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)
Esempio n. 2
0
    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)
Esempio n. 3
0
    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)
Esempio n. 4
0
    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")
Esempio n. 5
0
    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)
Esempio n. 6
0
    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)
Esempio n. 7
0
    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)
Esempio n. 8
0
    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)
Esempio n. 9
0
    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)
Esempio n. 10
0
 def setUp(self):
     super(QuotaAPITests, self).setUp()
     setup_mock_caches("RegionOne", "test_project_id")
     setup_mock_caches("RegionTwo", "test_project_id")
Esempio n. 11
0
    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)