Merge "NEC plugin: Allow to add prefix to OFC REST URL"
This commit is contained in:
commit
aa8acad98f
@ -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
|
||||
|
||||
|
@ -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',
|
||||
|
@ -71,6 +71,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,
|
||||
|
@ -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)
|
||||
|
@ -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.")
|
||||
|
Loading…
Reference in New Issue
Block a user