summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorZiad Sawalha <github@highbridgellc.com>2011-12-28 00:23:31 -0600
committerZiad Sawalha <github@highbridgellc.com>2012-01-20 12:14:02 -0600
commit8db366c448d4074c044f596a8e4271befdb797cb (patch)
treeff128968469d602e00ee41cfe09e12ba31a6d6b0 /tests
parentcbe1f82931002e3562ab41582ff86470681b889b (diff)
downloadpython-keystoneclient-8db366c448d4074c044f596a8e4271befdb797cb.tar.gz
Support for version and extension discoveryessex-3
- Supports unauthenticated call to Keystone to discover supported API versions - Added command-line support (usage: keystone discover) - Added client support (keystoneclient.genenric client). Client returns dicts, whereas shell command prints formated output. - Added tests for genenric client - Replicates 'nove discover' in python-novaclient - Starts to address blueprint keystone-client - keystone discover output looks like this: $ keystone discover Keystone found at http://localhost:35357 - supports version v1.0 (DEPRECATED) here http://localhost:35357/v1.0 - supports version v1.1 (CURRENT) here http://localhost:35357/v1.1 - supports version v2.0 (BETA) here http://localhost:35357/v2.0 - and HP-IDM: HP Token Validation Extension - and OS-KSADM: Openstack Keystone Admin - and OS-KSCATALOG: Openstack Keystone Catalog Change-Id: Id16d34dac094c780d36afb3e31c98c318b6071ac
Diffstat (limited to 'tests')
-rw-r--r--tests/utils.py27
-rw-r--r--tests/v2_0/test_discovery.py105
2 files changed, 130 insertions, 2 deletions
diff --git a/tests/utils.py b/tests/utils.py
index c4530e8..04c5890 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -12,8 +12,10 @@ class TestCase(unittest.TestCase):
TEST_TENANT_NAME = 'aTenant'
TEST_TOKEN = 'aToken'
TEST_USER = 'test'
- TEST_URL = 'http://127.0.0.1:5000/v2.0'
- TEST_ADMIN_URL = 'http://127.0.0.1:35357/v2.0'
+ TEST_ROOT_URL = 'http://127.0.0.1:5000/'
+ TEST_URL = '%s%s' % (TEST_ROOT_URL, 'v2.0')
+ TEST_ROOT_ADMIN_URL = 'http://127.0.0.1:35357/'
+ TEST_ADMIN_URL = '%s%s' % (TEST_ROOT_ADMIN_URL, 'v2.0')
TEST_SERVICE_CATALOG = [{
"endpoints": [{
@@ -79,3 +81,24 @@ class TestCase(unittest.TestCase):
super(TestCase, self).tearDown()
self.mox.UnsetStubs()
self.mox.VerifyAll()
+
+
+class UnauthenticatedTestCase(unittest.TestCase):
+ """ Class used as base for unauthenticated calls """
+ TEST_ROOT_URL = 'http://127.0.0.1:5000/'
+ TEST_URL = '%s%s' % (TEST_ROOT_URL, 'v2.0')
+ TEST_ROOT_ADMIN_URL = 'http://127.0.0.1:35357/'
+ TEST_ADMIN_URL = '%s%s' % (TEST_ROOT_ADMIN_URL, 'v2.0')
+
+ def setUp(self):
+ super(UnauthenticatedTestCase, self).setUp()
+ self.mox = mox.Mox()
+ self._original_time = time.time
+ time.time = lambda: 1234
+ httplib2.Http.request = self.mox.CreateMockAnything()
+
+ def tearDown(self):
+ time.time = self._original_time
+ super(UnauthenticatedTestCase, self).tearDown()
+ self.mox.UnsetStubs()
+ self.mox.VerifyAll()
diff --git a/tests/v2_0/test_discovery.py b/tests/v2_0/test_discovery.py
new file mode 100644
index 0000000..0e089ac
--- /dev/null
+++ b/tests/v2_0/test_discovery.py
@@ -0,0 +1,105 @@
+import httplib2
+import json
+
+from keystoneclient.generic import client
+from tests import utils
+
+
+def to_http_response(resp_dict):
+ """
+ Utility function to convert a python dictionary
+ (e.g. {'status':status, 'body': body, 'headers':headers}
+ to an httplib2 response.
+ """
+ resp = httplib2.Response(resp_dict)
+ for k, v in resp_dict['headers'].items():
+ resp[k] = v
+ return resp
+
+
+class DiscoverKeystoneTests(utils.UnauthenticatedTestCase):
+ def setUp(self):
+ super(DiscoverKeystoneTests, self).setUp()
+ self.TEST_RESPONSE_DICT = {
+ "versions": {
+ "values": [{
+ "id": "v2.0",
+ "status": "beta",
+ "updated": "2011-11-19T00:00:00Z",
+ "links": [{
+ "rel": "self",
+ "href": "http://127.0.0.1:5000/v2.0/"
+ }, {
+ "rel": "describedby",
+ "type": "text/html",
+ "href":
+ "http://docs.openstack.org/api/openstack-identity-service/2.0/content/"
+ }, {
+ "rel": "describedby",
+ "type": "application/pdf",
+ "href":
+ "http://docs.openstack.org/api/openstack-identity-service/2.0/\
+identity-dev-guide-2.0.pdf"
+ }, {
+ "rel": "describedby",
+ "type": "application/vnd.sun.wadl+xml",
+ "href": "http://127.0.0.1:5000/v2.0/identity.wadl"
+ }],
+ "media-types": [{
+ "base": "application/xml",
+ "type":
+ "application/vnd.openstack.identity-v2.0+xml"
+ }, {
+ "base": "application/json",
+ "type":
+ "application/vnd.openstack.identity-v2.0+json"
+ }]
+ }]
+ }
+ }
+ self.TEST_REQUEST_HEADERS = {
+ 'User-Agent': 'python-keystoneclient',
+ 'Accept': 'application/json'
+ }
+
+ def test_get_versions(self):
+ resp = httplib2.Response({
+ "status": 200,
+ "body": json.dumps(self.TEST_RESPONSE_DICT),
+ })
+
+ httplib2.Http.request(self.TEST_ROOT_URL,
+ 'GET',
+ headers=self.TEST_REQUEST_HEADERS) \
+ .AndReturn((resp, resp['body']))
+ self.mox.ReplayAll()
+
+ cs = client.Client()
+ versions = cs.discover(self.TEST_ROOT_URL)
+ self.assertIsInstance(versions, dict)
+ self.assertIn('message', versions)
+ self.assertIn('v2.0', versions)
+ self.assertEquals(versions['v2.0']['url'],
+ self.TEST_RESPONSE_DICT['versions']['values'][0]['links'][0]
+ ['href'])
+
+ def test_get_version_local(self):
+ resp = httplib2.Response({
+ "status": 200,
+ "body": json.dumps(self.TEST_RESPONSE_DICT),
+ })
+
+ httplib2.Http.request("http://localhost:35357",
+ 'GET',
+ headers=self.TEST_REQUEST_HEADERS) \
+ .AndReturn((resp, resp['body']))
+ self.mox.ReplayAll()
+
+ cs = client.Client()
+ versions = cs.discover()
+ self.assertIsInstance(versions, dict)
+ self.assertIn('message', versions)
+ self.assertIn('v2.0', versions)
+ self.assertEquals(versions['v2.0']['url'],
+ self.TEST_RESPONSE_DICT['versions']['values'][0]['links'][0]
+ ['href'])