diff options
| author | Rick Harris <rconradharris@gmail.com> | 2013-05-25 01:01:13 +0000 |
|---|---|---|
| committer | Rick Harris <rconradharris@gmail.com> | 2013-06-07 02:07:41 +0000 |
| commit | f261afdfbed05cef9d534e418ddd8bcb26970cc6 (patch) | |
| tree | 274b4f73c7c6ef95192eb71e457bfa1ac9c6cf89 /nova/test.py | |
| parent | 7d423d3c919cd8b3526010981b0037e7579132d1 (diff) | |
| download | nova-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.py | 32 |
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 |
