Unit Tests
==========

Nova contains a suite of unit tests, in the nova/tests directory.

Any proposed code change will be automatically rejected by the OpenStack
Jenkins server [#f1]_ if the change causes unit test failures.

Preferred way to run the tests
------------------------------

The preferred way to run the unit tests is using ``tox``.  See `the
unit testing section of the Testing wiki page`_ and `Nova's HACKING.rst`_
for more information.  Following are some simple examples.

To run the style tests::

    tox -e pep8

You can request multiple tests, separated by commas::

    tox -e py27,pep8

.. _the unit testing section of the Testing wiki page: https://wiki.openstack.org/wiki/Testing#Unit_Tests
.. _Nova's HACKING.rst: http://git.openstack.org/cgit/openstack/nova/tree/HACKING.rst

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 ``nova/tests/unit/scheduler`` directory::

    tox -e py27 nova.tests.unit.scheduler

To run the tests in the ``nova/tests/unit/virt/libvirt/test_driver.py`` file::

    tox -e py27 test_driver

To run the tests in the ``CacheConcurrencyTestCase`` class in
``nova/tests/unit/virt/libvirt/test_driver.py``::

    tox -e py27  test_driver.CacheConcurrencyTestCase

To run the `ValidateIntegerTestCase.test_invalid_inputs` test method in
``nova/tests/unit/test_utils.py``::

    tox -epy27 test_utils.ValidateIntegerTestCase.test_invalid_inputs

Debugging strange test failures
-------------------------------

Things to try when there are odd test failures such as failure on
jenkins but not locally.

The venv can get stale. Force a refresh by adding the -r flag::

    tox -r -e pep8

.. rubric:: Footnotes

.. [#f1] See :doc:`jenkins`.
