summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-03-18 07:15:35 +0000
committerGerrit Code Review <review@openstack.org>2016-03-18 07:15:36 +0000
commitc64c3936c174835c7ac1bd9ea9b82b4ae0aab113 (patch)
tree53500468628bdba23ee7dc9853890a36b0ccc482
parent77b6ea0bc5bb942fecd555dae852603fc6276ee6 (diff)
parent83a87ce2fb7bbfea2f94539e14c7c70341f091dd (diff)
downloadtrove-c64c3936c174835c7ac1bd9ea9b82b4ae0aab113.tar.gz
Merge "Fix pagination function"
-rw-r--r--trove/common/pagination.py3
-rw-r--r--trove/tests/scenario/runners/user_actions_runners.py28
-rw-r--r--trove/tests/unittests/common/test_pagination.py23
-rw-r--r--trove/tests/unittests/guestagent/test_mongodb_manager.py2
4 files changed, 44 insertions, 12 deletions
diff --git a/trove/common/pagination.py b/trove/common/pagination.py
index 6f57e54f..2946d306 100644
--- a/trove/common/pagination.py
+++ b/trove/common/pagination.py
@@ -40,7 +40,8 @@ def paginate_list(li, limit=None, marker=None, include_marker=False):
pos = bisect.bisect(li, marker)
if limit and pos + limit < len(li):
- return li[pos:pos + limit], li[pos + limit]
+ page = li[pos:pos + limit]
+ return page, page[-1]
else:
return li[pos:], None
diff --git a/trove/tests/scenario/runners/user_actions_runners.py b/trove/tests/scenario/runners/user_actions_runners.py
index baee6f66..e710bcb8 100644
--- a/trove/tests/scenario/runners/user_actions_runners.py
+++ b/trove/tests/scenario/runners/user_actions_runners.py
@@ -70,10 +70,10 @@ class UserActionsRunner(TestRunner):
def _assert_user_matches(self, user, expected_user_def):
user_name = expected_user_def['name']
- self.assert_equal(user.name, expected_user_def['name'],
+ self.assert_equal(expected_user_def['name'], user.name,
"Mismatch of names for user: %s" % user_name)
self.assert_list_elements_equal(
- user.databases, expected_user_def['databases'],
+ expected_user_def['databases'], user.databases,
"Mismatch of databases for user: %s" % user_name)
def run_users_list(self, expected_http_code=200):
@@ -116,8 +116,7 @@ class UserActionsRunner(TestRunner):
self.assert_pagination_match(list_page, full_list, 0, limit)
if marker:
last_user = list_page[-1]
- expected_marker = urllib_parse.quote(
- '%s@%s' % (last_user.name, last_user.host))
+ expected_marker = self.as_pagination_marker(last_user)
self.assert_equal(expected_marker, marker,
"Pagination marker should be the last element "
"in the page.")
@@ -126,6 +125,9 @@ class UserActionsRunner(TestRunner):
self.assert_pagination_match(
list_page, full_list, limit, len(full_list))
+ def as_pagination_marker(self, user):
+ return urllib_parse.quote(user.name)
+
def run_user_create_with_no_attributes(
self, expected_exception=exceptions.BadRequest,
expected_http_code=400):
@@ -352,3 +354,21 @@ class UserActionsRunner(TestRunner):
def get_system_users(self):
return self.get_datastore_config_property('ignore_users')
+
+
+class MysqlUserActionsRunner(UserActionsRunner):
+
+ def as_pagination_marker(self, user):
+ return urllib_parse.quote('%s@%s' % (user.name, user.host))
+
+
+class MariadbUserActionsRunner(MysqlUserActionsRunner):
+
+ def __init__(self):
+ super(MariadbUserActionsRunner, self).__init__()
+
+
+class PerconaUserActionsRunner(MysqlUserActionsRunner):
+
+ def __init__(self):
+ super(PerconaUserActionsRunner, self).__init__()
diff --git a/trove/tests/unittests/common/test_pagination.py b/trove/tests/unittests/common/test_pagination.py
index 73978018..38d54d8c 100644
--- a/trove/tests/unittests/common/test_pagination.py
+++ b/trove/tests/unittests/common/test_pagination.py
@@ -47,18 +47,29 @@ class TestPaginatedDataView(trove_testtools.TestCase):
# start list
li_1, marker_1 = self._do_paginate_list(limit=2)
self.assertEqual(['a', 'b'], li_1)
- self.assertEqual('c', marker_1)
+ self.assertEqual('b', marker_1)
# continue list, do not include marker in result
li_2, marker_2 = self._do_paginate_list(limit=2, marker=marker_1)
- self.assertEqual(['d', 'e'], li_2)
- self.assertIsNone(marker_2)
+ self.assertEqual(['c', 'd'], li_2)
+ self.assertEqual('d', marker_2)
+ li_3, marker_3 = self._do_paginate_list(limit=2, marker=marker_2)
+ self.assertEqual(['e'], li_3)
+ self.assertIsNone(marker_3)
# alternate continue list, include marker in result
- li_3, marker_3 = self._do_paginate_list(limit=2, marker=marker_1,
+ li_4, marker_4 = self._do_paginate_list(limit=2, marker=marker_1,
include_marker=True)
- self.assertEqual(['c', 'd'], li_3)
- self.assertEqual('e', marker_3)
+ self.assertEqual(['b', 'c'], li_4)
+ self.assertEqual('c', marker_4)
+ li_5, marker_5 = self._do_paginate_list(limit=2, marker=marker_4,
+ include_marker=True)
+ self.assertEqual(['c', 'd'], li_5)
+ self.assertEqual('d', marker_5)
+ li_6, marker_6 = self._do_paginate_list(limit=2, marker=marker_5,
+ include_marker=True)
+ self.assertEqual(['d', 'e'], li_6)
+ self.assertIsNone(marker_6)
# bad marker
li_4, marker_4 = self._do_paginate_list(marker='f')
diff --git a/trove/tests/unittests/guestagent/test_mongodb_manager.py b/trove/tests/unittests/guestagent/test_mongodb_manager.py
index 4b9edec6..f1322211 100644
--- a/trove/tests/unittests/guestagent/test_mongodb_manager.py
+++ b/trove/tests/unittests/guestagent/test_mongodb_manager.py
@@ -353,7 +353,7 @@ class GuestAgentMongoDBManagerTest(trove_testtools.TestCase):
self.assertEqual([models.MongoDBSchema('db1').serialize(),
models.MongoDBSchema('db2').serialize()],
dbs)
- self.assertEqual(models.MongoDBSchema('db3').serialize(),
+ self.assertEqual(models.MongoDBSchema('db2').serialize(),
next_marker)
@mock.patch.object(service, 'MongoDBClient')