summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-07-23 20:04:04 +0000
committerGerrit Code Review <review@openstack.org>2015-07-23 20:04:04 +0000
commit6363f989870cea59c6fcc60ae95aea383cfde0a9 (patch)
treeca1373b109632460c1ba7b3713120c24d47e75db
parentcbf8345925959f7eea35200d6f4e4e8e927287e4 (diff)
parenta4584c4ba7fa62c923d7da883e1cf8080e1275ad (diff)
downloadpython-keystoneclient-6363f989870cea59c6fcc60ae95aea383cfde0a9.tar.gz
Merge "Add get_token_data to token CRUD"
-rw-r--r--keystoneclient/tests/unit/v2_0/test_tokens.py6
-rw-r--r--keystoneclient/tests/unit/v3/test_tokens.py17
-rw-r--r--keystoneclient/v2_0/tokens.py18
-rw-r--r--keystoneclient/v3/tokens.py31
4 files changed, 58 insertions, 14 deletions
diff --git a/keystoneclient/tests/unit/v2_0/test_tokens.py b/keystoneclient/tests/unit/v2_0/test_tokens.py
index 8a40f82..d60f0f8 100644
--- a/keystoneclient/tests/unit/v2_0/test_tokens.py
+++ b/keystoneclient/tests/unit/v2_0/test_tokens.py
@@ -168,6 +168,9 @@ class TokenTests(utils.TestCase):
token_fixture = fixture.V2Token(token_id=id_)
self.stub_url('GET', ['tokens', id_], json=token_fixture)
+ token_data = self.client.tokens.get_token_data(id_)
+ self.assertEqual(token_fixture, token_data)
+
token_ref = self.client.tokens.validate(id_)
self.assertIsInstance(token_ref, tokens.Token)
self.assertEqual(id_, token_ref.id)
@@ -178,6 +181,9 @@ class TokenTests(utils.TestCase):
id_ = uuid.uuid4().hex
# The server is expected to return 404 if the token is invalid.
self.stub_url('GET', ['tokens', id_], status_code=404)
+
+ self.assertRaises(exceptions.NotFound,
+ self.client.tokens.get_token_data, id_)
self.assertRaises(exceptions.NotFound,
self.client.tokens.validate, id_)
diff --git a/keystoneclient/tests/unit/v3/test_tokens.py b/keystoneclient/tests/unit/v3/test_tokens.py
index 2c27fd0..0363a61 100644
--- a/keystoneclient/tests/unit/v3/test_tokens.py
+++ b/keystoneclient/tests/unit/v3/test_tokens.py
@@ -53,6 +53,10 @@ class TokenTests(utils.TestCase, testresources.ResourcedTestCase):
self.examples.v3_UUID_TOKEN_DEFAULT]
self.stub_url('GET', ['auth', 'tokens'],
headers={'X-Subject-Token': token_id, }, json=token_ref)
+
+ token_data = self.client.tokens.get_token_data(token_id)
+ self.assertEqual(token_data, token_ref)
+
access_info = self.client.tokens.validate(token_id)
self.assertRequestHeaderEqual('X-Subject-Token', token_id)
@@ -77,6 +81,9 @@ class TokenTests(utils.TestCase, testresources.ResourcedTestCase):
# When the token is invalid the server typically returns a 404.
token_id = uuid.uuid4().hex
self.stub_url('GET', ['auth', 'tokens'], status_code=404)
+
+ self.assertRaises(exceptions.NotFound,
+ self.client.tokens.get_token_data, token_id)
self.assertRaises(exceptions.NotFound,
self.client.tokens.validate, token_id)
@@ -87,6 +94,11 @@ class TokenTests(utils.TestCase, testresources.ResourcedTestCase):
self.examples.v3_UUID_TOKEN_DEFAULT]
self.stub_url('GET', ['auth', 'tokens'],
headers={'X-Subject-Token': token_id, }, json=token_ref)
+
+ token_data = self.client.tokens.get_token_data(token_id)
+ self.assertQueryStringIs()
+ self.assertIn('catalog', token_data['token'])
+
access_info = self.client.tokens.validate(token_id)
self.assertQueryStringIs()
@@ -99,6 +111,11 @@ class TokenTests(utils.TestCase, testresources.ResourcedTestCase):
self.examples.v3_UUID_TOKEN_UNSCOPED]
self.stub_url('GET', ['auth', 'tokens'],
headers={'X-Subject-Token': token_id, }, json=token_ref)
+
+ token_data = self.client.tokens.get_token_data(token_id)
+ self.assertQueryStringIs()
+ self.assertNotIn('catalog', token_data['token'])
+
access_info = self.client.tokens.validate(token_id,
include_catalog=False)
diff --git a/keystoneclient/v2_0/tokens.py b/keystoneclient/v2_0/tokens.py
index 670d65b..1874b48 100644
--- a/keystoneclient/v2_0/tokens.py
+++ b/keystoneclient/v2_0/tokens.py
@@ -84,6 +84,17 @@ class TokenManager(base.Manager):
"""
return self._get('/tokens/%s' % base.getid(token), 'access')
+ def get_token_data(self, token):
+ """Fetch the data about a token from the identity server.
+
+ :param str token: The token id.
+
+ :rtype: dict
+ """
+ url = '/tokens/%s' % token
+ resp, body = self.client.get(url)
+ return body
+
def validate_access_info(self, token):
"""Validate a token.
@@ -100,10 +111,9 @@ class TokenManager(base.Manager):
return token.auth_token
return base.getid(token)
- url = '/tokens/%s' % calc_id(token)
- resp, body = self.client.get(url)
- access_info = access.AccessInfo.factory(resp=resp, body=body)
- return access_info
+ token_id = calc_id(token)
+ body = self.get_token_data(token_id)
+ return access.AccessInfo.factory(auth_token=token_id, body=body)
def get_revoked(self):
"""Returns the revoked tokens response.
diff --git a/keystoneclient/v3/tokens.py b/keystoneclient/v3/tokens.py
index 77edbc0..38f4e9f 100644
--- a/keystoneclient/v3/tokens.py
+++ b/keystoneclient/v3/tokens.py
@@ -52,6 +52,25 @@ class TokenManager(object):
return body
@utils.positional.method(1)
+ def get_token_data(self, token, include_catalog=True):
+ """Fetch the data about a token from the identity server.
+
+ :param str token: The token id.
+ :param bool include_catalog: If False, the response is requested to not
+ include the catalog.
+
+ :rtype: dict
+ """
+ headers = {'X-Subject-Token': token}
+
+ url = '/auth/tokens'
+ if not include_catalog:
+ url += '?nocatalog'
+
+ resp, body = self._client.get(url, headers=headers)
+ return body
+
+ @utils.positional.method(1)
def validate(self, token, include_catalog=True):
"""Validate a token.
@@ -66,13 +85,5 @@ class TokenManager(object):
"""
token_id = _calc_id(token)
- headers = {'X-Subject-Token': token_id}
-
- url = '/auth/tokens'
- if not include_catalog:
- url += '?nocatalog'
-
- resp, body = self._client.get(url, headers=headers)
-
- access_info = access.AccessInfo.factory(resp=resp, body=body)
- return access_info
+ body = self.get_token_data(token_id, include_catalog=include_catalog)
+ return access.AccessInfo.factory(auth_token=token_id, body=body)