.. _integration_tests: ******************* Integration Testing ******************* Overview ========= Integration tests are written using pytest and are located at ``tests/integration_tests``. General design principles laid out in :ref:`testing` should be followed for integration tests. Setup is accomplished via a set of fixtures located in ``tests/integration_tests/conftest.py``. Image Selection =============== Each integration testing run uses a single image as its basis. This image is configured using the ``OS_IMAGE`` variable; see :ref:`Configuration` for details of how configuration works. ``OS_IMAGE`` can take two types of value: an Ubuntu series name (e.g. "focal"), or an image specification. If an Ubuntu series name is given, then the most recent image for that series on the target cloud will be used. For other use cases, an image specification is used. In its simplest form, an image specification can simply be a cloud's image ID (e.g. "ami-deadbeef", "ubuntu:focal"). In this case, the image so-identified will be used as the basis for this testing run. This has a drawback, however: as we do not know what OS or release is within the image, the integration testing framework will run *all* tests against the image in question. If it's a RHEL8 image, then we would expect Ubuntu-specific tests to fail (and vice versa). To address this, a full image specification can be given. This is of the form: ``[::[:: /tmp/user_data.txt""" class TestSimple: @pytest.mark.user_data(USER_DATA) @pytest.mark.ec2 def test_simple(self, client): print(client.exec('cloud-init -v')) Test Execution ============== Test execution happens via pytest. To run all integration tests, you would run: .. code-block:: bash pytest tests/integration_tests/ Configuration ============= All possible configuration values are defined in ``tests/integration_tests/integration_settings.py``. Defaults can be overridden by supplying values in ``tests/integration_tests/user_settings.py`` or by providing an environment variable of the same name prepended with ``CLOUD_INIT_``. For example, to set the ``PLATFORM`` setting: .. code-block:: bash CLOUD_INIT_PLATFORM='ec2' pytest tests/integration_tests/