From e6ea310751b58be0ad1d06d8acffc2b8fff8e5a3 Mon Sep 17 00:00:00 2001 From: Maru Newby Date: Tue, 31 Jan 2012 15:27:29 -0800 Subject: [PATCH] Add support for venv-based test run with tox. * Adds tox config - based on the config from python-quantumclient and updated for test, pep8 and coverage execution as per nova's run_tests.sh. * Adds nosetests defaults in setup.cfg * Adds runtime dependencies in tools/pip-requires - dependencies were gathered by referencing the packages used in creation of a Swift All In One. Versions were determined by checking the swift-core/trunk ppa or, failing that, the version available in lucid. * Adds test dependencies in tools/test-requires * Updates swift/common/middleware/formpost.py for pep8 compliance * Adds instructions for executing the tests with Tox to the developer_guidelines * Adds instructions for installing openstack.nose_plugin to developer_saio * Fixes bug 909177 Change-Id: I5407924d2181e9ab335aaf76bf30c8d40deccbb4 --- .functests | 4 +-- .gitignore | 1 + .probetests | 2 +- .unittests | 2 +- doc/source/development_guidelines.rst | 26 +++++++++++++++++ doc/source/development_saio.rst | 2 ++ setup.cfg | 10 +++++++ swift/common/middleware/formpost.py | 2 +- tools/pip-requires | 8 ++++++ tools/test-requires | 5 ++++ tox.ini | 41 +++++++++++++++++++++++++++ 11 files changed, 98 insertions(+), 5 deletions(-) create mode 100644 tools/pip-requires create mode 100644 tools/test-requires create mode 100644 tox.ini diff --git a/.functests b/.functests index a0123679c1..fb2b0eb2e3 100755 --- a/.functests +++ b/.functests @@ -1,4 +1,4 @@ #!/bin/bash -nosetests test/functional --exe $@ -nosetests test/functionalnosetests --exe $@ +nosetests test/functional $@ +nosetests test/functionalnosetests $@ diff --git a/.gitignore b/.gitignore index 8e13a40f64..6dac914d69 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ ChangeLog .coverage swift.egg-info .DS_Store +.tox diff --git a/.probetests b/.probetests index 7514693868..1fdd918165 100755 --- a/.probetests +++ b/.probetests @@ -1,3 +1,3 @@ #!/bin/bash -nosetests test/probe --exe +nosetests test/probe diff --git a/.unittests b/.unittests index f0ecf0581e..aa54b06ffe 100755 --- a/.unittests +++ b/.unittests @@ -1,4 +1,4 @@ #!/bin/bash -nosetests test/unit --exe --with-coverage --cover-package swift --cover-erase $@ +nosetests test/unit --with-coverage --cover-package swift --cover-erase $@ rm -f .coverage diff --git a/doc/source/development_guidelines.rst b/doc/source/development_guidelines.rst index 9abda8c90e..70e2993752 100644 --- a/doc/source/development_guidelines.rst +++ b/doc/source/development_guidelines.rst @@ -12,6 +12,32 @@ here: http://www.python.org/dev/peps/pep-0008/ There is a useful pep8 command line tool for checking files for pep8 compliance which can be installed with ``easy_install pep8``. +------------------ +Testing Guidelines +------------------ + +Swift has a comprehensive suite of tests that are run on all submitted code, +and it is recommended that developers execute the tests themselves to +catch regressions early. Developers are also expected to keep the +test suite up-to-date with any submitted code changes. + +Swift's suite of unit tests can be executed in an isolated environment +with Tox: http://tox.testrun.org/ + +To execute the unit tests: + +* Install Tox: + + - `pip install tox` + +* Run Tox from the root of the swift repo: + + - `tox` + +* Optionally, run only specific tox builds: + + - `tox -e pep8,py26` + ------------------------ Documentation Guidelines ------------------------ diff --git a/doc/source/development_saio.rst b/doc/source/development_saio.rst index 165b60350f..38cb609770 100644 --- a/doc/source/development_saio.rst +++ b/doc/source/development_saio.rst @@ -32,6 +32,7 @@ Installing dependencies and the core code python-coverage python-dev python-nose python-setuptools python-simplejson python-xattr sqlite3 xfsprogs python-webob python-eventlet python-greenlet python-pastedeploy python-netifaces` + #. `pip install openstack.nose_plugin` #. Install anything else you want, like screen, ssh, vim, etc. * On Fedora, log in as root and do: @@ -41,6 +42,7 @@ Installing dependencies and the core code #. `yum install xinetd rsync` #. `yum install memcached` #. `yum install python-netifaces python-nose` + #. `pip install openstack.nose_plugin` This installs all necessary dependencies, and also creates user `swift` and group `swift`. So, `swift:swift` ought to be used in every place where diff --git a/setup.cfg b/setup.cfg index 50cfaf10fc..03e89ab4ef 100644 --- a/setup.cfg +++ b/setup.cfg @@ -21,3 +21,13 @@ input_file = locale/swift.pot keywords = _ l_ lazy_gettext mapping_file = babel.cfg output_file = locale/swift.pot + +[nosetests] +exe=1 +verbosity=2 +detailed-errors=1 +with-openstack=1 +openstack-red=0.05 +openstack-yellow=0.025 +openstack-show-elapsed=1 +openstack-color=1 diff --git a/swift/common/middleware/formpost.py b/swift/common/middleware/formpost.py index d52653300e..dfef637730 100644 --- a/swift/common/middleware/formpost.py +++ b/swift/common/middleware/formpost.py @@ -258,7 +258,7 @@ class _CappedFileLikeObject(object): EOFError. """ - def __init__(self, fp, max_file_size): + def __init__(self, fp, max_file_size): self.fp = fp self.max_file_size = max_file_size self.amount_read = 0 diff --git a/tools/pip-requires b/tools/pip-requires new file mode 100644 index 0000000000..f9ea5f2412 --- /dev/null +++ b/tools/pip-requires @@ -0,0 +1,8 @@ +WebOb==1.0.8 +configobj==4.7.1 +eventlet==0.9.15 +greenlet==0.3.1 +netifaces==0.6 +pastedeploy==1.3.3 +simplejson==2.0.9 +xattr==0.4 diff --git a/tools/test-requires b/tools/test-requires new file mode 100644 index 0000000000..8be4eb9da9 --- /dev/null +++ b/tools/test-requires @@ -0,0 +1,5 @@ +coverage +nose +nosexcover +openstack.nose_plugin +pep8==0.6.1 diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000000..c9afb3534d --- /dev/null +++ b/tox.ini @@ -0,0 +1,41 @@ +[tox] +envlist = py26,py27,pep8 + +[testenv] +deps = + -r{toxinidir}/tools/pip-requires + -r{toxinidir}/tools/test-requires +commands = nosetests test/unit [] + +[testenv:pep8] +deps = pep8==0.6.1 +commands = + pep8 --repeat --show-pep8 --show-source --ignore=W602 swift tools setup.py + +[testenv:cover] +commands = + coverage erase + nosetests test/unit --with-coverage --cover-html --cover-erase \ + --cover-package=swift + /bin/rm -f .coverage + +[testenv:hudson] +downloadcache = ~/cache/pip + +[testenv:jenkins26] +basepython = python2.6 +deps = file://{toxinidir}/.cache.bundle + +[testenv:jenkins27] +basepython = python2.7 +deps = file://{toxinidir}/.cache.bundle + +[testenv:jenkinspep8] +deps = file://{toxinidir}/.cache.bundle +commands = + pep8 --repeat --show-pep8 --show-source --ignore=W602 swift tools setup.py + +[testenv:jenkinscover] +deps = file://{toxinidir}/.cache.bundle +commands = + nosetests test/unit --with-xcoverage --cover-erase --cover-package=swift