deckhand/doc/source/testing.rst
Felipe Monteiro c69f29e92f Revamp Deckhand documentation
This PS updates all Deckhand documentation to be
sphinx-compliant so that it can be rendered into
HTML automatically for hosting.

This PS also removes deprecated/redundant/unhelpful
documentation and upates README to a bit more
informative and helpful. The design.md file has been
broken up into different sections with deckhand/docs
for easier consumption.

Change-Id: I44afcd22a7f5f05e44563342bb98b30fd806f598
2017-10-16 20:11:56 +01:00

3.4 KiB

Testing

Unit testing

Unit testing currently uses an in-memory sqlite database. Since Deckhand's primary function is to serve as the back-end storage for UCP, the majority of unit tests perform actual database operations. Mocking is used sparingly because Deckhand is a fairly insular application that lives at the bottom of a very deep stack; Deckhand only communicates with Keystone and Barbican. As such, validating database operations is paramount to correctly testing Deckhand.

To run unit tests using sqlite, execute:

$ tox -epy27
$ tox -epy35

against a py27- or py35-backed environment, respectively. To run individual unit tests, run:

$ tox -e py27 -- deckhand.tests.unit.db.test_revisions

for example.

To run unit tests using postgresql, execute:

$ tox -epy27-postgresql
$ tox -epy35-postgresql

against a py27- or py35-backed environment, respectively. Individual unit tests can be executed the same way as above.

pifpaf is used to spin up a temporary postgresql database. The URL is set up as an environment variable via PIFPAF_URL.

Warning

It is not recommended to run postgresql-backed unit tests concurrently. Only run them serially. This is because, to guarantee true test isolation, the DB tables are re-created each test run. Only one instance of postgresql is created across all threads, thus causing major conflicts if concurrency > 1.

Functional testing

Prerequisites

Deckhand requires Docker to run its functional tests. A basic installation guide for Docker for Ubuntu can be found here.

Overview

Deckhand uses gabbi as its functional testing framework. Functional tests can be executed via:

$ tox -e functional

You can also run a subset of tests via a regex:

$ tox -e functional -- gabbi.suitemaker.test_gabbi_document-crud-success-multi-bucket

The command executes tools/functional-tests.sh which:

  1. Launches Postgresql inside a Docker container.
  2. Sets up a basic Deckhand configuration file that uses Postgresql in its oslo_db connection string.
  3. Sets up a custom policy file with very liberal permissions so that gabbi can talk to Deckhand without having to authenticate against Keystone and pass an admin token to Deckhand.
  4. Instantiates Deckhand via uwisgi.
  5. Calls gabbi which runs a battery of functional tests.

At this time, there are no functional tests for policy enforcement verification. Negative tests will be added at a later date to confirm that a 403 Forbidden is raised for each endpoint that does policy enforcement absent necessary permissions.