diff options
| author | termie <github@anarkystic.com> | 2011-11-14 10:51:17 -0800 |
|---|---|---|
| committer | termie <github@anarkystic.com> | 2011-11-14 10:51:17 -0800 |
| commit | 3ab9d87465d7aa96c7b3da4d6425540bc67c1a5b (patch) | |
| tree | af17a5df7e04c98873f88d3a7b6d92072f30e440 | |
| parent | f8e6fae92f9defb23ee80abea6126d6753574393 (diff) | |
| download | keystone-3ab9d87465d7aa96c7b3da4d6425540bc67c1a5b.tar.gz keystone-3ab9d87465d7aa96c7b3da4d6425540bc67c1a5b.tar.xz keystone-3ab9d87465d7aa96c7b3da4d6425540bc67c1a5b.zip | |
add tenant crud
| -rw-r--r-- | keystonelight/backends/kvs.py | 14 | ||||
| -rw-r--r-- | keystonelight/service.py | 22 | ||||
| -rw-r--r-- | tests/test_identity_api.py | 44 |
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') |
