From 73d26734d63f36044d108d7e4670dbc868dae396 Mon Sep 17 00:00:00 2001 From: Dolph Mathews Date: Wed, 17 Aug 2011 11:00:07 -0500 Subject: [PATCH] Tests running on in-memory sqlite db Change-Id: I79e26b38416f0c143a0e83bb601c0046bb3dcf02 --- keystone/backends/sqlalchemy/__init__.py | 20 ++++++++++++++++++-- keystone/test/__init__.py | 6 +----- keystone/test/etc/ldap.conf.template | 10 +++++----- keystone/test/etc/memcache.conf.template | 10 +++++----- keystone/test/etc/sql.conf.template | 10 +++++----- run_tests.py | 2 +- 6 files changed, 35 insertions(+), 23 deletions(-) diff --git a/keystone/backends/sqlalchemy/__init__.py b/keystone/backends/sqlalchemy/__init__.py index a46ec93481..fe580cb38b 100755 --- a/keystone/backends/sqlalchemy/__init__.py +++ b/keystone/backends/sqlalchemy/__init__.py @@ -20,18 +20,21 @@ import logging from sqlalchemy import create_engine from sqlalchemy.orm import joinedload, aliased, sessionmaker +from sqlalchemy.pool import StaticPool from keystone.common import config from keystone.backends.sqlalchemy import models import keystone.utils as utils import keystone.backends.api as top_api import keystone.backends.models as top_models +from keystone.test import sampledata _ENGINE = None _MAKER = None BASE = models.Base MODEL_PREFIX = 'keystone.backends.sqlalchemy.models.' API_PREFIX = 'keystone.backends.sqlalchemy.api.' +FOR_TESTING_ONLY = 'for_testing_only' def configure_backend(options): @@ -49,15 +52,28 @@ def configure_backend(options): options, 'verbose', type='bool', default=False) timeout = config.get_option( options, 'sql_idle_timeout', type='int', default=3600) - _ENGINE = create_engine(options['sql_connection'], - pool_recycle=timeout) + + if options['sql_connection'] == FOR_TESTING_ONLY: + _ENGINE = create_engine('sqlite://', + connect_args={'check_same_thread': False}, + poolclass=StaticPool) + else: + _ENGINE = create_engine(options['sql_connection'], + pool_recycle=timeout) + logger = logging.getLogger('sqlalchemy.engine') if debug: logger.setLevel(logging.DEBUG) elif verbose: logger.setLevel(logging.INFO) + register_models(options) + # this is TERRIBLE coupling, but... + # if we're starting up a test database, load sample fixtures + if options['sql_connection'] == FOR_TESTING_ONLY: + sampledata.load_fixture() + def get_session(autocommit=True, expire_on_commit=False): """Helper method to grab session""" diff --git a/keystone/test/__init__.py b/keystone/test/__init__.py index a73022484a..42eefbe70e 100644 --- a/keystone/test/__init__.py +++ b/keystone/test/__init__.py @@ -67,17 +67,13 @@ class KeystoneTest(object): self.clear_database() self.construct_temp_conf_file() - # Populate the test database - print "Populating registry and token databases..." - execute('sampledata -c %s' % self.conf_fp.name) - # run the keystone server print "Starting the keystone server..." self.server = subprocess.Popen( [os.path.join(BASE_DIR, 'bin/keystone'), '-c', self.conf_fp.name]) # blatent hack. - time.sleep(3) + time.sleep(1) if self.server.poll() is not None: raise RuntimeError('Failed to start server') diff --git a/keystone/test/etc/ldap.conf.template b/keystone/test/etc/ldap.conf.template index f1cac60967..6a9d104ccd 100755 --- a/keystone/test/etc/ldap.conf.template +++ b/keystone/test/etc/ldap.conf.template @@ -16,7 +16,7 @@ keystone-admin-role = Admin keystone-service-admin-role = KeystoneServiceAdmin [keystone.backends.sqlalchemy] -sql_connection = sqlite:///%(test_dir)s/keystone.db +sql_connection = for_testing_only sql_idle_timeout = 30 backend_entities = ['Endpoints', 'Credentials', 'EndpointTemplates', 'Token', 'Service'] @@ -28,15 +28,15 @@ backend_entities = ['Tenant', 'User', 'UserRoleAssociation', 'Role'] [pipeline:admin] pipeline = - urlrewritefilter - admin_api + urlrewritefilter + admin_api [pipeline:keystone-legacy-auth] pipeline = urlrewritefilter legacy_auth - RAX-KEY-extension - service_api + RAX-KEY-extension + service_api [app:service_api] paste.app_factory = keystone.server:service_app_factory diff --git a/keystone/test/etc/memcache.conf.template b/keystone/test/etc/memcache.conf.template index db3d35b218..832ee08755 100644 --- a/keystone/test/etc/memcache.conf.template +++ b/keystone/test/etc/memcache.conf.template @@ -16,7 +16,7 @@ keystone-admin-role = Admin keystone-service-admin-role = KeystoneServiceAdmin [keystone.backends.sqlalchemy] -sql_connection = sqlite:///%(test_dir)s/keystone.db +sql_connection = for_testing_only sql_idle_timeout = 30 backend_entities = ['Endpoints', 'Credentials', 'EndpointTemplates', 'Tenant', 'User', 'UserRoleAssociation', 'Role', 'Service'] @@ -27,15 +27,15 @@ cache_time = 86400 [pipeline:admin] pipeline = - urlrewritefilter - admin_api + urlrewritefilter + admin_api [pipeline:keystone-legacy-auth] pipeline = urlrewritefilter legacy_auth - RAXKEY-extension - service_api + RAX-KEY-extension + service_api [app:service_api] paste.app_factory = keystone.server:service_app_factory diff --git a/keystone/test/etc/sql.conf.template b/keystone/test/etc/sql.conf.template index 208b5323a6..bd7f3c5fc1 100644 --- a/keystone/test/etc/sql.conf.template +++ b/keystone/test/etc/sql.conf.template @@ -16,21 +16,21 @@ keystone-admin-role = Admin keystone-service-admin-role = KeystoneServiceAdmin [keystone.backends.sqlalchemy] -sql_connection = sqlite:///%(test_dir)s/keystone.db +sql_connection = for_testing_only sql_idle_timeout = 30 backend_entities = ['Endpoints', 'Credentials', 'EndpointTemplates', 'Tenant', 'User', 'UserRoleAssociation', 'Role', 'Token', 'Service'] [pipeline:admin] pipeline = - urlrewritefilter - admin_api + urlrewritefilter + admin_api [pipeline:keystone-legacy-auth] pipeline = urlrewritefilter legacy_auth - RAX-KEY-extension - service_api + RAX-KEY-extension + service_api [app:service_api] paste.app_factory = keystone.server:service_app_factory diff --git a/run_tests.py b/run_tests.py index ca9c177219..fde2512e46 100755 --- a/run_tests.py +++ b/run_tests.py @@ -20,7 +20,7 @@ class LDAPTest(KeystoneTest): TESTS = [ SQLTest, - # not running MemcacheTest, + # currently failing, and has yet to pass in jenkins: MemcacheTest, LDAPTest, ]