diff --git a/keystoneauth1/adapter.py b/keystoneauth1/adapter.py index 8d438f37..c23d9a39 100644 --- a/keystoneauth1/adapter.py +++ b/keystoneauth1/adapter.py @@ -13,6 +13,8 @@ import os import warnings +import requests + from keystoneauth1 import _fair_semaphore from keystoneauth1 import session @@ -198,7 +200,14 @@ class Adapter(object): def request(self, url, method, **kwargs): endpoint_filter = kwargs.setdefault('endpoint_filter', {}) self._set_endpoint_filter_kwargs(endpoint_filter) - + # NOTE(gmann): Convert r initlize the headers to + # CaseInsensitiveDict to make sure headers are + # case insensitive. + if kwargs.get('headers'): + kwargs['headers'] = requests.structures.CaseInsensitiveDict( + kwargs['headers']) + else: + kwargs['headers'] = requests.structures.CaseInsensitiveDict() if self.endpoint_override: kwargs.setdefault('endpoint_override', self.endpoint_override) diff --git a/keystoneauth1/session.py b/keystoneauth1/session.py index 935e022f..f4c400c0 100644 --- a/keystoneauth1/session.py +++ b/keystoneauth1/session.py @@ -753,6 +753,14 @@ class Session(object): else: split_loggers = None logger = logger or utils.get_logger(__name__) + # NOTE(gmann): Convert r initlize the headers to + # CaseInsensitiveDict to make sure headers are + # case insensitive. + if kwargs.get('headers'): + kwargs['headers'] = requests.structures.CaseInsensitiveDict( + kwargs['headers']) + else: + kwargs['headers'] = requests.structures.CaseInsensitiveDict() if connect_retries is None: connect_retries = self._connect_retries # HTTP 503 - Service Unavailable diff --git a/keystoneauth1/tests/unit/test_session.py b/keystoneauth1/tests/unit/test_session.py index 8817e4e7..3ded3f5c 100644 --- a/keystoneauth1/tests/unit/test_session.py +++ b/keystoneauth1/tests/unit/test_session.py @@ -1822,7 +1822,7 @@ class AdapterTest(utils.TestCase): with mock.patch.object(sess, 'request') as m: adapter.Adapter(sess, **adap_kwargs).get(url, **get_kwargs) m.assert_called_once_with(url, 'GET', endpoint_filter={}, - rate_semaphore=mock.ANY, + headers={}, rate_semaphore=mock.ANY, **exp_kwargs) # No default_microversion in Adapter, no microversion in get() @@ -1846,7 +1846,7 @@ class AdapterTest(utils.TestCase): with mock.patch.object(sess, 'request') as m: adapter.Adapter(sess, **adap_kwargs).get(url, **get_kwargs) m.assert_called_once_with(url, 'GET', endpoint_filter={}, - rate_semaphore=mock.ANY, + headers={}, rate_semaphore=mock.ANY, **exp_kwargs) # No raise_exc in Adapter or get()