Browse Source

Merge "Fix bug: AttributeError arises while sorting with standard attributes" into stable/stein

tags/14.1.0
Zuul 2 weeks ago
parent
commit
da6f956480
3 changed files with 26 additions and 3 deletions
  1. +3
    -1
      neutron/api/api_common.py
  2. +17
    -2
      neutron/tests/unit/api/v2/test_base.py
  3. +6
    -0
      releasenotes/notes/add-sort-keys-check-for-get-sorts-b9e3e86ddcb3bc3a.yaml

+ 3
- 1
neutron/api/api_common.py View File

@@ -233,7 +233,9 @@ def get_sorts(request, attr_info):
msg = _("The number of sort_keys and sort_dirs must be same")
raise exc.HTTPBadRequest(explanation=msg)
valid_dirs = [constants.SORT_DIRECTION_ASC, constants.SORT_DIRECTION_DESC]
absent_keys = [x for x in sort_keys if x not in attr_info]
valid_sort_keys = set(attr for attr, schema in attr_info.items()
if schema.get('is_sort_key', False))
absent_keys = [x for x in sort_keys if x not in valid_sort_keys]
if absent_keys:
msg = _("%s is invalid attribute for sort_keys") % absent_keys
raise exc.HTTPBadRequest(explanation=msg)

+ 17
- 2
neutron/tests/unit/api/v2/test_base.py View File

@@ -1560,7 +1560,10 @@ class SortingTestCase(base.BaseTestCase):
def test_get_sorts(self):
path = '/?sort_key=foo&sort_dir=desc&sort_key=bar&sort_dir=asc'
request = webob.Request.blank(path)
attr_info = {'foo': {'key': 'val'}, 'bar': {'key': 'val'}}
attr_info = {
'foo': {'key': 'val', 'is_sort_key': True},
'bar': {'key': 'val', 'is_sort_key': True}
}
expect_val = [('foo', False), ('bar', True)]
actual_val = api_common.get_sorts(request, attr_info)
self.assertEqual(expect_val, actual_val)
@@ -1568,11 +1571,23 @@ class SortingTestCase(base.BaseTestCase):
def test_get_sorts_with_project_id(self):
path = '/?sort_key=project_id&sort_dir=desc'
request = webob.Request.blank(path)
attr_info = {'tenant_id': {'key': 'val'}}
attr_info = {'tenant_id': {'key': 'val', 'is_sort_key': True}}
expect_val = [('project_id', False)]
actual_val = api_common.get_sorts(request, attr_info)
self.assertEqual(expect_val, actual_val)

def test_get_sorts_with_non_sort_key(self):
path = '/?sort_key=created_at&sort_dir=desc'
request = webob.Request.blank(path)
attr_info = {
'foo': {'key': 'val', 'is_sort_key': True},
'bar': {'key': 'val', 'is_sort_key': True},
'created_at': {'key': 'val'}
}
self.assertRaises(exc.HTTPBadRequest,
api_common.get_sorts,
request, attr_info)


class FiltersTestCase(base.BaseTestCase):
def test_all_skip_args(self):

+ 6
- 0
releasenotes/notes/add-sort-keys-check-for-get-sorts-b9e3e86ddcb3bc3a.yaml View File

@@ -0,0 +1,6 @@
---
fixes:
- |
Add sort-keys validation logic to method ``get_sorts`` in
``neutron.api.api_common``. See the link below for more:
https://bugs.launchpad.net/neutron/+bug/1659175

Loading…
Cancel
Save