Merge "Be more helpful when version discovery fails"

This commit is contained in:
Zuul 2018-03-28 18:39:57 +00:00 committed by Gerrit Code Review
commit a37d9f6151
2 changed files with 34 additions and 3 deletions

View File

@ -138,7 +138,8 @@ class BaseGenericPlugin(base.BaseIdentityPlugin):
authenticated=False)
except (exceptions.DiscoveryFailure,
exceptions.HttpError,
exceptions.ConnectionError):
exceptions.SSLError,
exceptions.ConnectionError) as e:
LOG.warning('Failed to discover available identity versions when '
'contacting %s. Attempting to parse version from URL.',
self.auth_url)
@ -153,6 +154,11 @@ class BaseGenericPlugin(base.BaseIdentityPlugin):
plugin = self.create_plugin(session, (2, 0), self.auth_url)
elif path.startswith('/v3'):
plugin = self.create_plugin(session, (3, 0), self.auth_url)
else:
raise exceptions.DiscoveryFailure(
'Could not find versioned identity endpoints when '
'attempting to authenticate. Please check that your '
'auth_url is correct. %s' % e)
else:
# NOTE(jamielennox): version_data is always in oldest to newest
@ -191,8 +197,9 @@ class BaseGenericPlugin(base.BaseIdentityPlugin):
return plugin
# so there were no URLs that i could use for auth of any version.
raise exceptions.DiscoveryFailure('Could not determine a suitable URL '
'for the plugin')
raise exceptions.DiscoveryFailure(
'Could not find versioned identity endpoints when attempting '
'to authenticate. Please check that your auth_url is correct.')
def get_auth_ref(self, session, **kwargs):
if not self._plugin:

View File

@ -1928,3 +1928,27 @@ class GenericAuthPluginTests(utils.TestCase):
endpoint_filter=self.ENDPOINT_FILTER)
self.assertIn(name, str(e))
class DiscoveryFailures(utils.TestCase):
TEST_ROOT_URL = 'http://127.0.0.1:5000/'
def test_connection_error(self):
self.requests_mock.get(self.TEST_ROOT_URL,
exc=exceptions.ConnectionError)
sess = session.Session()
p = identity.generic.password.Password(self.TEST_ROOT_URL)
self.assertRaises(exceptions.DiscoveryFailure, p.get_auth_ref, sess)
def test_client_exception(self):
self.requests_mock.get(self.TEST_ROOT_URL,
exc=exceptions.ClientException)
sess = session.Session()
p = identity.generic.password.Password(self.TEST_ROOT_URL)
self.assertRaises(exceptions.ClientException, p.get_auth_ref, sess)
def test_ssl_error(self):
self.requests_mock.get(self.TEST_ROOT_URL, exc=exceptions.SSLError)
sess = session.Session()
p = identity.generic.password.Password(self.TEST_ROOT_URL)
self.assertRaises(exceptions.DiscoveryFailure, p.get_auth_ref, sess)