summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
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'])