diff options
| author | Ziad Sawalha <github@highbridgellc.com> | 2011-12-28 00:23:31 -0600 |
|---|---|---|
| committer | Ziad Sawalha <github@highbridgellc.com> | 2012-01-20 12:14:02 -0600 |
| commit | 8db366c448d4074c044f596a8e4271befdb797cb (patch) | |
| tree | ff128968469d602e00ee41cfe09e12ba31a6d6b0 /tests | |
| parent | cbe1f82931002e3562ab41582ff86470681b889b (diff) | |
| download | python-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.py | 27 | ||||
| -rw-r--r-- | tests/v2_0/test_discovery.py | 105 |
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']) |
