Unit Tests ========== Manila contains a suite of unit tests, in the manila/tests directory. Any proposed code change will be automatically rejected by the OpenStack Zuul server if the change causes unit test failures. Running the tests ----------------- To run all unit tests simply run:: tox This will create a virtual environment, load all the packages from test-requirements.txt and run all unit tests as well as run flake8 and hacking checks against the code. You may run individual test targets, for example only unit tests, by running:: tox -e py3 Note that you can inspect the tox.ini file to get more details on the available options and what the test run does by default. Running a subset of tests ------------------------- Instead of running all tests, you can specify an individual directory, file, class, or method that contains test code. To run the tests in the ``manila/tests/scheduler`` directory:: tox -epy3 -- manila.tests.scheduler To run the tests in the `ShareManagerTestCase` class in ``manila/tests/share/test_manager.py``:: tox -epy3 -- manila.tests.share.test_manager.ShareManagerTestCase To run the `ShareManagerTestCase::test_share_manager_instance` test method in ``manila/tests/share/test_manager.py``:: tox -epy3 -- manila.tests.share.test_manager.ShareManagerTestCase.test_share_manager_instance For more information on these options and details about stestr, please see the `stestr documentation `_. Database Setup -------------- Some unit tests will use a local database. You can use ``tools/test-setup.sh`` to set up your local system the same way as it's setup in the CI environment. Gotchas ------- **Running Tests from Shared Folders** If you are running the unit tests from a shared folder, you may see tests start to fail or stop completely as a result of Python lockfile issues [#f3]_. You can get around this by manually setting or updating the following line in ``manila/tests/conf_fixture.py``:: FLAGS['lock_path'].SetDefault('/tmp') Note that you may use any location (not just ``/tmp``!) as long as it is not a shared folder. .. rubric:: Footnotes .. [#f1] See :doc:`development.environment` for more details about the use of virtualenv. .. [#f2] There is an effort underway to use a fake DB implementation for the unit tests. See https://lists.launchpad.net/openstack/msg05604.html .. [#f3] See Vish's comment in this bug report: https://bugs.launchpad.net/manila/+bug/882933