====================
Testing with Octavia
====================


Unit Testing
------------

Octavia uses tox to manage the virtual environments for running test cases.

Install python-tox:

.. code-block:: bash

    $ pip install tox

To run the full suite of tests maintained within Octavia.

.. code-block:: bash

    $ tox

.. NOTE::

    The first time you run ``tox``, it will take additional time to build
    virtualenvs. You can later use the ``-r`` option with ``tox`` to rebuild
    your virtualenv in a similar manner.


To run tests for one or more specific test environments(for example, the most
common configuration of Python 3.7 and PEP-8), list the environments with the
``-e`` option, separated by spaces:

.. code-block:: bash

    $ tox -e py37,pep8

See ``tox -l`` for the full list of available test environments.

Functional Testing
------------------

Octavia creates a simulated API and handler for its functional tests.
The tests then run requests against the mocked up API.

To run the entire suite of functional tests:

.. code-block:: bash

    $ tox -e functional

To run a specific functional test:

.. code-block:: bash

    $ tox -e functional octavia.tests.functional.api.v2.test_load_balancer

Tests can also be run using partial matching, to run all API tests for v2:

.. code-block:: bash

    $ tox -e functional api.v2

Additional options can be used while running tests. Two useful options that can
be used when running tests are ``-- --until-failure`` which will run the tests
in a loop until the first failure is hit, and ``-- --failing`` which if used
after an initial run will only run the tests that failed in the previous run.

Scenario Testing
----------------

Octavia uses Tempest to cover the scenario tests for the project.
These tests are run against actual cloud deployments.

To run the entire suite of scenario tests:

.. code-block:: bash

    $ tox -e scenario

.. NOTE::

    The first time running the Tempest scenario tests export the
    Tempest configuration directory
    (i.e. TEMPEST_CONFIG_DIR=/opt/stack/tempest/etc)

