diff --git a/google/cloud/dns/client.py b/google/cloud/dns/client.py index f1817a3..780849d 100644 --- a/google/cloud/dns/client.py +++ b/google/cloud/dns/client.py @@ -91,14 +91,23 @@ def quotas(self): :rtype: mapping :returns: keys for the mapping correspond to those of the ``quota`` - sub-mapping of the project resource. + sub-mapping of the project resource. ``kind`` is stripped + from the results. """ path = "/projects/%s" % (self.project,) resp = self._connection.api_request(method="GET", path=path) - return { - key: int(value) for key, value in resp["quota"].items() if key != "kind" - } + quotas = resp["quota"] + # Remove the key "kind" + # https://cloud.google.com/dns/docs/reference/v1/projects#resource + quotas.pop("kind", None) + if "whitelistedKeySpecs" in quotas: + # whitelistedKeySpecs is a list of dicts that represent keyspecs + # Remove "kind" here as well + for key_spec in quotas["whitelistedKeySpecs"]: + key_spec.pop("kind", None) + + return quotas def list_zones(self, max_results=None, page_token=None): """List zones for the project associated with this client. diff --git a/tests/system/test_system.py b/tests/system/test_system.py new file mode 100644 index 0000000..12fb860 --- /dev/null +++ b/tests/system/test_system.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# +# Copyright 2020 Google LLC +# +# 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 +# +# https://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 google.cloud import dns + + +def test_quota(): + client = dns.Client() + + quotas = client.quotas() + + # check that kind is properly stripped from the resource + assert "kind" not in quotas + for keyspec in quotas["whitelistedKeySpecs"]: + assert "kind" not in keyspec diff --git a/tests/unit/test_client.py b/tests/unit/test_client.py index 2d1e274..aaa5a8a 100644 --- a/tests/unit/test_client.py +++ b/tests/unit/test_client.py @@ -127,12 +127,12 @@ def test_quotas_defaults(self): TOTAL_SIZE = 67890 DATA = { "quota": { - "managedZones": str(MANAGED_ZONES), - "resourceRecordsPerRrset": str(RRS_PER_RRSET), - "rrsetsPerManagedZone": str(RRSETS_PER_ZONE), - "rrsetAdditionsPerChange": str(RRSET_ADDITIONS), - "rrsetDeletionsPerChange": str(RRSET_DELETIONS), - "totalRrdataSizePerChange": str(TOTAL_SIZE), + "managedZones": MANAGED_ZONES, + "resourceRecordsPerRrset": RRS_PER_RRSET, + "rrsetsPerManagedZone": RRSETS_PER_ZONE, + "rrsetAdditionsPerChange": RRSET_ADDITIONS, + "rrsetDeletionsPerChange": RRSET_DELETIONS, + "totalRrdataSizePerChange": TOTAL_SIZE, } } CONVERTED = {key: int(value) for key, value in DATA["quota"].items()} @@ -159,17 +159,25 @@ def test_quotas_w_kind_key(self): TOTAL_SIZE = 67890 DATA = { "quota": { - "managedZones": str(MANAGED_ZONES), - "resourceRecordsPerRrset": str(RRS_PER_RRSET), - "rrsetsPerManagedZone": str(RRSETS_PER_ZONE), - "rrsetAdditionsPerChange": str(RRSET_ADDITIONS), - "rrsetDeletionsPerChange": str(RRSET_DELETIONS), - "totalRrdataSizePerChange": str(TOTAL_SIZE), + "managedZones": MANAGED_ZONES, + "resourceRecordsPerRrset": RRS_PER_RRSET, + "rrsetsPerManagedZone": RRSETS_PER_ZONE, + "rrsetAdditionsPerChange": RRSET_ADDITIONS, + "rrsetDeletionsPerChange": RRSET_DELETIONS, + "totalRrdataSizePerChange": TOTAL_SIZE, + "whitelistedKeySpecs": [ + { + "keyType": "keySigning", + "algorithm": "rsasha512", + "keyLength": 2048, + } + ], } } - CONVERTED = {key: int(value) for key, value in DATA["quota"].items()} + CONVERTED = DATA["quota"] WITH_KIND = {"quota": DATA["quota"].copy()} WITH_KIND["quota"]["kind"] = "dns#quota" + WITH_KIND["quota"]["whitelistedKeySpecs"][0]["kind"] = "dns#dnsKeySpec" creds = _make_credentials() client = self._make_one(self.PROJECT, creds) conn = client._connection = _Connection(WITH_KIND)