diff --git a/.travis.yml b/.travis.yml index bfd46701c8be6d8c70d9746dcbdf16e77c9fcfde..b78e637961b386489136044f72c940220e81e2da 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,9 +6,16 @@ before_install: - sudo apt-get update -qq - sudo apt-get install -y swig - pip install -r requirements.txt + - pip install psycopg2 install: - pip install . -script: py.test +before_script: + - psql -c 'create database mutalyzer_test;' -U postgres + - mysql -e 'create database mutalyzer_test;' +script: + - py.test + - MUTALYZER_TEST_DATABASE_URI=postgres://postgres@127.0.0.1/mutalyzer_test py.test + - MUTALYZER_TEST_DATABASE_URI=mysql://travis@127.0.0.1/mutalyzer_test?charset=utf8 py.test notifications: slack: secure: "VsB4CPZCfUPpnt7sL94mYrws2B9VthQhY1+u7NBm6QkAopel0m1rx1vWx3gQCTR0t9vWiP+pSybtQ81PQFNrOSWDsb1QlyEK1JF1QUw5Zui+5wS8fwFM/sgwGIECuo6Oj0zCwC9KMM4olYEMC2c7TNHv4HgwWiMqEK9ItEYSLQY=" diff --git a/doc/testing.rst b/doc/testing.rst index 5f1261af2b55ef90391a9aefaf6894547cb68605..9a3ae4b961ab3c10b1dd5027916d4a6e4f5188d3 100644 --- a/doc/testing.rst +++ b/doc/testing.rst @@ -15,9 +15,25 @@ 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. +<https://travis-ci.org/LUMC/mutalyzer>`_ with SQLite, PostgreSQL, and MySQL, +for each pull request and push on GitHub. Testing the web services 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()