summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortermie <github@anarkystic.com>2011-11-14 10:51:17 -0800
committertermie <github@anarkystic.com>2011-11-14 10:51:17 -0800
commit3ab9d87465d7aa96c7b3da4d6425540bc67c1a5b (patch)
treeaf17a5df7e04c98873f88d3a7b6d92072f30e440
parentf8e6fae92f9defb23ee80abea6126d6753574393 (diff)
downloadkeystone-3ab9d87465d7aa96c7b3da4d6425540bc67c1a5b.tar.gz
keystone-3ab9d87465d7aa96c7b3da4d6425540bc67c1a5b.tar.xz
keystone-3ab9d87465d7aa96c7b3da4d6425540bc67c1a5b.zip
add tenant crud
-rw-r--r--keystonelight/backends/kvs.py14
-rw-r--r--keystonelight/service.py22
-rw-r--r--tests/test_identity_api.py44
3 files changed, 80 insertions, 0 deletions
diff --git a/keystonelight/backends/kvs.py b/keystonelight/backends/kvs.py
index 7892e3cd..d5554139 100644
--- a/keystonelight/backends/kvs.py
+++ b/keystonelight/backends/kvs.py
@@ -69,6 +69,20 @@ class KvsIdentity(object):
self.db.set('tenant_name-%s' % tenant['name'], tenant)
return tenant
+ def update_tenant(self, id, tenant):
+ # get the old name and delete it too
+ old_tenant = self.db.get('tenant-%s' % id)
+ self.db.delete('tenant_name-%s' % old_tenant['name'])
+ self.db.set('tenant-%s' % id, tenant)
+ self.db.set('tenant_name-%s' % tenant['name'], tenant)
+ return tenant
+
+ def delete_tenant(self, id):
+ old_tenant = self.db.get('tenant-%s' % id)
+ self.db.delete('tenant_name-%s' % old_tenant['name'])
+ self.db.delete('tenant-%s' % id)
+ return None
+
def create_extras(self, user_id, tenant_id, extras):
self.db.set('extras-%s-%s' % (tenant_id, user_id), extras)
return extras
diff --git a/keystonelight/service.py b/keystonelight/service.py
index c65102a3..2d5556ef 100644
--- a/keystonelight/service.py
+++ b/keystonelight/service.py
@@ -141,6 +141,28 @@ class IdentityController(BaseApplication):
def delete_user(self, context, user_id):
return self.identity_api.delete_user(context, user_id=user_id)
+ def get_tenant(self, context, tenant_id):
+ return self.identity_api.get_tenant(context, tenant_id=tenant_id)
+
+ def get_tenant_by_name(self, context, tenant_name):
+ return self.identity_api.get_tenant_by_name(
+ context, tenant_name=tenant_name)
+
+ def create_tenant(self, context, **kw):
+ tenant_id = uuid.uuid4().hex
+ kw['id'] = tenant_id
+ return self.identity_api.create_tenant(
+ context, tenant_id=tenant_id, data=kw)
+
+ def update_tenant(self, context, tenant_id, **kw):
+ kw['id'] = tenant_id
+ kw.pop('tenant_id', None)
+ return self.identity_api.update_tenant(
+ context, tenant_id=tenant_id, data=kw)
+
+ def delete_tenant(self, context, tenant_id):
+ return self.identity_api.delete_tenant(context, tenant_id=tenant_id)
+
class Router(wsgi.Router):
def __init__(self, options):
diff --git a/tests/test_identity_api.py b/tests/test_identity_api.py
index 8d3e84c6..29b6da3b 100644
--- a/tests/test_identity_api.py
+++ b/tests/test_identity_api.py
@@ -102,3 +102,47 @@ class IdentityApi(test.TestCase):
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 = self.options['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')