diff --git a/glance/api/v2/images.py b/glance/api/v2/images.py index 0ddd5c6f03..0bdadc4a93 100644 --- a/glance/api/v2/images.py +++ b/glance/api/v2/images.py @@ -113,7 +113,8 @@ class ImagesController(object): result['next_marker'] = images[-1].image_id except (exception.NotFound, exception.InvalidSortKey, exception.InvalidFilterRangeValue, - exception.InvalidParameterValue) as e: + exception.InvalidParameterValue, + exception.InvalidFilterOperatorValue) as e: raise webob.exc.HTTPBadRequest(explanation=e.msg) except exception.Forbidden as e: LOG.debug("User not permitted to retrieve images index") diff --git a/glance/tests/functional/v2/test_images.py b/glance/tests/functional/v2/test_images.py index 01409cf387..e4856069a1 100644 --- a/glance/tests/functional/v2/test_images.py +++ b/glance/tests/functional/v2/test_images.py @@ -2500,6 +2500,13 @@ class TestImages(functional.FunctionalTest): response = requests.get(path, headers=self._headers()) self.assertEqual(400, response.status_code) + # Image list filters by updated_at and created_at with invalid operator + url_template = '/v2/images?%s=invalid_operator:2015-11-19T12:24:02Z' + for filter in ['updated_at', 'created_at']: + path = self._url(url_template % filter) + response = requests.get(path, headers=self._headers()) + self.assertEqual(400, response.status_code) + # Begin pagination after the first image template_url = ('/v2/images?limit=2&sort_dir=asc&sort_key=name' '&marker=%s&type=kernel&ping=pong')