summaryrefslogtreecommitdiffstats
path: root/tests/test_backend_sql.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_backend_sql.py')
-rw-r--r--tests/test_backend_sql.py144
1 files changed, 128 insertions, 16 deletions
diff --git a/tests/test_backend_sql.py b/tests/test_backend_sql.py
index 46d7c013..89276e86 100644
--- a/tests/test_backend_sql.py
+++ b/tests/test_backend_sql.py
@@ -16,6 +16,8 @@
import uuid
+import sqlalchemy
+
from keystone import test
from keystone.common import sql
@@ -57,6 +59,94 @@ class SqlTests(test.TestCase, sql.Base):
super(SqlTests, self).tearDown()
+class SqlModels(SqlTests):
+ def setUp(self):
+ super(SqlModels, self).setUp()
+
+ self.metadata = sql.ModelBase.metadata
+ self.metadata.bind = self.engine
+
+ def select_table(self, name):
+ table = sqlalchemy.Table(name,
+ self.metadata,
+ autoload=True)
+ s = sqlalchemy.select([table])
+ return s
+
+ def assertExpectedSchema(self, table, cols):
+ table = self.select_table(table)
+ for col, type_, length in cols:
+ self.assertIsInstance(table.c[col].type, type_)
+ if length:
+ self.assertEquals(table.c[col].type.length, length)
+
+ def test_user_model(self):
+ cols = (('id', sql.String, 64),
+ ('name', sql.String, 64),
+ ('password', sql.String, 128),
+ ('domain_id', sql.String, 64),
+ ('enabled', sql.Boolean, None),
+ ('extra', sql.JsonBlob, None))
+ self.assertExpectedSchema('user', cols)
+
+ def test_group_model(self):
+ cols = (('id', sql.String, 64),
+ ('name', sql.String, 64),
+ ('description', sql.Text, None),
+ ('domain_id', sql.String, 64),
+ ('extra', sql.JsonBlob, None))
+ self.assertExpectedSchema('group', cols)
+
+ def test_domain_model(self):
+ cols = (('id', sql.String, 64),
+ ('name', sql.String, 64),
+ ('enabled', sql.Boolean, None))
+ self.assertExpectedSchema('domain', cols)
+
+ def test_project_model(self):
+ cols = (('id', sql.String, 64),
+ ('name', sql.String, 64),
+ ('description', sql.Text, None),
+ ('domain_id', sql.String, 64),
+ ('enabled', sql.Boolean, None),
+ ('extra', sql.JsonBlob, None))
+ self.assertExpectedSchema('project', cols)
+
+ def test_role_model(self):
+ cols = (('id', sql.String, 64),
+ ('name', sql.String, 255))
+ self.assertExpectedSchema('role', cols)
+
+ def test_user_project_metadata_model(self):
+ cols = (('user_id', sql.String, 64),
+ ('project_id', sql.String, 64),
+ ('data', sql.JsonBlob, None))
+ self.assertExpectedSchema('user_project_metadata', cols)
+
+ def test_user_domain_metadata_model(self):
+ cols = (('user_id', sql.String, 64),
+ ('domain_id', sql.String, 64),
+ ('data', sql.JsonBlob, None))
+ self.assertExpectedSchema('user_domain_metadata', cols)
+
+ def test_group_project_metadata_model(self):
+ cols = (('group_id', sql.String, 64),
+ ('project_id', sql.String, 64),
+ ('data', sql.JsonBlob, None))
+ self.assertExpectedSchema('group_project_metadata', cols)
+
+ def test_group_domain_metadata_model(self):
+ cols = (('group_id', sql.String, 64),
+ ('domain_id', sql.String, 64),
+ ('data', sql.JsonBlob, None))
+ self.assertExpectedSchema('group_domain_metadata', cols)
+
+ def test_user_group_membership(self):
+ cols = (('group_id', sql.String, 64),
+ ('user_id', sql.String, 64))
+ self.assertExpectedSchema('user_group_membership', cols)
+
+
class SqlIdentity(SqlTests, test_backend.IdentityTests):
def test_password_hashed(self):
session = self.identity_api.get_session()
@@ -132,33 +222,51 @@ class SqlIdentity(SqlTests, test_backend.IdentityTests):
tenants = self.identity_api.get_projects_for_user(user['id'])
self.assertEquals(tenants, [])
- def test_delete_user_with_metadata(self):
- user = {'id': 'fake',
- 'name': 'fakeuser',
+ def test_metadata_removed_on_delete_user(self):
+ # A test to check that the internal representation
+ # or roles is correctly updated when a user is deleted
+ user = {'id': uuid.uuid4().hex,
+ 'name': uuid.uuid4().hex,
'domain_id': DEFAULT_DOMAIN_ID,
'password': 'passwd'}
- self.identity_api.create_user('fake', user)
- self.identity_api.create_metadata(user['id'],
- self.tenant_bar['id'],
- {'extra': 'extra'})
+ self.identity_api.create_user(user['id'], user)
+ role = {'id': uuid.uuid4().hex,
+ 'name': uuid.uuid4().hex}
+ self.identity_api.create_role(role['id'], role)
+ self.identity_api.add_role_to_user_and_project(
+ user['id'],
+ self.tenant_bar['id'],
+ role['id'])
self.identity_api.delete_user(user['id'])
+
+ # Now check whether the internal representation of roles
+ # has been deleted
self.assertRaises(exception.MetadataNotFound,
- self.identity_api.get_metadata,
+ self.assignment_api._get_metadata,
user['id'],
self.tenant_bar['id'])
- def test_delete_project_with_metadata(self):
- user = {'id': 'fake',
- 'name': 'fakeuser',
+ def test_metadata_removed_on_delete_project(self):
+ # A test to check that the internal representation
+ # or roles is correctly updated when a project is deleted
+ user = {'id': uuid.uuid4().hex,
+ 'name': uuid.uuid4().hex,
'domain_id': DEFAULT_DOMAIN_ID,
'password': 'passwd'}
- self.identity_api.create_user('fake', user)
- self.identity_api.create_metadata(user['id'],
- self.tenant_bar['id'],
- {'extra': 'extra'})
+ self.identity_api.create_user(user['id'], user)
+ role = {'id': uuid.uuid4().hex,
+ 'name': uuid.uuid4().hex}
+ self.identity_api.create_role(role['id'], role)
+ self.identity_api.add_role_to_user_and_project(
+ user['id'],
+ self.tenant_bar['id'],
+ role['id'])
self.identity_api.delete_project(self.tenant_bar['id'])
+
+ # Now check whether the internal representation of roles
+ # has been deleted
self.assertRaises(exception.MetadataNotFound,
- self.identity_api.get_metadata,
+ self.assignment_api._get_metadata,
user['id'],
self.tenant_bar['id'])
@@ -302,3 +410,7 @@ class SqlCatalog(SqlTests, test_backend.CatalogTests):
class SqlPolicy(SqlTests, test_backend.PolicyTests):
pass
+
+
+class SqlInheritance(SqlTests, test_backend.InheritanceTests):
+ pass