Merge "Handle different endpoint format"
This commit is contained in:
commit
21c814390d
@ -40,11 +40,12 @@ class BaseTestCase(testtools.TestCase):
|
|||||||
|
|
||||||
|
|
||||||
class FakeAPI(object):
|
class FakeAPI(object):
|
||||||
def __init__(self, responses):
|
def __init__(self, responses, endpoint=None):
|
||||||
self.responses = responses
|
self.responses = responses
|
||||||
self.calls = []
|
self.calls = []
|
||||||
self.api_version = api_versions.APIVersion(
|
self.api_version = api_versions.APIVersion(
|
||||||
api_versions.MAX_API_VERSION)
|
api_versions.MAX_API_VERSION)
|
||||||
|
self.endpoint = endpoint
|
||||||
|
|
||||||
def _request(self, method, url, headers=None, body=None):
|
def _request(self, method, url, headers=None, body=None):
|
||||||
call = (method, url, headers or {}, body)
|
call = (method, url, headers or {}, body)
|
||||||
@ -61,7 +62,7 @@ class FakeAPI(object):
|
|||||||
return FakeResponse(response[0]), response[1]
|
return FakeResponse(response[0]), response[1]
|
||||||
|
|
||||||
def get_endpoint(self, *args, **kwargs):
|
def get_endpoint(self, *args, **kwargs):
|
||||||
return '/v1'
|
return self.endpoint or '/v1'
|
||||||
|
|
||||||
|
|
||||||
class FakeConnection(object):
|
class FakeConnection(object):
|
||||||
|
@ -24,7 +24,7 @@ VERSION1 = {'status': 'CURRENT',
|
|||||||
}
|
}
|
||||||
|
|
||||||
fake_responses = {
|
fake_responses = {
|
||||||
'/':
|
'https://example.com':
|
||||||
{
|
{
|
||||||
'GET': (
|
'GET': (
|
||||||
{},
|
{},
|
||||||
@ -36,15 +36,17 @@ fake_responses = {
|
|||||||
|
|
||||||
class VersionManagerTest(testtools.TestCase):
|
class VersionManagerTest(testtools.TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
super(VersionManagerTest, self).setUp()
|
|
||||||
self.api = utils.FakeAPI(fake_responses)
|
|
||||||
self.mgr = versions.VersionManager(self.api)
|
|
||||||
|
|
||||||
def test_version_list(self):
|
def test_version_list(self):
|
||||||
versions = self.mgr.list()
|
self._test_version_list('https://example.com')
|
||||||
|
self._test_version_list('https://example.com/v1')
|
||||||
|
self._test_version_list('https://example.com/v1/')
|
||||||
|
|
||||||
|
def _test_version_list(self, endpoint):
|
||||||
|
api = utils.FakeAPI(fake_responses, endpoint=endpoint)
|
||||||
|
mgr = versions.VersionManager(api)
|
||||||
|
api_versions = mgr.list()
|
||||||
expect = [
|
expect = [
|
||||||
('GET', '/', {}, None),
|
('GET', 'https://example.com', {}, None),
|
||||||
]
|
]
|
||||||
self.assertEqual(expect, self.api.calls)
|
self.assertEqual(expect, api.calls)
|
||||||
self.assertThat(versions, matchers.HasLength(1))
|
self.assertThat(api_versions, matchers.HasLength(1))
|
||||||
|
@ -10,6 +10,8 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
from six.moves import urllib
|
||||||
|
|
||||||
from zunclient.common import base
|
from zunclient.common import base
|
||||||
|
|
||||||
|
|
||||||
@ -22,9 +24,25 @@ class VersionManager(base.Manager):
|
|||||||
resource_class = Version
|
resource_class = Version
|
||||||
|
|
||||||
def list(self):
|
def list(self):
|
||||||
url = "%s" % self.api.get_endpoint()
|
endpoint = self.api.get_endpoint()
|
||||||
url = "%s/" % url.rsplit("/", 1)[0]
|
url = urllib.parse.urlparse(endpoint)
|
||||||
return self._list(url, "versions")
|
# NOTE(hongbin): endpoint URL has at least 2 formats:
|
||||||
|
# 1. the classic (legacy) endpoint:
|
||||||
|
# http://{host}:{optional_port}/v1/
|
||||||
|
# 2. under wsgi:
|
||||||
|
# http://{host}:{optional_port}/container/v1
|
||||||
|
if url.path.endswith("v1") or "/v1/" in url.path:
|
||||||
|
# this way should handle all 2 possible formats
|
||||||
|
path = url.path[:url.path.rfind("/v1")]
|
||||||
|
version_url = '%s://%s%s' % (url.scheme, url.netloc, path)
|
||||||
|
else:
|
||||||
|
# NOTE(hongbin): probably, it is one of the next cases:
|
||||||
|
# * https://container.example.com/
|
||||||
|
# * https://example.com/container
|
||||||
|
# leave as is without cropping.
|
||||||
|
version_url = endpoint
|
||||||
|
|
||||||
|
return self._list(version_url, "versions")
|
||||||
|
|
||||||
def get_current(self):
|
def get_current(self):
|
||||||
for version in self.list():
|
for version in self.list():
|
||||||
|
Loading…
x
Reference in New Issue
Block a user