diff --git a/keystoneclient/session.py b/keystoneclient/session.py index 0bb0de22e..9d4fd6671 100644 --- a/keystoneclient/session.py +++ b/keystoneclient/session.py @@ -406,8 +406,9 @@ class Session(object): try: try: resp = self.session.request(method, url, **kwargs) - except requests.exceptions.SSLError: - msg = _('SSL exception connecting to %s') % url + except requests.exceptions.SSLError as e: + msg = _('SSL exception connecting to %(url)s: ' + '%(error)s') % {'url': url, 'error': e} raise exceptions.SSLError(msg) except requests.exceptions.Timeout: msg = _('Request to %s timed out') % url diff --git a/keystoneclient/tests/unit/test_session.py b/keystoneclient/tests/unit/test_session.py index 1d01c3a43..9519f2706 100644 --- a/keystoneclient/tests/unit/test_session.py +++ b/keystoneclient/tests/unit/test_session.py @@ -25,6 +25,7 @@ from testtools import matchers from keystoneclient import adapter from keystoneclient.auth import base from keystoneclient import exceptions +from keystoneclient.i18n import _ from keystoneclient import session as client_session from keystoneclient.tests.unit import utils @@ -218,6 +219,23 @@ class SessionTests(utils.TestCase): client_session.Session(session=mock_session) self.assertFalse(mock_session.mount.called) + def test_ssl_error_message(self): + error = uuid.uuid4().hex + + def _ssl_error(request, context): + raise requests.exceptions.SSLError(error) + + self.stub_url('GET', text=_ssl_error) + session = client_session.Session() + + # The exception should contain the URL and details about the SSL error + msg = _('SSL exception connecting to %(url)s: %(error)s') % { + 'url': self.TEST_URL, 'error': error} + self.assertRaisesRegexp(exceptions.SSLError, + msg, + session.get, + self.TEST_URL) + class RedirectTests(utils.TestCase):