summaryrefslogtreecommitdiffstats
path: root/nova/test.py
diff options
context:
space:
mode:
authorRick Harris <rconradharris@gmail.com>2013-05-25 01:01:13 +0000
committerRick Harris <rconradharris@gmail.com>2013-06-07 02:07:41 +0000
commitf261afdfbed05cef9d534e418ddd8bcb26970cc6 (patch)
tree274b4f73c7c6ef95192eb71e457bfa1ac9c6cf89 /nova/test.py
parent7d423d3c919cd8b3526010981b0037e7579132d1 (diff)
downloadnova-f261afdfbed05cef9d534e418ddd8bcb26970cc6.tar.gz
nova-f261afdfbed05cef9d534e418ddd8bcb26970cc6.tar.xz
nova-f261afdfbed05cef9d534e418ddd8bcb26970cc6.zip
Speeding up scheduler tests
Database access is costly in tests and many tests don't actually need it. This patch provides a simple way we can speed up the Nova tests by providing a new base class, `NoDBTestCase` which allows us to white-list tests not needing database access. The following speedups were observed: With TestCase: Ran 265 tests in 17.080s With NoDBTestCase: Ran 265 tests in 9.478s Further optimizaton could be done by fixing `test_host_filters` to not hit the database. This will require some effort though in order to maintain the quality of test coverage since part of what's doing is testing the code in the DB layer. Change-Id: Ic34c4c39d7f680ac501efb459fdeaa51331ffe1c
Diffstat (limited to 'nova/test.py')
-rw-r--r--nova/test.py32
1 files changed, 24 insertions, 8 deletions
diff --git a/nova/test.py b/nova/test.py
index f0dba7c7c..d7502b4ea 100644
--- a/nova/test.py
+++ b/nova/test.py
@@ -189,7 +189,12 @@ class TestingException(Exception):
class TestCase(testtools.TestCase):
- """Test case base class for all unit tests."""
+ """Test case base class for all unit tests.
+
+ Due to the slowness of DB access, please consider deriving from
+ `NoDBTestCase` first.
+ """
+ USES_DB = True
def setUp(self):
"""Run before each test method to initialize test environment."""
@@ -217,13 +222,15 @@ class TestCase(testtools.TestCase):
self.log_fixture = self.useFixture(fixtures.FakeLogger())
self.useFixture(conf_fixture.ConfFixture(CONF))
- global _DB_CACHE
- if not _DB_CACHE:
- _DB_CACHE = Database(session, migration,
- sql_connection=CONF.sql_connection,
- sqlite_db=CONF.sqlite_db,
- sqlite_clean_db=CONF.sqlite_clean_db)
- self.useFixture(_DB_CACHE)
+ if self.USES_DB:
+ global _DB_CACHE
+ if not _DB_CACHE:
+ _DB_CACHE = Database(session, migration,
+ sql_connection=CONF.sql_connection,
+ sqlite_db=CONF.sqlite_db,
+ sqlite_clean_db=CONF.sqlite_clean_db)
+
+ self.useFixture(_DB_CACHE)
mox_fixture = self.useFixture(MoxStubout())
self.mox = mox_fixture.mox
@@ -274,3 +281,12 @@ class TimeOverride(fixtures.Fixture):
super(TimeOverride, self).setUp()
timeutils.set_time_override()
self.addCleanup(timeutils.clear_time_override)
+
+
+class NoDBTestCase(TestCase):
+ """
+ `NoDBTestCase` differs from TestCase in that DB access is not supported.
+ This makes tests run significantly faster. If possible, all new tests
+ should derive from this class.
+ """
+ USES_DB = False