summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-07-18 17:45:33 +0000
committerGerrit Code Review <review@openstack.org>2013-07-18 17:45:33 +0000
commit46ce8655066508fb8f701cb2f2e9642c879a34f1 (patch)
treefa82fe0978ae0896cf5b48af7def33f429edd978
parenteb6ed51647ca2a4f6dfcf52fc603f2c5d4aa0e9e (diff)
parent95810ef1d2184b33902a56dfe7d14c12cb0869ef (diff)
downloadpython-glanceclient-46ce8655066508fb8f701cb2f2e9642c879a34f1.tar.gz
Merge "Pass all identity headers received to glance"
-rw-r--r--glanceclient/common/http.py9
-rw-r--r--tests/test_http.py33
2 files changed, 42 insertions, 0 deletions
diff --git a/glanceclient/common/http.py b/glanceclient/common/http.py
index 3379a18..c534d0f 100644
--- a/glanceclient/common/http.py
+++ b/glanceclient/common/http.py
@@ -73,7 +73,12 @@ class HTTPClient(object):
self.connection_kwargs = self.get_connection_kwargs(
self.endpoint_scheme, **kwargs)
+ self.identity_headers = kwargs.get('identity_headers')
self.auth_token = kwargs.get('token')
+ if self.identity_headers:
+ if self.identity_headers.get('X-Auth-Token'):
+ self.auth_token = self.identity_headers.get('X-Auth-Token')
+ del self.identity_headers['X-Auth-Token']
@staticmethod
def parse_endpoint(endpoint):
@@ -169,6 +174,10 @@ class HTTPClient(object):
if self.auth_token:
kwargs['headers'].setdefault('X-Auth-Token', self.auth_token)
+ if self.identity_headers:
+ for k, v in self.identity_headers.iteritems():
+ kwargs['headers'].setdefault(k, v)
+
self.log_curl_request(method, url, kwargs)
conn = self.get_connection()
diff --git a/tests/test_http.py b/tests/test_http.py
index 5cf84a5..e6cd770 100644
--- a/tests/test_http.py
+++ b/tests/test_http.py
@@ -42,6 +42,39 @@ class TestClient(testtools.TestCase):
super(TestClient, self).tearDown()
self.mock.UnsetStubs()
+ def test_identity_headers_and_token(self):
+ identity_headers = {
+ 'X-Auth-Token': 'auth_token',
+ 'X-User-Id': 'user',
+ 'X-Tenant-Id': 'tenant',
+ 'X-Roles': 'roles',
+ 'X-Identity-Status': 'Confirmed',
+ 'X-Service-Catalog': 'service_catalog',
+ }
+ #with token
+ kwargs = {'token': u'fake-token',
+ 'identity_headers': identity_headers}
+ http_client_object = http.HTTPClient(self.endpoint, **kwargs)
+ self.assertEquals(http_client_object.auth_token, 'auth_token')
+ self.assertTrue(http_client_object.identity_headers.
+ get('X-Auth-Token') is None)
+
+ def test_identity_headers_and_no_token_in_header(self):
+ identity_headers = {
+ 'X-User-Id': 'user',
+ 'X-Tenant-Id': 'tenant',
+ 'X-Roles': 'roles',
+ 'X-Identity-Status': 'Confirmed',
+ 'X-Service-Catalog': 'service_catalog',
+ }
+ #without X-Auth-Token in identity headers
+ kwargs = {'token': u'fake-token',
+ 'identity_headers': identity_headers}
+ http_client_object = http.HTTPClient(self.endpoint, **kwargs)
+ self.assertEquals(http_client_object.auth_token, u'fake-token')
+ self.assertTrue(http_client_object.identity_headers.
+ get('X-Auth-Token') is None)
+
def test_connection_refused(self):
"""
Should receive a CommunicationError if connection refused.