Set Content-Type header explictly for SessionClient

SessionClient is subclassed from keystoneauth LegacyJsonAdapter.
LegacyJsonAdapter does not set the Content-Type explicitly
and results in decodeing issues in some cases.

Change-Id: Idf23022b394607c332490331fc4b216de6ff1313
Story: 2005237
Task: 30027
This commit is contained in:
Rabi Mishra 2019-03-14 20:27:25 +05:30
parent 8af5deb458
commit bd33e310e0
2 changed files with 9 additions and 2 deletions

View File

@ -308,6 +308,9 @@ class SessionClient(adapter.LegacyJsonAdapter):
redirect = kwargs.get('redirect')
kwargs.setdefault('user_agent', USER_AGENT)
headers = kwargs.setdefault('headers', {})
headers.setdefault('Content-Type', 'application/json')
if 'data' in kwargs:
kwargs['data'] = jsonutils.dumps(kwargs['data'])

View File

@ -637,7 +637,8 @@ class SessionClientTest(testtools.TestCase):
self.assertEqual(('', 'GET'), self.request.call_args_list[0][0])
self.assertEqual(('ishere', 'GET'), self.request.call_args_list[1][0])
for call in self.request.call_args_list:
self.assertEqual({'user_agent': 'python-heatclient',
self.assertEqual({'headers': {'Content-Type': 'application/json'},
'user_agent': 'python-heatclient',
'raise_exc': False,
'redirect': True}, call[1])
@ -668,7 +669,8 @@ class SessionClientTest(testtools.TestCase):
self.assertEqual(('http://no.where/ishere',
'GET'), self.request.call_args_list[1][0])
for call in self.request.call_args_list:
self.assertEqual({'user_agent': 'python-heatclient',
self.assertEqual({'headers': {'Content-Type': 'application/json'},
'user_agent': 'python-heatclient',
'raise_exc': False,
'redirect': True}, call[1])
@ -750,6 +752,7 @@ class SessionClientTest(testtools.TestCase):
self.assertEqual({'endpoint_override': 'http://no.where/',
'data': '"some_data"',
'headers': {'Content-Type': 'application/json'},
'user_agent': 'python-heatclient',
'raise_exc': False}, self.request.call_args[1])
self.assertEqual(200, resp.status_code)
@ -774,6 +777,7 @@ class SessionClientTest(testtools.TestCase):
self.assertEqual({'endpoint_override': 'http://no.where/',
'data': "{'files': test}}",
'headers': {'Content-Type': 'application/json'},
'user_agent': 'python-heatclient',
'raise_exc': False}, self.request.call_args[1])
self.assertEqual(200, resp.status_code)