#    Licensed under the Apache License, Version 2.0 (the "License"); you may
#    not use this file except in compliance with the License. You may obtain
#    a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#    License for the specific language governing permissions and limitations
#    under the License.

from novaclient.tests.functional.v2.legacy import test_quotas


class TestQuotasNovaClient2_35(test_quotas.TestQuotasNovaClient):
    """Nova quotas functional tests."""

    COMPUTE_API_VERSION = "2.35"

    _quota_resources = ['instances', 'cores', 'ram',
                        'floating_ips', 'fixed_ips', 'metadata_items',
                        'injected_files', 'injected_file_content_bytes',
                        'injected_file_path_bytes', 'key_pairs',
                        'security_groups', 'security_group_rules',
                        'server_groups', 'server_group_members']

    def test_quotas_update(self):
        # `nova quota-update` requires tenant-id.
        tenant_id = self._get_project_id(self.cli_clients.tenant_name)

        self.addCleanup(self.client.quotas.delete, tenant_id)

        original_quotas = self.client.quotas.get(tenant_id)

        difference = 10
        params = [tenant_id]
        for quota_name in self._quota_resources:
            params.append("--%(name)s %(value)s" % {
                "name": quota_name.replace("_", "-"),
                "value": getattr(original_quotas, quota_name) + difference})

        self.nova("quota-update", params=" ".join(params))

        updated_quotas = self.client.quotas.get(tenant_id)

        for quota_name in self._quota_resources:
            self.assertEqual(getattr(original_quotas, quota_name),
                             getattr(updated_quotas, quota_name) - difference)


class TestQuotasNovaClient2_36(TestQuotasNovaClient2_35):
    """Nova quotas functional tests."""

    COMPUTE_API_VERSION = "2.36"

    # The 2.36 microversion stops proxying network quota resources like
    # floating/fixed IPs and security groups/rules.
    _quota_resources = ['instances', 'cores', 'ram',
                        'metadata_items', 'injected_files',
                        'injected_file_content_bytes',
                        'injected_file_path_bytes', 'key_pairs',
                        'server_groups', 'server_group_members']


class TestQuotasNovaClient2_57(TestQuotasNovaClient2_35):
    """Nova quotas functional tests."""

    COMPUTE_API_VERSION = "2.latest"

    # The 2.57 microversion deprecates injected_file* quotas.
    _quota_resources = ['instances', 'cores', 'ram',
                        'metadata_items', 'key_pairs',
                        'server_groups', 'server_group_members']
