diff --git a/nova/test.py b/nova/test.py index 3a52a2493913..4ea1d3023a88 100644 --- a/nova/test.py +++ b/nova/test.py @@ -23,15 +23,23 @@ inline callbacks. """ +import os +import shutil import sys import uuid +import eventlet from fixtures import EnvironmentVariable import mox import stubout import testtools from nova import config +from nova import context +from nova import db +from nova.db import migration +from nova.db.sqlalchemy.session import get_engine +from nova.network import manager as network_manager from nova.openstack.common import cfg from nova.openstack.common import log as logging from nova.openstack.common import timeutils @@ -51,9 +59,74 @@ test_opts = [ CONF = cfg.CONF CONF.register_opts(test_opts) +CONF.import_opt('sql_connection', 'nova.db.sqlalchemy.session') +CONF.import_opt('sqlite_db', 'nova.db.sqlalchemy.session') +CONF.import_opt('state_path', 'nova.config') +CONF.set_override('use_stderr', False) +logging.setup('nova') LOG = logging.getLogger(__name__) +eventlet.monkey_patch(os=False) + +_DB = None + + +def reset_db(): + if CONF.sql_connection == "sqlite://": + engine = get_engine() + engine.dispose() + conn = engine.connect() + if _DB: + conn.connection.executescript(_DB) + else: + setup() + else: + shutil.copyfile(os.path.join(CONF.state_path, CONF.sqlite_clean_db), + os.path.join(CONF.state_path, CONF.sqlite_db)) + + +def setup(): + + fake_flags.set_defaults(CONF) + + if CONF.sql_connection == "sqlite://": + if migration.db_version() > migration.INIT_VERSION: + return + else: + testdb = os.path.join(CONF.state_path, CONF.sqlite_db) + if os.path.exists(testdb): + return + migration.db_sync() + ctxt = context.get_admin_context() + network = network_manager.VlanManager() + bridge_interface = CONF.flat_interface or CONF.vlan_interface + network.create_networks(ctxt, + label='test', + cidr=CONF.fixed_range, + multi_host=CONF.multi_host, + num_networks=CONF.num_networks, + network_size=CONF.network_size, + cidr_v6=CONF.fixed_range_v6, + gateway=CONF.gateway, + gateway_v6=CONF.gateway_v6, + bridge=CONF.flat_network_bridge, + bridge_interface=bridge_interface, + vpn_start=CONF.vpn_start, + vlan_start=CONF.vlan_start, + dns1=CONF.flat_network_dns) + for net in db.network_get_all(ctxt): + network.set_network_host(ctxt, net) + + if CONF.sql_connection == "sqlite://": + global _DB + engine = get_engine() + conn = engine.connect() + _DB = "".join(line for line in conn.connection.iterdump()) + else: + cleandb = os.path.join(CONF.state_path, CONF.sqlite_clean_db) + shutil.copyfile(testdb, cleandb) + class TestingException(Exception): pass @@ -73,7 +146,7 @@ class TestCase(testtools.TestCase): # now that we have some required db setup for the system # to work properly. self.start = timeutils.utcnow() - tests.reset_db() + reset_db() # emulate some of the mox stuff, we can't use the metaclass # because it screws with our generators diff --git a/nova/tests/__init__.py b/nova/tests/__init__.py index 6e19e6dc2e6b..7109e000f668 100644 --- a/nova/tests/__init__.py +++ b/nova/tests/__init__.py @@ -28,86 +28,3 @@ # The code below enables nosetests to work with i18n _() blocks import __builtin__ setattr(__builtin__, '_', lambda x: x) -import os -import shutil - -from nova.db.sqlalchemy.session import get_engine -from nova.openstack.common import cfg -from nova.openstack.common import log as logging - -import eventlet - - -eventlet.monkey_patch(os=False) - -CONF = cfg.CONF -CONF.import_opt('sql_connection', 'nova.db.sqlalchemy.session') -CONF.import_opt('sqlite_db', 'nova.db.sqlalchemy.session') -CONF.import_opt('state_path', 'nova.config') -CONF.set_override('use_stderr', False) - -logging.setup('nova') - -_DB = None - - -def reset_db(): - if CONF.sql_connection == "sqlite://": - engine = get_engine() - engine.dispose() - conn = engine.connect() - if _DB: - conn.connection.executescript(_DB) - else: - setup() - else: - shutil.copyfile(os.path.join(CONF.state_path, CONF.sqlite_clean_db), - os.path.join(CONF.state_path, CONF.sqlite_db)) - - -def setup(): - import mox # Fail fast if you don't have mox. Workaround for bug 810424 - - from nova import context - from nova import db - from nova.db import migration - from nova.network import manager as network_manager - from nova.tests import fake_flags - fake_flags.set_defaults(CONF) - - if CONF.sql_connection == "sqlite://": - if migration.db_version() > migration.INIT_VERSION: - return - else: - testdb = os.path.join(CONF.state_path, CONF.sqlite_db) - if os.path.exists(testdb): - return - migration.db_sync() - ctxt = context.get_admin_context() - network = network_manager.VlanManager() - bridge_interface = CONF.flat_interface or CONF.vlan_interface - network.create_networks(ctxt, - label='test', - cidr=CONF.fixed_range, - multi_host=CONF.multi_host, - num_networks=CONF.num_networks, - network_size=CONF.network_size, - cidr_v6=CONF.fixed_range_v6, - gateway=CONF.gateway, - gateway_v6=CONF.gateway_v6, - bridge=CONF.flat_network_bridge, - bridge_interface=bridge_interface, - vpn_start=CONF.vpn_start, - vlan_start=CONF.vlan_start, - dns1=CONF.flat_network_dns) - for net in db.network_get_all(ctxt): - network.set_network_host(ctxt, net) - - if CONF.sql_connection == "sqlite://": - global _DB - engine = get_engine() - conn = engine.connect() - _DB = "".join(line for line in conn.connection.iterdump()) - else: - cleandb = os.path.join(CONF.state_path, CONF.sqlite_clean_db) - shutil.copyfile(testdb, cleandb)