Clean up packaging and docs to make this consumable

* add a convenience Makefile
* add license headers
* rationalized requirements.txt
* add wheel building capabilities
* update README
This commit is contained in:
Chris Dent 2018-01-09 17:12:00 +00:00
parent d570f5da52
commit 487ebec24f
7 changed files with 99 additions and 17 deletions

23
Makefile Normal file
View File

@ -0,0 +1,23 @@
# simple Makefile for some common tasks
.PHONY: clean dist release pypi tagv
clean:
find . -name "*.pyc" |xargs rm || true
rm -r dist || true
rm -r build || true
rm -r .eggs || true
rm -r gabbi_tempest.egg-info || true
tagv:
git tag -s \
-m `python -c 'import gabbi_tempest; print gabbi_tempest.__version__'` \
`python -c 'import gabbi_tempest; print gabbi_tempest.__version__'`
git push origin master --tags
dist:
python setup.py sdist bdist_wheel
release: clean tagv pypi
pypi:
python setup.py sdist bdist_wheel upload --sign

View File

@ -2,16 +2,26 @@
Gabbi + Tempest
===============
This is an exploration of running gabbi_ as a tempest plugin. This
code is based entirely on the work of Mehdi Abaakouk who made a
tempest plugin for gnocchi_. This code models that but tries to
be more generic: it allows you to set a ``GABBI_TEMPEST_PATH``
environment variable pointing to multiple directories containing
gabbi YAML files.
Gabbi-tempest is an experimental Tempest_ plugin_ that enables
testing the APIs of running OpenStack services, integrated with
tempest but without needing to write Python. Instead the YAML
format_ provided by gabbi_ is used to write and evaluate HTTP
requests and responses.
Tests are placed in YAML files in one or more directories. Those
directories are added to a ``GABBI_TEMPEST_PATH`` environment
variable. When that variable is passed into a tempest test
runner that is aware of the gabbi plugin, the files on that path
will be used to create tempests tests.
The test harness sets a series of enviornment variables that can
be used in the YAML to reach the available services. These will
eventually need to be extended (or can be extended by subclasses).
be used in the YAML to reach the available services. The available
variables may be extended in two ways:
* Adding them to the environment that calls tempest if the values are
known.
* Setting them in a subclass of the plugin if the values need to
be calculated from what tempest knows.
For each service in the service catalog there are
``<SERVICE_TYPE>_SERVICE`` and ``<SERVICE_TYPE>_BASE`` variables
@ -19,38 +29,55 @@ For each service in the service catalog there are
``SERVICE_TOKEN``, ``IMAGE_REF``, ``FLAVOR_REF`` and ``FLAVOR_REF_ALT``
are also available.
For the time being the ``SERVICE_TOKEN`` is ``admin``.
Trying It
---------
To experiment with this you need a working tempest installation and
configuration. I used devstack with::
configuration. One way to do that is to use devstack_ with the
following added to the local.conf::
enable_service tempest
INSTALL_TEMPEST=True
in local.conf.
Once tempest is confirmed to be working, make a clone of this repo,
cd into it and do the equivalent of::
Once tempest is confirmed to be working, gabbi-tempest must be
installed. Either install it from PyPI::
pip install gabbi-tempest
Or make a clone of this repo_, cd into it, and do the equivalent of::
pip install -e .
If you are using virtualenvs or need sudo, your form will be
different.
Create some gabbi_ tests that exercise the OpenStack services. There
are sample files in the ``samples`` directory in the repo_.
Go to the tempest directory (often ``/opt/stack/tempest``) and run
tempest limiting the test run to gabbi related tests and setting
the PATH variable::
tempest as follows. Adding the ``regex`` will limit the test run
to just gabbi related tests::
GABBI_TEMPEST_PATH=/path/one:/path/two tempest run --regex gabbi
This will run the tests described by the YAML files in
``/path/one`` and ``/path/two``.
There is a sample files in ``samples`` in the repo which you can try
with::
History
-------
GABBI_TEMPEST_PATH=/path/to/samples tempest run --regex gabbi
This code is based on the work of Mehdi Abaakouk who made a tempest
plugin for gnocchi_ that worked with gabbi_. He figured out the
details of the plugin structure.
.. _devstack: https://docs.openstack.org/devstack/latest/
.. _Tempest: https://docs.openstack.org/tempest/latest/
.. _plugin: https://docs.openstack.org/tempest/latest/plugin.html
.. _gnocchi: https://review.openstack.org/#/c/301585/
.. _gabbi: https://gabbi.readthedocs.org/
.. _format: https://gabbi.readthedocs.io/en/latest/format.html
.. _repo: https://github.com/cdent/gabbi-tempest

View File

@ -0,0 +1,14 @@
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
__version__ = '0.1.0'

View File

@ -0,0 +1,11 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.

View File

@ -1 +1,3 @@
pbr
gabbi
six

View File

@ -89,7 +89,9 @@ tests:
response_json_paths:
$.server.status: VERIFY_RESIZE
# expected to fail because we don't double this way anymore
- name: check for double allocations
xfail: True
GET: *s1_alloc
poll:
count: 10

View File

@ -15,8 +15,8 @@ classifier =
Programming Language :: Python :: 2
Programming Language :: Python :: 2.7
Programming Language :: Python :: 3
Programming Language :: Python :: 3.4
Programming Language :: Python :: 3.5
Programming Language :: Python :: 3.6
Topic :: Software Development :: Testing
[files]
@ -31,3 +31,6 @@ source-dir = docs/source
[entry_points]
tempest.test_plugins =
gabbi = gabbi_tempest.plugin:GabbiTempestPlugin
[bdist_wheel]
universal=1