Merge "Include OData-Version header in Redfish requests"

This commit is contained in:
Zuul 2019-06-13 08:31:45 +00:00 committed by Gerrit Code Review
commit c209cb805a
3 changed files with 40 additions and 1 deletions

View File

@ -0,0 +1,5 @@
---
fixes:
- |
Improve interoperability by including the recommended OData-Version
header in outgoing Redfish requests.

View File

@ -71,6 +71,9 @@ class Connector(object):
:raises: HTTPError
"""
url = parse.urljoin(self._url, path)
headers = headers or {}
if not any(k.lower() == 'odata-version' for k in headers):
headers['OData-Version'] = '4.0'
# TODO(lucasagomes): We should mask the data to remove sensitive
# information
LOG.debug('HTTP request: %(method)s %(url)s; headers: %(headers)s; '

View File

@ -146,15 +146,18 @@ class ConnectorOpTestCase(base.TestCase):
json=self.data, headers=self.headers)
def test_ok_delete(self):
expected_headers = self.headers.copy()
expected_headers['OData-Version'] = '4.0'
self.conn._op('DELETE', path='fake/path', headers=self.headers.copy())
self.request.assert_called_once_with(
'DELETE', 'http://foo.bar:1234/fake/path',
headers=self.headers, json=None)
headers=expected_headers, json=None)
def test_ok_post_with_session(self):
self.conn._session.headers = {}
self.conn._session.headers['X-Auth-Token'] = 'asdf1234'
expected_headers = self.headers.copy()
expected_headers['OData-Version'] = '4.0'
self.conn._op('POST', path='fake/path', headers=self.headers,
data=self.data)
self.request.assert_called_once_with(
@ -163,6 +166,34 @@ class ConnectorOpTestCase(base.TestCase):
self.assertEqual(self.conn._session.headers,
{'X-Auth-Token': 'asdf1234'})
def test_odata_version_header_redfish(self):
path = '/redfish/v1/path'
headers = dict(self.headers)
expected_headers = dict(self.headers)
expected_headers['OData-Version'] = '4.0'
self.request.reset_mock()
self.conn._op('GET', path=path, headers=headers)
self.request.assert_called_once_with(
'GET', 'http://foo.bar:1234' + path,
headers=expected_headers, json=None)
def test_odata_version_header_redfish_no_headers(self):
path = '/redfish/v1/bar'
expected_headers = {'OData-Version': '4.0'}
self.conn._op('GET', path=path)
self.request.assert_called_once_with(
'GET', 'http://foo.bar:1234' + path,
headers=expected_headers, json=None)
def test_odata_version_header_redfish_existing_header(self):
path = '/redfish/v1/foo'
headers = {'OData-Version': '3.0'}
expected_headers = dict(headers)
self.conn._op('GET', path=path, headers=headers)
self.request.assert_called_once_with(
'GET', 'http://foo.bar:1234' + path,
headers=expected_headers, json=None)
def test_timed_out_session_unable_to_create_session(self):
self.conn._auth.can_refresh_session.return_value = False
self.conn._session = self.session