]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
return 404 for invalid api version request
authorMark McClain <mark.mcclain@dreamhost.com>
Mon, 9 Apr 2012 14:08:00 +0000 (10:08 -0400)
committerMark McClain <mark.mcclain@dreamhost.com>
Mon, 9 Apr 2012 14:08:00 +0000 (10:08 -0400)
fixes bug: 934115

This fix returns 404 for all non-root requests that route via the
versions app. For root requests ('/') the available api version info is
returned.

Change-Id: I701389d9239cb40426f7a47206642b56c7eeeae1

quantum/api/versions.py
quantum/tests/unit/test_api.py
quantum/tests/unit/testlib_api.py

index db271f70092447a2e399da571ba6aa4ba041e0fa..63f6e02036a501ddcdaa63a1494ca3e66490b19e 100644 (file)
@@ -40,6 +40,9 @@ class Versions(wsgi.Application):
             },
         ]
 
+        if req.path != '/':
+            return webob.exc.HTTPNotFound()
+
         builder = versions_view.get_view_builder(req)
         versions = [builder.build(version) for version in version_objs]
         response = dict(versions=versions)
index ea49ae0e62e8d1bd246bb9a38d4086e753bcae33..7bdf76ae12bb8f2f37d7ccda77ca70eb7ee985c5 100644 (file)
@@ -1,6 +1,6 @@
 # vim: tabstop=4 shiftwidth=4 softtabstop=4
 
-# Copyright 2010-2011 ????
+# Copyright 2010-2012 ????
 # All Rights Reserved.
 #
 #    Licensed under the Apache License, Version 2.0 (the "License"); you may
 #    under the License.
 #    @author: Salvatore Orlando, Citrix Systems
 
-
+import json
 import logging
-from webob import exc
+import unittest
+from lxml import etree
+from webob import exc, request
 
 import quantum.api.attachments as atts
 import quantum.api.networks as nets
 import quantum.api.ports as ports
+import quantum.api.versions as versions
 import quantum.tests.unit._test_api as test_api
 import quantum.tests.unit.testlib_api as testlib
 
@@ -360,3 +363,31 @@ class APIFiltersTest(test_api.AbstractAPITest):
         # Check port count: should return 2
         self.assertEqual(len(port_data['ports']), 2)
         LOG.debug("test_port_multiple_filters - END")
+
+
+class APIRootTest(unittest.TestCase):
+    def setUp(self):
+        self.app = versions.Versions()
+
+    def _test_root_responds_with_versions(self, content_type):
+        req = testlib.create_request('/', '', content_type)
+        response = self.app(req)
+        self.assertEquals(response.status_int, 200)
+        return response.body
+
+    def test_root_responds_with_versions_json(self):
+        body = self._test_root_responds_with_versions('application/json')
+        data = json.loads(body)
+        self.assertEquals('versions', data.keys()[0])
+
+    def test_root_responds_with_versions_xml(self):
+        body = self._test_root_responds_with_versions('application/xml')
+        root = etree.fromstring(body)
+        self.assertEquals(root.tag, 'versions')
+
+    def test_invalid_version(self):
+        req = testlib.create_request('/v99.99/tenants/tenantX/networks',
+                                    '',
+                                    'application/json')
+        response = self.app(req)
+        self.assertEquals(response.status_int, 404)
index 8a43895dd694363780c83aa19ad52d3be3d56ea4..0a8ac8a6398b49b342234d4e6d05aa9c29516512 100644 (file)
@@ -1,5 +1,4 @@
-import webob
-
+from quantum import wsgi
 from quantum.common.serializer import Serializer
 
 
@@ -8,7 +7,7 @@ def create_request(path, body, content_type, method='GET', query_string=None):
         url = "%s?%s" % (path, query_string)
     else:
         url = path
-    req = webob.Request.blank(url)
+    req = wsgi.Request.blank(url)
     req.method = method
     req.headers = {}
     req.headers['Accept'] = content_type