Add support for retargetable functional api testing
This patch introduces the concept of a 'retargetable' functional api
test. Such a test targets an abstract client class, and by varying
the implementation of the client, the test can target multiple
backends.
The test added by this patch (test_network_lifecycle) can be run
against the programmatic plugin api (for configured plugins) via both
tox -e functional and tox -e dsvm-functional. The latter env is used
by the gating neutron-dsvm-functional job.
The test can also be run against a live Neutron service via 'tox -e api'
which will soon be run as part of the check queue by the
neutron-dsvm-api job [1]. Running this tox env requires
devstack-deployed Neutron and Tempest.
The intention is to refactor the existing plugin tests
(e.g. NeutronDbPluginV2TestCase) to use this model. Functional tests
don't have to isolate functionality - they just need to exercise it -
so fewer tests will be required. The new tests will be able to target
plugins directly rather than through the wsgi stack, so execution time
will be decreased. The refactored tests should be easier to maintain
and take less time to run.
Perhaps best of all, since the same tests will be able to target a
deployed service in the neutron-dsvm-api job, the deployed behaviour
of api changes will finally be able to gate merges to the Neutron
tree.
Notable parts of the change:
- tests/api
- base_v2 - defines the client interface (BaseNeutronClient)
and the base class (BaseTestApi) for the
retargetable test (test_network_lifecycle)
- test_v2_rest - implements the client interface for the tempest
rest client and configures the retargetable test
with scenarios for json serialization
- tests/functional/api
- test_v2_plugin - implements the client interface for the
programmatic plugin api and configures the
retargetable test with scenarios targeting the
linuxbridge and openvswitch plugins
- tests/unit
- refactor bits of the existing plugin tests for reuse
1: https://review.openstack.org/#/c/82226/
Implements: bp retargetable-functional-testing
Change-Id: Ib5470040c0fa91ec143f38d273e1e259b3adfb2e