diff --git a/doc/testing.rst b/doc/testing.rst index 5f1261af2b55ef90391a9aefaf6894547cb68605..db9f780276f591c616b5447de9535efb1442d4ab 100644 --- a/doc/testing.rst +++ b/doc/testing.rst @@ -15,6 +15,22 @@ the Mutalyzer source directory. .. note:: The Mutalyzer package must be installed before running the unit tests. +By default, the tests use an in-memory SQLite database. This can be customized +by setting the `MUTALYZER_TEST_DATABASE_URI` to a valid `SQLAlchemy connection +URI +<http://docs.sqlalchemy.org/en/rel_1_0/core/engines.html#database-urls>`_ +(obviously, the contents of this database will be lost). For example, to use +an SQLite database on the filesystem:: + + $ MUTALYZER_TEST_DATABASE_URI=sqlite:////tmp/mutalyzer.sql py.test + +Or, using `pg_virtualenv +<https://alioth.debian.org/scm/loggerhead/pkg-postgresql/postgresql-common/trunk/view/head:/pg_virtualenv>`_ +(included with the Debian PostgreSQL packages), to run the tests with +PostgreSQL:: + + $ pg_virtualenv bash -c 'MUTALYZER_TEST_DATABASE_URI=postgres://${PGUSER}:${PGPASSWORD}@${PGHOST}:${PGPORT}/${PGDATABASE} py.test' + Tests are `run automatically on Travis CI <https://travis-ci.org/LUMC/mutalyzer>`_ for each pull request and push on GitHub. diff --git a/mutalyzer/db/__init__.py b/mutalyzer/db/__init__.py index 71e8eaf5cd4eeea706873fcb4b179168e34187d7..1655baa688fcd4bbc5212a012f666d9a2aa456da 100644 --- a/mutalyzer/db/__init__.py +++ b/mutalyzer/db/__init__.py @@ -47,7 +47,7 @@ def create_engine(): engine = sqlalchemy.create_engine(url, **options) # For convenience, we also create tables if we're using an SQLite - # in-memory database. By definition they won't yet exist + # in-memory database. By definition they won't yet exist. Base.metadata.create_all(engine) return engine diff --git a/tests/utils.py b/tests/utils.py index f9cfce8bb44a2ce0e7bd09d9951e92d6b8ea1c34..aa90a1fd7b8c21bbc9c9ae97a676004b5a11854d 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -11,6 +11,7 @@ import shutil import tempfile from mutalyzer.config import settings +from mutalyzer import db class TestEnvironment(object): @@ -25,13 +26,21 @@ class TestEnvironment(object): log_handle, self.log_file = tempfile.mkstemp() os.close(log_handle) + database_uri = os.getenv('MUTALYZER_TEST_DATABASE_URI', 'sqlite://') + settings.configure({'DEBUG': False, 'TESTING': True, 'CACHE_DIR': self.cache_dir, 'REDIS_URI': None, - 'DATABASE_URI': 'sqlite://', + 'DATABASE_URI': database_uri, 'LOG_FILE': self.log_file}) + # Mutalyzer create tables automatically if we're using an SQLite + # in-memory database. + if database_uri != 'sqlite://': + db.Base.metadata.drop_all(db.session.get_bind()) + db.Base.metadata.create_all(db.session.get_bind()) + for fixture in fixtures: fixture()