diff options
author | termie <github@anarkystic.com> | 2012-01-09 15:03:29 -0800 |
---|---|---|
committer | termie <github@anarkystic.com> | 2012-01-09 15:03:29 -0800 |
commit | ec82e9b1c9bc4da3631454b2077bbcec42003623 (patch) | |
tree | c309683dbfe88aba64eb3fa007f8f15c561247e9 | |
parent | 75e781a11918662af1a4f88091856af9d00cdd13 (diff) | |
download | keystone-ec82e9b1c9bc4da3631454b2077bbcec42003623.tar.gz keystone-ec82e9b1c9bc4da3631454b2077bbcec42003623.tar.xz keystone-ec82e9b1c9bc4da3631454b2077bbcec42003623.zip |
keystone_compat -> service
-rw-r--r-- | keystone/client.py | 101 | ||||
-rw-r--r-- | keystone/service.py (renamed from keystone/keystone_compat.py) | 1 | ||||
-rwxr-xr-x | run_tests.sh | 2 | ||||
-rw-r--r-- | tests/default.conf | 12 | ||||
-rw-r--r-- | tests/keystone_compat_diablo.conf | 14 | ||||
-rw-r--r-- | tests/test_identity_api.py | 162 |
6 files changed, 11 insertions, 281 deletions
diff --git a/keystone/client.py b/keystone/client.py deleted file mode 100644 index 899e8d16..00000000 --- a/keystone/client.py +++ /dev/null @@ -1,101 +0,0 @@ - -"""Client library for KeystoneLight API.""" - -import json - -import httplib2 -import webob - -from keystone import service -from keystone import wsgi - - -URLMAP = service.URLMAP - - -class Client(object): - def __init__(self, token=None): - self.token = token - - def request(self, method, path, headers, body): - raise NotImplemented - - def get(self, path, headers=None): - return self.request('GET', path=path, headers=headers) - - def post(self, path, headers=None, body=None): - return self.request('POST', path=path, headers=headers, body=body) - - def put(self, path, headers=None, body=None): - return self.request('PUT', path=path, headers=headers, body=body) - - def _build_headers(self, headers=None): - if headers is None: - headers = {} - - if self.token: - headers.setdefault('X-Auth-Token', self.token) - - return headers - - def __getattr__(self, key): - """Lazy way to define a bunch of dynamic urls based on URLMAP. - - Turns something like - - c.authenticate(user_id='foo', password='bar') - - into - - c.request('POST', '/token', body={'user_id': 'foo', 'password': 'bar'}) - - """ - if key not in URLMAP: - raise AttributeError(key) - - method, path = URLMAP[key] - - def _internal(method_=method, path_=path, **kw): - path_ = path_ % kw - params = {'method': method_, - 'path': path_} - if method.lower() in ('put', 'post'): - params['body'] = kw - return self.request(**params) - - setattr(self, key, _internal) - - return getattr(self, key) - - -class HttpClient(Client): - def __init__(self, endpoint=None, token=None): - self.endpoint = endpoint - super(HttpClient, self).__init__(token=token) - - def request(self, method, path, headers=None, body=None): - if type(body) is type({}): - body = json.dumps(body) - headers = self._build_headers(headers) - h = httplib2.Http() - url = '%s%s' % (self.endpoint, path) - resp, content = h.request(url, method=method, headers=headers, body=body) - return webob.Response(content, status=resp.status, headerlist=resp.items()) - - -class TestClient(Client): - def __init__(self, app=None, token=None): - self.app = app - super(TestClient, self).__init__(token=token) - - def request(self, method, path, headers=None, body=None): - if type(body) is type({}): - body = json.dumps(body) - headers = self._build_headers(headers) - req = wsgi.Request.blank(path) - req.method = method - for k, v in headers.iteritems(): - req.headers[k] = v - if body: - req.body = body - return req.get_response(self.app) diff --git a/keystone/keystone_compat.py b/keystone/service.py index 95e05400..7bdd5d26 100644 --- a/keystone/keystone_compat.py +++ b/keystone/service.py @@ -14,7 +14,6 @@ from keystone import catalog from keystone import identity from keystone import logging from keystone import policy -from keystone import service from keystone import token from keystone import utils from keystone import wsgi diff --git a/run_tests.sh b/run_tests.sh index be245a9a..825d9501 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -4,7 +4,7 @@ set -eu function usage { echo "Usage: $0 [OPTION]..." - echo "Run KeystoneLight's test suite(s)" + echo "Run Keystone's test suite(s)" echo "" echo " -V, --virtual-env Always use virtualenv. Install automatically if not present" echo " -N, --no-virtual-env Don't use virtualenv. Run tests in local environment" diff --git a/tests/default.conf b/tests/default.conf index a92b3943..f8771b97 100644 --- a/tests/default.conf +++ b/tests/default.conf @@ -38,19 +38,14 @@ paste.filter_factory = keystone.middleware:AdminTokenAuthMiddleware.factory paste.filter_factory = keystone.middleware:JsonBodyMiddleware.factory [filter:crud_extension] -paste.filter_factory = keystone.keystone_compat:AdminCrudExtension.factory +paste.filter_factory = keystone.service:AdminCrudExtension.factory -[app:keystone] -paste.app_factory = keystone.service:app_factory [app:keystone_service] -paste.app_factory = keystone.keystone_compat:service_app_factory +paste.app_factory = keystone.service:service_app_factory [app:keystone_admin] -paste.app_factory = keystone.keystone_compat:admin_app_factory - -[pipeline:keystone_api] -pipeline = token_auth admin_token_auth json_body debug keystone +paste.app_factory = keystone.service:admin_app_factory [pipeline:keystone_service_api] pipeline = token_auth admin_token_auth json_body debug keystone_service @@ -60,7 +55,6 @@ pipeline = token_auth admin_token_auth json_body debug crud_extension keystone_a [composite:main] use = egg:Paste#urlmap -/ = keystone_api /v2.0 = keystone_service_api [composite:admin] diff --git a/tests/keystone_compat_diablo.conf b/tests/keystone_compat_diablo.conf index 842bb810..5db43f6f 100644 --- a/tests/keystone_compat_diablo.conf +++ b/tests/keystone_compat_diablo.conf @@ -28,17 +28,13 @@ paste.filter_factory = keystone.middleware:AdminTokenAuthMiddleware.factory [filter:json_body] paste.filter_factory = keystone.middleware:JsonBodyMiddleware.factory -[app:keystone] -paste.app_factory = keystone.service:app_factory [app:keystone_service] -paste.app_factory = keystone.keystone_compat:service_app_factory +paste.app_factory = keystone.service:service_app_factory [app:keystone_admin] -paste.app_factory = keystone.keystone_compat:admin_app_factory +paste.app_factory = keystone.service:admin_app_factory -[pipeline:keystone_api] -pipeline = token_auth admin_token_auth json_body debug keystone [pipeline:keystone_service_api] pipeline = token_auth admin_token_auth json_body debug keystone_service @@ -46,7 +42,11 @@ pipeline = token_auth admin_token_auth json_body debug keystone_service [pipeline:keystone_admin_api] pipeline = token_auth admin_token_auth json_body debug keystone_admin + [composite:main] use = egg:Paste#urlmap -/ = keystone_api /v2.0 = keystone_service_api + +[composite:admin] +use = egg:Paste#urlmap +/v2.0 = keystone_admin_api diff --git a/tests/test_identity_api.py b/tests/test_identity_api.py deleted file mode 100644 index 50d813cf..00000000 --- a/tests/test_identity_api.py +++ /dev/null @@ -1,162 +0,0 @@ -import json - -from keystone import client -from keystone import config -from keystone import models -from keystone import test - -import default_fixtures - - -CONF = config.CONF - - -class IdentityApi(test.TestCase): - def setUp(self): - super(IdentityApi, self).setUp() - CONF(config_files=['default.conf']) - self.app = self.loadapp('default') - - self.load_backends() - self.load_fixtures(default_fixtures) - - def _login(self): - c = client.TestClient(self.app) - post_data = {'user_id': self.user_foo['id'], - 'tenant_id': self.tenant_bar['id'], - 'password': self.user_foo['password']} - resp = c.post('/tokens', body=post_data) - token = json.loads(resp.body) - return token - - def test_authenticate(self): - c = client.TestClient(self.app) - post_data = {'user_id': self.user_foo['id'], - 'tenant_id': self.tenant_bar['id'], - 'password': self.user_foo['password']} - resp = c.authenticate(**post_data) - data = json.loads(resp.body) - self.assertEquals(self.user_foo['id'], data['user']['id']) - self.assertEquals(self.tenant_bar['id'], data['tenant']['id']) - self.assertDictEquals(self.metadata_foobar, data['metadata']) - - def test_authenticate_no_tenant(self): - c = client.TestClient(self.app) - post_data = {'user_id': self.user_foo['id'], - 'password': self.user_foo['password']} - resp = c.authenticate(**post_data) - data = json.loads(resp.body) - self.assertEquals(self.user_foo['id'], data['user']['id']) - self.assertEquals(None, data['tenant']) - self.assertEquals({}, data['metadata']) - - def test_get_tenants(self): - token = self._login() - c = client.TestClient(self.app, token['id']) - resp = c.get_tenants(user_id=self.user_foo['id']) - data = json.loads(resp.body) - self.assertDictEquals(self.tenant_bar, data[0]) - - def test_crud_user(self): - token_id = CONF.admin_token - c = client.TestClient(self.app, token=token_id) - user_ref = models.User(name='FOO') - resp = c.create_user(**user_ref) - data = json.loads(resp.body) - self.assert_(data['id']) - - get_resp = c.get_user(user_id=data['id']) - get_data = json.loads(get_resp.body) - - self.assertDictEquals(data, get_data) - - update_resp = c.update_user(user_id=data['id'], - name='FOO', - id=data['id'], - password='foo') - update_data = json.loads(update_resp.body) - - self.assertEquals(data['id'], update_data['id']) - self.assertEquals('foo', update_data['password']) - - del_resp = c.delete_user(user_id=data['id']) - self.assertEquals(del_resp.body, '') - - delget_resp = c.get_user(user_id=data['id']) - self.assertEquals(delget_resp.body, '') - # TODO(termie): we should probably return not founds instead of None - #self.assertEquals(delget_resp.status, '404 Not Found') - - def test_crud_tenant(self): - token_id = CONF.admin_token - c = client.TestClient(self.app, token=token_id) - tenant_ref = models.Tenant(name='BAZ') - resp = c.create_tenant(**tenant_ref) - data = json.loads(resp.body) - self.assert_(data['id']) - - get_resp = c.get_tenant(tenant_id=data['id']) - get_data = json.loads(get_resp.body) - self.assertDictEquals(data, get_data) - - getname_resp = c.get_tenant_by_name(tenant_name=data['name']) - getname_data = json.loads(getname_resp.body) - self.assertDictEquals(data, getname_data) - - update_resp = c.update_tenant(tenant_id=data['id'], - id=data['id'], - name='NEWBAZ') - update_data = json.loads(update_resp.body) - - self.assertEquals(data['id'], update_data['id']) - self.assertEquals('NEWBAZ', update_data['name']) - - # make sure we can't get the old name - getname_resp = c.get_tenant_by_name(tenant_name=data['name']) - self.assertEquals(getname_resp.body, '') - - # but can get the new name - getname_resp = c.get_tenant_by_name(tenant_name=update_data['name']) - getname_data = json.loads(getname_resp.body) - self.assertDictEquals(update_data, getname_data) - - del_resp = c.delete_tenant(tenant_id=data['id']) - self.assertEquals(del_resp.body, '') - - delget_resp = c.get_tenant(tenant_id=data['id']) - self.assertEquals(delget_resp.body, '') - - delgetname_resp = c.get_tenant_by_name(tenant_name=update_data['name']) - self.assertEquals(delgetname_resp.body, '') - # TODO(termie): we should probably return not founds instead of None - #self.assertEquals(delget_resp.status, '404 Not Found') - - def test_crud_metadata(self): - token_id = CONF.admin_token - user_id = 'foo' - tenant_id = 'bar' - c = client.TestClient(self.app, token=token_id) - metadata_ref = dict(baz='qaz') - resp = c.create_metadata(user_id=user_id, tenant_id=tenant_id, **metadata_ref) - data = json.loads(resp.body) - self.assertEquals(data['baz'], 'qaz') - - get_resp = c.get_metadata(user_id=user_id, tenant_id=tenant_id) - get_data = json.loads(get_resp.body) - - self.assertDictEquals(data, get_data) - - update_resp = c.update_metadata(user_id=user_id, - tenant_id=tenant_id, - baz='WAZ') - update_data = json.loads(update_resp.body) - - self.assertEquals('WAZ', update_data['baz']) - - del_resp = c.delete_metadata(user_id=user_id, tenant_id=tenant_id) - self.assertEquals(del_resp.body, '') - - delget_resp = c.get_metadata(user_id=user_id, tenant_id=tenant_id) - self.assertEquals(delget_resp.body, '') - # TODO(termie): we should probably return not founds instead of None - #self.assertEquals(delget_resp.status, '404 Not Found') |