From eb70f705cb0790139624298709819afbda2d5101 Mon Sep 17 00:00:00 2001 From: "T. Schreiber" Date: Fri, 19 Jun 2020 14:29:30 +0000 Subject: [PATCH 1/2] fix list method for recordset and testcase --- otcextensions/sdk/dns/v2/_base.py | 5 +- .../tests/unit/sdk/dns/v2/test_recordset.py | 95 +++++++++++++++++++ 2 files changed, 99 insertions(+), 1 deletion(-) diff --git a/otcextensions/sdk/dns/v2/_base.py b/otcextensions/sdk/dns/v2/_base.py index 40601a5f7..8f5c5efd2 100644 --- a/otcextensions/sdk/dns/v2/_base.py +++ b/otcextensions/sdk/dns/v2/_base.py @@ -77,8 +77,11 @@ def _get_next_link(cls, uri, response, data, marker, limit, total_yielded): links = data.get('links') if links: next_link = links.get('next') - total = data.get('metadata', {}).get('total_count') + if not next_link and total_yielded < total: + next_link = uri + params['marker'] = marker + return next_link, params if total: # We have a kill switch total_count = int(total) diff --git a/otcextensions/tests/unit/sdk/dns/v2/test_recordset.py b/otcextensions/tests/unit/sdk/dns/v2/test_recordset.py index 857bb663f..86e65df40 100644 --- a/otcextensions/tests/unit/sdk/dns/v2/test_recordset.py +++ b/otcextensions/tests/unit/sdk/dns/v2/test_recordset.py @@ -11,6 +11,9 @@ # under the License. from openstack.tests.unit import base +import copy +import mock + from otcextensions.sdk.dns.v2 import recordset @@ -36,6 +39,77 @@ } +DATA = { + "links": { + "self": "https://dns.eu-de.otc.t-systems.com/v2/zones/ff80808261418b240161d163e39e11a0/recordsets" + }, + "recordsets": [ + { + "id": "ff80808261418b240161d163e39e11a1", + "name": "prod.otc.appagile.", + "description": None, + "type": "SOA", + "ttl": 300, + "records": [ + "ns1.open-telekom-cloud.com. dl-otc-domains.telekom.de. (1 7200 900 1209600 300)" + ], + "status": "ACTIVE", + "zone_id": "ff80808261418b240161d163e39e11a0", + "zone_name": "prod.otc.appagile.", + "create_at": "2018-02-26T09:13:59.954", + "update_at": None, + "default": True, + "project_id": "09781c0169b34685ba2c2f38f45e96e1", + "links": { + "self": "https://dns.eu-de.otc.t-systems.com/v2/zones/ff80808261418b240161d163e39e11a0/recordsets/ff80808261418b240161d163e39e11a1" + } + }, + { + "id": "ff80808261418b240161d163e39e11a3", + "name": "prod.otc.appagile.", + "description": None, + "type": "NS", + "ttl": 172800, + "records": [ + "ns1.open-telekom-cloud.com." + ], + "status": "ACTIVE", + "zone_id": "ff80808261418b240161d163e39e11a0", + "zone_name": "prod.otc.appagile.", + "create_at": "2018-02-26T09:13:59.954", + "update_at": None, + "default": True, + "project_id": "09781c0169b34685ba2c2f38f45e96e1", + "links": { + "self": "https://dns.eu-de.otc.t-systems.com/v2/zones/ff80808261418b240161d163e39e11a0/recordsets/ff80808261418b240161d163e39e11a3" + } + }, + { + "id": "ff80808261418b240161d164409a11a7", + "name": "satellite.central.prod.otc.appagile.", + "description": None, + "type": "A", + "ttl": 300, + "records": [ + "192.168.255.140" + ], + "status": "ACTIVE", + "zone_id": "ff80808261418b240161d163e39e11a0", + "zone_name": "prod.otc.appagile.", + "create_at": "2018-02-26T09:14:23.766", + "update_at": "2018-02-26T09:14:23.779", + "default": False, + "project_id": "09781c0169b34685ba2c2f38f45e96e1", + "links": { + "self": "https://dns.eu-de.otc.t-systems.com/v2/zones/ff80808261418b240161d163e39e11a0/recordsets/ff80808261418b240161d164409a11a7" + } + } + ], + "metadata": { + "total_count": 7 + } +} + class TestRecordSet(base.TestCase): @@ -61,3 +135,24 @@ def test_make_it(self): self.assertEqual(EXAMPLE['zone_id'], sot.zone_id) self.assertEqual(EXAMPLE['create_at'], sot.created_at) self.assertEqual(EXAMPLE['update_at'], sot.updated_at) + + def test_get_next_link(self): + sot = recordset.Recordset.new() + response = mock.Mock() + response.status_code = 200 + uri = '/zones/ff80808272701cbe0172cbca17f91882/recordsets' + data = copy.deepcopy(DATA) + dict_marker = {'marker': 'ff80808261418b240161d164409a11a7'} + marker = dict_marker.get("marker") + limit = None + total_yielded = 3 + result = sot._get_next_link( + uri=uri, + response=response, + data=data, + marker=marker, + limit=limit, + total_yielded=total_yielded + ) + self.assertEqual(uri, result[0]) + self.assertEqual(dict_marker, result[1]) From 3cdf56d058a1f1f54b4789d5a275e7e82af5ea86 Mon Sep 17 00:00:00 2001 From: "T. Schreiber" Date: Fri, 19 Jun 2020 15:44:36 +0000 Subject: [PATCH 2/2] fix list for recordset --- otcextensions/sdk/dns/v2/_base.py | 9 +- .../tests/unit/sdk/dns/v2/test_recordset.py | 120 +++++++----------- 2 files changed, 50 insertions(+), 79 deletions(-) diff --git a/otcextensions/sdk/dns/v2/_base.py b/otcextensions/sdk/dns/v2/_base.py index 8f5c5efd2..10f0c7e60 100644 --- a/otcextensions/sdk/dns/v2/_base.py +++ b/otcextensions/sdk/dns/v2/_base.py @@ -78,10 +78,6 @@ def _get_next_link(cls, uri, response, data, marker, limit, total_yielded): if links: next_link = links.get('next') total = data.get('metadata', {}).get('total_count') - if not next_link and total_yielded < total: - next_link = uri - params['marker'] = marker - return next_link, params if total: # We have a kill switch total_count = int(total) @@ -101,8 +97,9 @@ def _get_next_link(cls, uri, response, data, marker, limit, total_yielded): # If we still have no link, and limit was given and is non-zero, # and the number of records yielded equals the limit, then the user # is playing pagination ball so we should go ahead and try once more. - if not next_link and limit: + if not next_link: next_link = uri params['marker'] = marker - params['limit'] = limit + if limit: + params['limit'] = limit return next_link, params diff --git a/otcextensions/tests/unit/sdk/dns/v2/test_recordset.py b/otcextensions/tests/unit/sdk/dns/v2/test_recordset.py index 86e65df40..2168d962a 100644 --- a/otcextensions/tests/unit/sdk/dns/v2/test_recordset.py +++ b/otcextensions/tests/unit/sdk/dns/v2/test_recordset.py @@ -11,9 +11,6 @@ # under the License. from openstack.tests.unit import base -import copy -import mock - from otcextensions.sdk.dns.v2 import recordset @@ -41,68 +38,20 @@ DATA = { "links": { - "self": "https://dns.eu-de.otc.t-systems.com/v2/zones/ff80808261418b240161d163e39e11a0/recordsets" + "self": "https://example.com/v2/zones/2/recordsets" }, "recordsets": [ { - "id": "ff80808261418b240161d163e39e11a1", - "name": "prod.otc.appagile.", - "description": None, - "type": "SOA", - "ttl": 300, - "records": [ - "ns1.open-telekom-cloud.com. dl-otc-domains.telekom.de. (1 7200 900 1209600 300)" - ], - "status": "ACTIVE", - "zone_id": "ff80808261418b240161d163e39e11a0", - "zone_name": "prod.otc.appagile.", - "create_at": "2018-02-26T09:13:59.954", - "update_at": None, - "default": True, - "project_id": "09781c0169b34685ba2c2f38f45e96e1", - "links": { - "self": "https://dns.eu-de.otc.t-systems.com/v2/zones/ff80808261418b240161d163e39e11a0/recordsets/ff80808261418b240161d163e39e11a1" - } + "id": "1", + "name": "prod.otc.1." }, { - "id": "ff80808261418b240161d163e39e11a3", - "name": "prod.otc.appagile.", - "description": None, - "type": "NS", - "ttl": 172800, - "records": [ - "ns1.open-telekom-cloud.com." - ], - "status": "ACTIVE", - "zone_id": "ff80808261418b240161d163e39e11a0", - "zone_name": "prod.otc.appagile.", - "create_at": "2018-02-26T09:13:59.954", - "update_at": None, - "default": True, - "project_id": "09781c0169b34685ba2c2f38f45e96e1", - "links": { - "self": "https://dns.eu-de.otc.t-systems.com/v2/zones/ff80808261418b240161d163e39e11a0/recordsets/ff80808261418b240161d163e39e11a3" - } + "id": "a3", + "name": "prod.otc.2." }, { - "id": "ff80808261418b240161d164409a11a7", - "name": "satellite.central.prod.otc.appagile.", - "description": None, - "type": "A", - "ttl": 300, - "records": [ - "192.168.255.140" - ], - "status": "ACTIVE", - "zone_id": "ff80808261418b240161d163e39e11a0", - "zone_name": "prod.otc.appagile.", - "create_at": "2018-02-26T09:14:23.766", - "update_at": "2018-02-26T09:14:23.779", - "default": False, - "project_id": "09781c0169b34685ba2c2f38f45e96e1", - "links": { - "self": "https://dns.eu-de.otc.t-systems.com/v2/zones/ff80808261418b240161d163e39e11a0/recordsets/ff80808261418b240161d164409a11a7" - } + "id": "a7", + "name": "prod.otc.3." } ], "metadata": { @@ -137,22 +86,47 @@ def test_make_it(self): self.assertEqual(EXAMPLE['update_at'], sot.updated_at) def test_get_next_link(self): - sot = recordset.Recordset.new() - response = mock.Mock() - response.status_code = 200 - uri = '/zones/ff80808272701cbe0172cbca17f91882/recordsets' - data = copy.deepcopy(DATA) - dict_marker = {'marker': 'ff80808261418b240161d164409a11a7'} - marker = dict_marker.get("marker") - limit = None - total_yielded = 3 - result = sot._get_next_link( + uri = '/zones/2/recordsets' + marker = 'a7' + + result = recordset.Recordset._get_next_link( + uri=uri, + response=None, + data=DATA, + marker=marker, + limit=None, + total_yielded=3 + ) + self.assertEqual(uri, result[0]) + self.assertEqual({'marker': marker}, result[1]) + + def test_get_next_link2(self): + uri = '/zones/2/recordsets' + marker = 'a7' + + result = recordset.Recordset._get_next_link( + uri=uri, + response=None, + data=DATA, + marker=marker, + limit=None, + total_yielded=7 + ) + self.assertEqual(None, result[0]) + self.assertEqual({}, result[1]) + + def test_get_next_link3(self): + uri = '/zones/2/recordsets' + marker = 'a7' + limit = 3 + + result = recordset.Recordset._get_next_link( uri=uri, - response=response, - data=data, + response=None, + data=DATA, marker=marker, - limit=limit, - total_yielded=total_yielded + limit=3, + total_yielded=3 ) self.assertEqual(uri, result[0]) - self.assertEqual(dict_marker, result[1]) + self.assertEqual({'marker': marker, 'limit': limit}, result[1])