From 8425eabe6ffb9dcdfe205d559ca33e5cbf749428 Mon Sep 17 00:00:00 2001 From: termie Date: Tue, 27 Dec 2011 12:06:14 -0800 Subject: add basic fixture functionality --- keystonelight/models.py | 10 ++++++++++ keystonelight/test.py | 31 +++++++++++++++++++++++++++++++ tests/default_fixtures.py | 16 ++++++++++++++++ tests/test_backend_kvs.py | 17 ++--------------- 4 files changed, 59 insertions(+), 15 deletions(-) create mode 100644 tests/default_fixtures.py diff --git a/keystonelight/models.py b/keystonelight/models.py index 08747cdd..a3028d46 100644 --- a/keystonelight/models.py +++ b/keystonelight/models.py @@ -15,3 +15,13 @@ class User(dict): class Tenant(dict): def __init__(self, id=None, *args, **kw): super(Tenant, self).__init__(id=id, *args, **kw) + + +class Role(dict): + def __init__(self, id=None, *args, **kw): + super(Role, self).__init__(id=id, *args, **kw) + + +class Extras(dict): + def __init__(self, user=None, tenant=None, *args, **kw): + super(Extras, self).__init__(user=User, tenant=tenant, *args, **kw) diff --git a/keystonelight/test.py b/keystonelight/test.py index 72cc63ca..5e420e3e 100644 --- a/keystonelight/test.py +++ b/keystonelight/test.py @@ -8,6 +8,7 @@ import sys from paste import deploy from keystonelight import logging +from keystonelight import models from keystonelight import utils from keystonelight import wsgi @@ -84,6 +85,36 @@ class TestCase(unittest.TestCase): sys.path.remove(path) super(TestCase, self).tearDown() + def load_fixtures(self, fixtures): + """Really quite basic and naive fixture loading based on a python module. + + Expects that the various APIs into the various services are already + defined on `self`. + + """ + # TODO(termie): doing something from json, probably based on Django's + # loaddata will be much preferred. + for tenant in fixtures.TENANTS: + rv = self.identity_api.create_tenant( + tenant['id'], models.Tenant(**tenant)) + setattr(self, 'tenant_%s' % tenant['id'], rv) + + for user in fixtures.USERS: + rv = self.identity_api.create_user(user['id'], models.User(**user)) + setattr(self, 'user_%s' % user['id'], rv) + + for role in fixtures.ROLES: + rv = self.identity_api.create_role(role['id'], models.Role(**role)) + setattr(self, 'role_%s' % role['id'], rv) + + for extras in fixtures.EXTRAS: + extras_ref = extras.copy() + del extras_ref['user'] + del extras_ref['tenant'] + rv = self.identity_api.create_extras( + extras['user'], extras['tenant'], models.Extras(**extras_ref)) + setattr(self, 'extras_%s%s' % (extras['user'], extras['tenant']), rv) + def loadapp(self, config): if not config.startswith('config:'): config = 'config:%s.conf' % os.path.join(TESTSDIR, config) diff --git a/tests/default_fixtures.py b/tests/default_fixtures.py new file mode 100644 index 00000000..15a8b60a --- /dev/null +++ b/tests/default_fixtures.py @@ -0,0 +1,16 @@ +TENANTS = [ + {'id': 'bar', 'name': 'BAR'}, + ] + +USERS = [ + {'id': 'foo', 'name': 'FOO', 'password': 'foo2', 'tenants': ['bar',]}, + ] + +EXTRAS = [ + {'user': 'foo', 'tenant': 'bar', 'extra': 'extra'}, + ] + +#ROLES = [ +# {'id': 'keystone_admin', 'name': 'Keystone Admin'}, +# ] +ROLES = [] diff --git a/tests/test_backend_kvs.py b/tests/test_backend_kvs.py index 166bc6c6..df88733d 100644 --- a/tests/test_backend_kvs.py +++ b/tests/test_backend_kvs.py @@ -4,27 +4,14 @@ from keystonelight import models from keystonelight import test from keystonelight.backends import kvs +import default_fixtures class KvsIdentity(test.TestCase): def setUp(self): super(KvsIdentity, self).setUp() options = self.appconfig('default') self.identity_api = kvs.KvsIdentity(options=options, db={}) - self._load_fixtures() - - def _load_fixtures(self): - self.tenant_bar = self.identity_api.create_tenant( - 'bar', - models.Tenant(id='bar', name='BAR')) - self.user_foo = self.identity_api.create_user( - 'foo', - models.User(id='foo', - name='FOO', - password='foo2', - tenants=[self.tenant_bar['id']])) - self.extras_foobar = self.identity_api.create_extras( - 'foo', 'bar', - {'extra': 'extra'}) + self.load_fixtures(default_fixtures) def test_authenticate_bad_user(self): self.assertRaises(AssertionError, -- cgit