]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
NEC plugin: Allow to add prefix to OFC REST URL
authorAkihiro Motoki <motoki@da.jp.nec.com>
Wed, 19 Mar 2014 16:36:13 +0000 (01:36 +0900)
committerAkihiro Motoki <motoki@da.jp.nec.com>
Fri, 21 Mar 2014 19:51:25 +0000 (04:51 +0900)
Closes-Bug: #1295802
Change-Id: Ieaa3bb7c601fad98506168de1f8ac191849c6569

etc/neutron/plugins/nec/nec.ini
neutron/plugins/nec/common/config.py
neutron/plugins/nec/common/ofc_client.py
neutron/tests/unit/nec/test_config.py
neutron/tests/unit/nec/test_ofc_client.py

index 878f9e17a1c23cae8c4598007f7d2e2117e6b434..bac5967d9da3059a86c65e0abff7edfdbeddb893 100644 (file)
@@ -21,6 +21,10 @@ firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewal
 # host = 127.0.0.1
 # port = 8888
 
+# Base URL of OpenFlow Controller REST API.
+# It is prepended to a path of each API request.
+# path_prefix =
+
 # Drivers are in neutron/plugins/nec/drivers/ .
 # driver = trema
 
index 3717468a2fbd0f23ad1511f94cd07492c179ae00..21c5e18246e8d4aa44d0817927d75152430f7051 100644 (file)
@@ -36,6 +36,9 @@ agent_opts = [
 ofc_opts = [
     cfg.StrOpt('host', default='127.0.0.1',
                help=_("Host to connect to")),
+    cfg.StrOpt('path_prefix', default='',
+               help=_("Base URL of OFC REST API. "
+                      "It is prepended to each API request.")),
     cfg.StrOpt('port', default='8888',
                help=_("Port to connect to")),
     cfg.StrOpt('driver', default='trema',
index 6456cece85fa1c47eaf395ede14ac45022eb7df4..b1e669300b2f09d451394370d6858a6423610e6b 100644 (file)
@@ -70,6 +70,7 @@ class OFCClient(object):
                 {'status': status, 'msg': detail})
 
     def do_single_request(self, method, action, body=None):
+        action = config.OFC.path_prefix + action
         LOG.debug(_("Client request: %(host)s:%(port)s "
                     "%(method)s %(action)s [%(body)s]"),
                   {'host': self.host, 'port': self.port,
index 907c33dfe7a8b412a87294ca2e473919f24d5e17..9d9fad521bfe26548e4e5e4eceed4837d47c26ff 100644 (file)
@@ -28,6 +28,8 @@ class ConfigurationTest(base.BaseTestCase):
 
         self.assertEqual('127.0.0.1', config.CONF.OFC.host)
         self.assertEqual('8888', config.CONF.OFC.port)
+        # Check path_prefix is an empty string explicitly.
+        self.assertEqual('', config.CONF.OFC.path_prefix)
         self.assertEqual('trema', config.CONF.OFC.driver)
         self.assertTrue(config.CONF.OFC.enable_packet_filter)
         self.assertFalse(config.CONF.OFC.use_ssl)
index 101cca841734032a4dff21608d8456b3e68692c7..68668d4d4841b4844de0475d292e05f44797d3aa 100644 (file)
@@ -22,6 +22,7 @@ import socket
 import mock
 from oslo.config import cfg
 
+from neutron.plugins.nec.common import config
 from neutron.plugins.nec.common import exceptions as nexc
 from neutron.plugins.nec.common import ofc_client
 from neutron.tests import base
@@ -29,8 +30,8 @@ from neutron.tests import base
 
 class OFCClientTest(base.BaseTestCase):
 
-    def _test_do_request(self, status, resbody, data, exctype=None,
-                         exc_checks=None):
+    def _test_do_request(self, status, resbody, expected_data, exctype=None,
+                         exc_checks=None, path_prefix=None):
         res = mock.Mock()
         res.status = status
         res.read.return_value = resbody
@@ -41,21 +42,22 @@ class OFCClientTest(base.BaseTestCase):
         with mock.patch.object(ofc_client.OFCClient, 'get_connection',
                                return_value=conn):
             client = ofc_client.OFCClient()
-
+            path = '/somewhere'
+            realpath = path_prefix + path if path_prefix else path
             if exctype:
                 e = self.assertRaises(exctype, client.do_request,
-                                      'GET', '/somewhere', body={})
-                self.assertEqual(data, str(e))
+                                      'GET', path, body={})
+                self.assertEqual(expected_data, str(e))
                 if exc_checks:
                     for k, v in exc_checks.items():
                         self.assertEqual(v, getattr(e, k))
             else:
-                response = client.do_request('GET', '/somewhere', body={})
-                self.assertEqual(response, data)
+                response = client.do_request('GET', path, body={})
+                self.assertEqual(response, expected_data)
 
             headers = {"Content-Type": "application/json"}
             expected = [
-                mock.call.request('GET', '/somewhere', '{}', headers),
+                mock.call.request('GET', realpath, '{}', headers),
                 mock.call.getresponse(),
             ]
             conn.assert_has_calls(expected)
@@ -73,6 +75,11 @@ class OFCClientTest(base.BaseTestCase):
         for status in [201, 202, 204]:
             self._test_do_request(status, None, None)
 
+    def test_do_request_with_path_prefix(self):
+        config.CONF.set_override('path_prefix', '/dummy', group='OFC')
+        self._test_do_request(200, json.dumps([1, 2, 3]), [1, 2, 3],
+                              path_prefix='/dummy')
+
     def test_do_request_returns_404(self):
         resbody = ''
         errmsg = _("The specified OFC resource (/somewhere) is not found.")