]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Allow only GET on Root controller
authorSalvatore Orlando <salv.orlando@gmail.com>
Thu, 13 Aug 2015 21:41:21 +0000 (14:41 -0700)
committergongysh <gong.yongsheng@99cloud.net>
Sat, 5 Sep 2015 07:21:01 +0000 (07:21 +0000)
This patch simply ensures a 405 error is returned when a HTTP
method different from GET is invoked on '/'.
This differs from the eventlet WSGI server behaviour; however
returning the same response as for a GET for any method, even
made up ones - like 'meh' - is a mistake that should not be
repeated in the Pecan WSGI server.

Change-Id: I4305f374e4aacab718daa6f131f278cc69e8d699

neutron/pecan_wsgi/controllers/root.py
neutron/tests/functional/pecan_wsgi/test_functional.py

index 6bcace413fe50f0e10aedd7eb15df54162756ab9..396778bac880923cee39fac91b11724b6130348d 100644 (file)
@@ -54,6 +54,12 @@ class RootController(object):
         versions = [builder.build(version) for version in _get_version_info()]
         return dict(versions=versions)
 
+    @when(index, method='POST')
+    @when(index, method='PUT')
+    @when(index, method='DELETE')
+    def not_supported(self):
+        pecan.abort(405)
+
 
 class ExtensionsController(object):
 
index ee3d4ed4fe1a5a4f53d2b811ece29918ec607a83..8e4b135d3eeb1fe0ad861014d489bdead92feda5 100644 (file)
@@ -248,3 +248,23 @@ class TestRootController(PecanFunctionalTest):
         for (attr, value) in controllers.V2Controller.version_info.items():
             self.assertIn(attr, versions[0])
             self.assertEqual(value, versions[0][attr])
+
+    def _test_method_returns_405(self, method):
+        api_method = getattr(self.app, method)
+        response = api_method('/', expect_errors=True)
+        self.assertEqual(response.status_int, 405)
+
+    def test_post(self):
+        self._test_method_returns_405('post')
+
+    def test_put(self):
+        self._test_method_returns_405('put')
+
+    def test_patch(self):
+        self._test_method_returns_405('patch')
+
+    def test_delete(self):
+        self._test_method_returns_405('delete')
+
+    def test_head(self):
+        self._test_method_returns_405('head')