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:
wanghong 2014-10-25 10:09:40 +08:00
parent f9c88bdb3e
commit 4e20760a6f
2 changed files with 48 additions and 6 deletions

View File

@ -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')

View File

@ -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):