support micro version if sent
Don't hard code the check for version 3.0, support micro version such as v3.1, v3.1.1, v3.2 etc... Change-Id: I7b249fc71894caafaf847bcfbb0c02907a740e6e Closes-Bug: #1383853
This commit is contained in:
parent
f9c88bdb3e
commit
4e20760a6f
|
@ -1348,12 +1348,15 @@ class AuthProtocol(object):
|
|||
interface='admin',
|
||||
connect_retries=self._conf_get('http_request_max_retries'))
|
||||
|
||||
auth_version = self._conf_get('auth_version')
|
||||
if auth_version is not None:
|
||||
auth_version = discover.normalize_version_number(auth_version)
|
||||
return _IdentityServer(
|
||||
self._LOG,
|
||||
adap,
|
||||
include_service_catalog=self._include_service_catalog,
|
||||
auth_uri=self._conf_get('auth_uri'),
|
||||
requested_auth_version=self._conf_get('auth_version'))
|
||||
requested_auth_version=auth_version)
|
||||
|
||||
def _token_cache_factory(self):
|
||||
security_strategy = self._conf_get('memcache_security_strategy')
|
||||
|
@ -1477,6 +1480,10 @@ class _IdentityServer(object):
|
|||
# Built on-demand with self._request_strategy.
|
||||
self._request_strategy_obj = None
|
||||
|
||||
@property
|
||||
def auth_version(self):
|
||||
return self._request_strategy.AUTH_VERSION
|
||||
|
||||
@property
|
||||
def _request_strategy(self):
|
||||
if not self._request_strategy_obj:
|
||||
|
@ -1491,13 +1498,17 @@ class _IdentityServer(object):
|
|||
return self._request_strategy_obj
|
||||
|
||||
def _get_strategy_class(self):
|
||||
# FIXME(jamielennox): Checking string equality is bad, but consistent
|
||||
# with the existing code. Fix this to better handle selecting v3.
|
||||
if self._requested_auth_version == 'v3.0':
|
||||
return _V3RequestStrategy
|
||||
elif self._requested_auth_version:
|
||||
if self._requested_auth_version:
|
||||
# A specific version was requested.
|
||||
if discover.version_match(_V3RequestStrategy.AUTH_VERSION,
|
||||
self._requested_auth_version):
|
||||
return _V3RequestStrategy
|
||||
|
||||
# The version isn't v3 so we don't know what to do. Just assume V2.
|
||||
return _V2RequestStrategy
|
||||
|
||||
# Specific version was not requested then we fall through to
|
||||
# discovering available versions from the server
|
||||
for klass in _REQUEST_STRATEGIES:
|
||||
if self._adapter.get_endpoint(version=klass.AUTH_VERSION):
|
||||
msg = _LI('Auth Token confirmed use of %s apis')
|
||||
|
|
|
@ -2395,6 +2395,37 @@ class OtherTests(BaseAuthTokenMiddlewareTest):
|
|||
|
||||
self.assertIn('versions [v3.0, v2.0]', self.logger.output)
|
||||
|
||||
def _assert_auth_version(self, conf_version, identity_server_version):
|
||||
self.set_middleware(conf={'auth_version': conf_version})
|
||||
identity_server = self.middleware._create_identity_server()
|
||||
self.assertEqual(identity_server_version,
|
||||
identity_server.auth_version)
|
||||
|
||||
def test_micro_version(self):
|
||||
self._assert_auth_version('v2', (2, 0))
|
||||
self._assert_auth_version('v2.0', (2, 0))
|
||||
self._assert_auth_version('v3', (3, 0))
|
||||
self._assert_auth_version('v3.0', (3, 0))
|
||||
self._assert_auth_version('v3.1', (3, 0))
|
||||
self._assert_auth_version('v3.2', (3, 0))
|
||||
self._assert_auth_version('v3.9', (3, 0))
|
||||
self._assert_auth_version('v3.3.1', (3, 0))
|
||||
self._assert_auth_version('v3.3.5', (3, 0))
|
||||
|
||||
def test_default_auth_version(self):
|
||||
# VERSION_LIST_v3 contains both v2 and v3 version elements
|
||||
self.requests.get(BASE_URI, json=VERSION_LIST_v3, status_code=300)
|
||||
self._assert_auth_version(None, (3, 0))
|
||||
|
||||
# VERSION_LIST_v2 contains only v2 version elements
|
||||
self.requests.get(BASE_URI, json=VERSION_LIST_v2, status_code=300)
|
||||
self._assert_auth_version(None, (2, 0))
|
||||
|
||||
def test_unsupported_auth_version(self):
|
||||
# If the requested version isn't supported we will use v2
|
||||
self._assert_auth_version('v1', (2, 0))
|
||||
self._assert_auth_version('v10', (2, 0))
|
||||
|
||||
|
||||
class DefaultAuthPluginTests(testtools.TestCase):
|
||||
|
||||
|
|
Loading…
Reference in New Issue