Convert marker format for listing manageable resources
The marker for listing manageable resources is the "reference" property which should be dict. We should convert and check its format before using. Change-Id: I190ff8506e0056d685ce429c2fa275b097f9e635 Closes-bug: #1657992
This commit is contained in:
@@ -911,7 +911,8 @@ class VolumeUtilsTestCase(test.TestCase):
|
||||
result = volume_utils.extract_id_from_snapshot_name(snap_name)
|
||||
self.assertIsNone(result)
|
||||
|
||||
def test_paginate_entries_list_with_marker(self):
|
||||
@ddt.data({"name": "vol02"}, '{"name": "vol02"}')
|
||||
def test_paginate_entries_list_with_marker(self, marker):
|
||||
entries = [{'reference': {'name': 'vol03'}, 'size': 1},
|
||||
{'reference': {'name': 'vol01'}, 'size': 3},
|
||||
{'reference': {'name': 'vol02'}, 'size': 3},
|
||||
@@ -922,7 +923,7 @@ class VolumeUtilsTestCase(test.TestCase):
|
||||
expected = [{'reference': {'name': 'vol04'}, 'size': 2},
|
||||
{'reference': {'name': 'vol03'}, 'size': 1},
|
||||
{'reference': {'name': 'vol05'}, 'size': 1}]
|
||||
res = volume_utils.paginate_entries_list(entries, {'name': 'vol02'}, 3,
|
||||
res = volume_utils.paginate_entries_list(entries, marker, 3,
|
||||
1, ['size', 'reference'],
|
||||
['desc', 'asc'])
|
||||
self.assertEqual(expected, res)
|
||||
@@ -942,6 +943,14 @@ class VolumeUtilsTestCase(test.TestCase):
|
||||
['reference'], ['desc'])
|
||||
self.assertEqual(expected, res)
|
||||
|
||||
def test_paginate_entries_list_marker_invalid_format(self):
|
||||
entries = [{'reference': {'name': 'vol03'}, 'size': 1},
|
||||
{'reference': {'name': 'vol01'}, 'size': 3}]
|
||||
self.assertRaises(exception.InvalidInput,
|
||||
volume_utils.paginate_entries_list,
|
||||
entries, "invalid_format", 3, None,
|
||||
['size', 'reference'], ['desc', 'asc'])
|
||||
|
||||
def test_paginate_entries_list_marker_not_found(self):
|
||||
entries = [{'reference': {'name': 'vol03'}, 'size': 1},
|
||||
{'reference': {'name': 'vol01'}, 'size': 3}]
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
import ast
|
||||
import functools
|
||||
import json
|
||||
import math
|
||||
import operator
|
||||
from os import urandom
|
||||
@@ -839,6 +840,13 @@ def paginate_entries_list(entries, marker, limit, offset, sort_keys,
|
||||
if offset is None:
|
||||
offset = 0
|
||||
if marker:
|
||||
if not isinstance(marker, dict):
|
||||
try:
|
||||
marker = json.loads(marker)
|
||||
except ValueError:
|
||||
msg = _('marker %s can not be analysed, please use json like '
|
||||
'format') % marker
|
||||
raise exception.InvalidInput(reason=msg)
|
||||
start_index = -1
|
||||
for i, entry in enumerate(sorted_entries):
|
||||
if entry['reference'] == marker:
|
||||
|
||||
Reference in New Issue
Block a user