diff --git a/trove/common/cfg.py b/trove/common/cfg.py index abfa043206..81d6528fe4 100644 --- a/trove/common/cfg.py +++ b/trove/common/cfg.py @@ -44,6 +44,15 @@ path_opts = [ help='Directory where the Trove python module is installed.'), ] +versions_opts = [ + cfg.StrOpt('public_endpoint', default=None, + help='Public URL to use for versions endpoint. The default ' + 'is None, which will use the request\'s host_url ' + 'attribute to populate the URL base. If Trove is ' + 'operating behind a proxy, you will want to change ' + 'this to represent the proxy\'s URL.') +] + common_opts = [ cfg.IPOpt('bind_host', default='0.0.0.0', help='IP address the API server will listen on.'), @@ -1523,6 +1532,7 @@ rpcapi_cap_opts = [ CONF = cfg.CONF CONF.register_opts(path_opts) +CONF.register_opts(versions_opts) CONF.register_opts(common_opts) CONF.register_opts(database_opts, 'database') diff --git a/trove/tests/unittests/api/test_versions.py b/trove/tests/unittests/api/test_versions.py index b4b1860251..ca44f79505 100644 --- a/trove/tests/unittests/api/test_versions.py +++ b/trove/tests/unittests/api/test_versions.py @@ -14,7 +14,9 @@ # under the License. from mock import Mock +import webob +from trove.common import cfg from trove.tests.unittests import trove_testtools from trove.versions import BaseVersion from trove.versions import Version @@ -41,6 +43,10 @@ class VersionsControllerTest(trove_testtools.TestCase): self.assertIsNotNone(self.controller, "VersionsController instance was None") + def tearDown(self): + super(VersionsControllerTest, self).tearDown() + cfg.CONF.clear_override('public_endpoint') + def test_index_json(self): request = Mock() result = self.controller.index(request) @@ -66,6 +72,23 @@ class VersionsControllerTest(trove_testtools.TestCase): self.assertEqual('2012-08-01T00:00:00Z', json_data['updated'], 'Version updated value is incorrect') + def test_index_json_with_public_endpoint(self): + cfg.CONF.set_override('public_endpoint', "https://example.com:8779") + req = webob.Request.blank('/') + resp = self.controller.index(req) + result = resp.data('application/json')['versions'] + expected = [ + { + 'status': 'CURRENT', + 'updated': '2012-08-01T00:00:00Z', + 'id': 'v1.0', + 'links': [{ + 'href': 'https://example.com:8779/v1.0/', + 'rel': 'self'}] + } + ] + self.assertEqual(expected, result) + def test_show_json(self): request = Mock() request.url_version = '1.0' @@ -84,6 +107,22 @@ class VersionsControllerTest(trove_testtools.TestCase): "Version updated was not '2012-08-01T00:00:00Z'") self.assertEqual('v1.0', version['id'], "Version id was not 'v1.0'") + def test_show_json_with_public_endpoint(self): + cfg.CONF.set_override('public_endpoint', "https://example.com:8779") + req = webob.Request.blank('/') + req.url_version = '1.0' + resp = self.controller.show(req) + result = resp.data('application/json')['version'] + expected = { + 'status': 'CURRENT', + 'updated': '2012-08-01T00:00:00Z', + 'id': 'v1.0', + 'links': [{ + 'href': 'https://example.com:8779/', + 'rel': 'self'}] + } + self.assertEqual(expected, result) + class BaseVersionTestCase(trove_testtools.TestCase): diff --git a/trove/versions.py b/trove/versions.py index 7b2a81d009..48ed94d90b 100644 --- a/trove/versions.py +++ b/trove/versions.py @@ -16,9 +16,10 @@ import os import routes +from trove.common import cfg from trove.common import wsgi - +CONF = cfg.CONF VERSIONS = { "1.0": { "id": "v1.0", @@ -56,7 +57,7 @@ class BaseVersion(object): def __init__(self, id, status, base_url, updated): self.id = id self.status = status - self.base_url = base_url + self.base_url = CONF.public_endpoint or base_url self.updated = updated def data(self):