summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Tantsur <dtantsur@protonmail.com>2019-09-23 14:26:37 +0200
committerDmitry Tantsur <dtantsur@protonmail.com>2019-09-24 11:20:25 +0000
commitcbd4418e09774098ed1d003faf7a1adcd42aec3a (patch)
tree20c0ac57a4a8df6ebb4b2b37d52710e1d108edcb
parent646838c8d8ecf92260cf984565a66f029eab796b (diff)
downloadpython-ironicclient-cbd4418e09774098ed1d003faf7a1adcd42aec3a.tar.gz
Fix TypeError when using endpoint_override with SessionClient
First, when endpoint cannot be detected from a session None is returned from get_endpoint, causing subsequent code to fail. This changes fixes it. Second, endpoint_override is not passed to a Session (it's an Adapter) property, doing it has no effect. Use get_endpoint from Adapter instead. Change-Id: Ia942858abe980abf95c1ca136767983e7a0a285e Story: #2006600 Task: #36763 (cherry picked from commit 7f003e1e045e3e20b824a94676310315f8fef9fc)
-rw-r--r--ironicclient/common/http.py6
-rw-r--r--ironicclient/tests/unit/common/test_http.py7
-rw-r--r--ironicclient/tests/unit/test_client.py16
-rw-r--r--releasenotes/notes/typerror-132801fe4541fdb4.yaml7
4 files changed, 25 insertions, 11 deletions
diff --git a/ironicclient/common/http.py b/ironicclient/common/http.py
index 8b2421c..9ff8f01 100644
--- a/ironicclient/common/http.py
+++ b/ironicclient/common/http.py
@@ -383,7 +383,11 @@ class SessionClient(VersionNegotiationMixin, adapter.LegacyJsonAdapter):
super(SessionClient, self).__init__(**kwargs)
endpoint_filter = self._get_endpoint_filter()
- endpoint = self.session.get_endpoint(**endpoint_filter)
+ endpoint = self.get_endpoint(**endpoint_filter)
+ if endpoint is None:
+ raise exc.EndpointNotFound(
+ _('The Bare Metal API endpoint cannot be detected and was '
+ 'not provided explicitly'))
self.endpoint_trimmed = _trim_endpoint_api_version(endpoint)
def _parse_version_headers(self, resp):
diff --git a/ironicclient/tests/unit/common/test_http.py b/ironicclient/tests/unit/common/test_http.py
index 076ebdc..441e4ee 100644
--- a/ironicclient/tests/unit/common/test_http.py
+++ b/ironicclient/tests/unit/common/test_http.py
@@ -403,6 +403,13 @@ class SessionClientTest(utils.BaseTestCase):
user_agent=http.USER_AGENT)
self.assertEqual(res, session.request.return_value)
+ @mock.patch.object(http.SessionClient, 'get_endpoint', autospec=True)
+ def test_endpoint_not_found(self, mock_get_endpoint):
+ mock_get_endpoint.return_value = None
+
+ self.assertRaises(exc.EndpointNotFound, _session_client,
+ session=utils.mockSession({}))
+
@mock.patch.object(time, 'sleep', lambda *_: None)
class RetriesTestCase(utils.BaseTestCase):
diff --git a/ironicclient/tests/unit/test_client.py b/ironicclient/tests/unit/test_client.py
index 754119c..a420310 100644
--- a/ironicclient/tests/unit/test_client.py
+++ b/ironicclient/tests/unit/test_client.py
@@ -57,14 +57,11 @@ class ClientTest(utils.BaseTestCase):
interface=expected_interface,
region_name=kwargs.get('region_name'))
if not {'endpoint'}.intersection(kwargs):
- calls = [get_endpoint_call,
- mock.call(interface=client.http_client.interface,
- service_type=client.http_client.service_type,
- region_name=client.http_client.region_name)]
- self.assertEqual(calls, session.get_endpoint.call_args_list)
- else:
self.assertEqual([get_endpoint_call],
session.get_endpoint.call_args_list)
+ else:
+ # we use adaper.get_endpoint instead of session.get_endpoint
+ self.assertFalse(session.get_endpoint.called)
if 'os_ironic_api_version' in kwargs:
# NOTE(TheJulia): This does not test the negotiation logic
# as a request must be triggered in order for any version
@@ -256,10 +253,9 @@ class ClientTest(utils.BaseTestCase):
'session': session,
}
iroclient.get_client('1', **kwargs)
- endpoint_calls = 2 * [mock.call(service_type='baremetal',
- interface=None,
- region_name=None)]
- self.assertEqual(endpoint_calls, session.get_endpoint.call_args_list)
+ session.get_endpoint.assert_called_once_with(service_type='baremetal',
+ interface=None,
+ region_name=None)
def test_get_client_incorrect_session_passed(self):
session = mock.Mock()
diff --git a/releasenotes/notes/typerror-132801fe4541fdb4.yaml b/releasenotes/notes/typerror-132801fe4541fdb4.yaml
new file mode 100644
index 0000000..3538824
--- /dev/null
+++ b/releasenotes/notes/typerror-132801fe4541fdb4.yaml
@@ -0,0 +1,7 @@
+---
+fixes:
+ - |
+ Fixes ``TypeError`` when the bare metal endpoint cannot be detected from
+ a session. A proper ``EndpointNotFound`` exception is raised now.
+ - |
+ Fixes using ``endpoint_override`` with the ``SessionClient``.