Don't return 300 when requesting /versions
Whenever the versions resource is used, it'll reply with a 300 status code. This is the desired behavior when requesting versions that we don't support and/or non-existent. However, when the user requests specifically for the `/versions` endpoint, Glance shouldn't reply with a 300 since there's just 1 choice for such endpoint. APIImpact Closes-bug: #1491350 Change-Id: I23e3780e5d1b609753ffef59418115f45ab45fe7
This commit is contained in:
parent
b2c2ecee50
commit
3fc253c197
|
@ -49,7 +49,7 @@ class VersionNegotiationFilter(wsgi.Middleware):
|
||||||
# If the request is for /versions, just return the versions container
|
# If the request is for /versions, just return the versions container
|
||||||
# TODO(bcwaldon): deprecate this behavior
|
# TODO(bcwaldon): deprecate this behavior
|
||||||
if req.path_info_peek() == "versions":
|
if req.path_info_peek() == "versions":
|
||||||
return self.versions_app
|
return self.versions_app.index(req, explicit=True)
|
||||||
|
|
||||||
accept = str(req.accept)
|
accept = str(req.accept)
|
||||||
if accept.startswith('application/vnd.openstack.images-'):
|
if accept.startswith('application/vnd.openstack.images-'):
|
||||||
|
|
|
@ -41,7 +41,7 @@ class Controller(object):
|
||||||
|
|
||||||
"""A wsgi controller that reports which API versions are supported."""
|
"""A wsgi controller that reports which API versions are supported."""
|
||||||
|
|
||||||
def index(self, req):
|
def index(self, req, explicit=False):
|
||||||
"""Respond to a request for all OpenStack API versions."""
|
"""Respond to a request for all OpenStack API versions."""
|
||||||
def build_version_object(version, path, status):
|
def build_version_object(version, path, status):
|
||||||
url = CONF.public_endpoint or req.host_url
|
url = CONF.public_endpoint or req.host_url
|
||||||
|
@ -73,8 +73,9 @@ class Controller(object):
|
||||||
build_version_object(1.0, 'v1', 'SUPPORTED'),
|
build_version_object(1.0, 'v1', 'SUPPORTED'),
|
||||||
])
|
])
|
||||||
|
|
||||||
|
status = explicit and http_client.OK or http_client.MULTIPLE_CHOICES
|
||||||
response = webob.Response(request=req,
|
response = webob.Response(request=req,
|
||||||
status=http_client.MULTIPLE_CHOICES,
|
status=status,
|
||||||
content_type='application/json')
|
content_type='application/json')
|
||||||
json = jsonutils.dumps(dict(versions=version_objs))
|
json = jsonutils.dumps(dict(versions=version_objs))
|
||||||
if six.PY3:
|
if six.PY3:
|
||||||
|
|
|
@ -295,7 +295,7 @@ class TestApiPaths(functional.FunctionalTest):
|
||||||
path = 'http://%s:%d/versions' % ('127.0.0.1', self.api_port)
|
path = 'http://%s:%d/versions' % ('127.0.0.1', self.api_port)
|
||||||
http = httplib2.Http()
|
http = httplib2.Http()
|
||||||
response, content = http.request(path, 'GET')
|
response, content = http.request(path, 'GET')
|
||||||
self.assertEqual(300, response.status)
|
self.assertEqual(200, response.status)
|
||||||
self.assertEqual(self.versions_json, content)
|
self.assertEqual(self.versions_json, content)
|
||||||
|
|
||||||
def test_get_versions_path_with_openstack_header(self):
|
def test_get_versions_path_with_openstack_header(self):
|
||||||
|
@ -307,7 +307,7 @@ class TestApiPaths(functional.FunctionalTest):
|
||||||
http = httplib2.Http()
|
http = httplib2.Http()
|
||||||
headers = {'Accept': 'application/vnd.openstack.images-v1'}
|
headers = {'Accept': 'application/vnd.openstack.images-v1'}
|
||||||
response, content = http.request(path, 'GET', headers=headers)
|
response, content = http.request(path, 'GET', headers=headers)
|
||||||
self.assertEqual(300, response.status)
|
self.assertEqual(200, response.status)
|
||||||
self.assertEqual(self.versions_json, content)
|
self.assertEqual(self.versions_json, content)
|
||||||
|
|
||||||
def test_get_v1_versions_path(self):
|
def test_get_v1_versions_path(self):
|
||||||
|
|
|
@ -79,6 +79,4 @@ class TestSSL(functional.FunctionalTest):
|
||||||
path = "https://%s:%d/versions" % ("127.0.0.1", self.api_port)
|
path = "https://%s:%d/versions" % ("127.0.0.1", self.api_port)
|
||||||
https = httplib2.Http(ca_certs=self.ca_file)
|
https = httplib2.Http(ca_certs=self.ca_file)
|
||||||
response, content = https.request(path, 'GET')
|
response, content = https.request(path, 'GET')
|
||||||
|
self.assertEqual(200, response.status)
|
||||||
# Expect a "300 Multiple Choices"
|
|
||||||
self.assertEqual(300, response.status)
|
|
||||||
|
|
Loading…
Reference in New Issue