Skip to content

Commit

Permalink
Clean up test environment and remove unused imports.
Browse files Browse the repository at this point in the history
First round of adding more complete unit test coverage.

Change-Id: Ic1979c499ca6fcb784892a95954a3527539c4e53
  • Loading branch information
jk0 committed Jan 22, 2013
1 parent 089f4cf commit c1ea298
Show file tree
Hide file tree
Showing 15 changed files with 377 additions and 57 deletions.
2 changes: 2 additions & 0 deletions .mailmap
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<[email protected]> <[email protected]>
<[email protected]> <[email protected]>
1 change: 0 additions & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,6 @@ Additional command-line options and their associated environment variables
are listed here::

--debug # turns on some debugging of the API conversation
(via httplib2)
--verbose | -v # Increase verbosity of output. Can be repeated.
--quiet | -q # suppress output except warnings and errors
--help | -h # show a help message and exit
Expand Down
1 change: 0 additions & 1 deletion openstackclient/common/clientmanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@

import logging

from openstackclient.common import exceptions as exc
from openstackclient.compute import client as compute_client
from openstackclient.identity import client as identity_client
from openstackclient.image import client as image_client
Expand Down
1 change: 0 additions & 1 deletion openstackclient/common/openstackkeyring.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@

from Crypto.Cipher import AES

import crypt
import keyring
import os

Expand Down
2 changes: 0 additions & 2 deletions openstackclient/common/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@
import sys
import uuid

import prettytable

from openstackclient.common import exceptions


Expand Down
1 change: 0 additions & 1 deletion openstackclient/compute/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@

import logging

from openstackclient.common import exceptions as exc
from openstackclient.common import utils

LOG = logging.getLogger(__name__)
Expand Down
1 change: 0 additions & 1 deletion openstackclient/compute/v2/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@

import logging
import os
import sys
import time

from cliff import command
Expand Down
1 change: 0 additions & 1 deletion openstackclient/identity/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@

import logging

from openstackclient.common import exceptions as exc
from openstackclient.common import utils

LOG = logging.getLogger(__name__)
Expand Down
4 changes: 0 additions & 4 deletions openstackclient/openstack/common/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,6 @@ def parse_requirements(requirements_files=['requirements.txt',
# -f lines are for index locations, and don't get used here
elif re.match(r'\s*-f\s+', line):
pass
# argparse is part of the standard library starting with 2.7
# adding it to the requirements list screws distro installs
elif line == 'argparse' and sys.version_info >= (2, 7):
pass
else:
requirements.append(line)

Expand Down
147 changes: 125 additions & 22 deletions run_tests.sh
Original file line number Diff line number Diff line change
@@ -1,49 +1,152 @@
#!/bin/bash

set -eu

function usage {
echo "Usage: $0 [OPTION]..."
echo "Run python-openstackclient's test suite(s)"
echo "Run python-openstackclient test suite"
echo ""
echo " -V, --virtual-env Always use virtualenv. Install automatically if not present"
echo " -N, --no-virtual-env Don't use virtualenv. Run tests in local environment"
echo " -s, --no-site-packages Isolate the virtualenv from the global Python environment"
echo " -x, --stop Stop running tests after the first error or failure."
echo " -f, --force Force a clean re-build of the virtual environment. Useful when dependencies have been added."
echo " -p, --pep8 Just run pep8"
echo " -P, --no-pep8 Don't run pep8"
echo " -c, --coverage Generate coverage report"
echo " -h, --help Print this usage message"
echo " --hide-elapsed Don't print the elapsed time for each test along with slow test list"
echo ""
echo "This script is deprecated and currently retained for compatibility."
echo 'You can run the full test suite for multiple environments by running "tox".'
echo 'You can run tests for only python 2.7 by running "tox -e py27", or run only'
echo 'the pep8 tests with "tox -e pep8".'
echo "Note: with no options specified, the script will try to run the tests in a virtual environment,"
echo " If no virtualenv is found, the script will ask if you would like to create one. If you "
echo " prefer to run tests NOT in a virtual environment, simply pass the -N option."
exit
}

command -v tox > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo 'This script requires "tox" to run.'
echo 'You can install it with "pip install tox".'
exit 1;
fi

just_pep8=0

function process_option {
case "$1" in
-h|--help) usage;;
-p|--pep8) let just_pep8=1;;
-V|--virtual-env) always_venv=1; never_venv=0;;
-N|--no-virtual-env) always_venv=0; never_venv=1;;
-s|--no-site-packages) no_site_packages=1;;
-f|--force) force=1;;
-p|--pep8) just_pep8=1;;
-P|--no-pep8) no_pep8=1;;
-c|--coverage) coverage=1;;
-*) noseopts="$noseopts $1";;
*) noseargs="$noseargs $1"
esac
}

venv=.venv
with_venv=tools/with_venv.sh
always_venv=0
never_venv=0
force=0
no_site_packages=0
installvenvopts=
noseargs=
noseopts=
wrapper=""
just_pep8=0
no_pep8=0
coverage=0

for arg in "$@"; do
process_option $arg
done

# If enabled, tell nose to collect coverage data
if [ $coverage -eq 1 ]; then
noseopts="$noseopts --with-coverage --cover-package=openstackclient"
fi

if [ $no_site_packages -eq 1 ]; then
installvenvopts="--no-site-packages"
fi

function run_tests {
# Just run the test suites in current environment
${wrapper} $NOSETESTS
# If we get some short import error right away, print the error log directly
RESULT=$?
return $RESULT
}

function run_pep8 {
echo "Running pep8 ..."
srcfiles="openstackclient tests"
# Just run PEP8 in current environment
#
# NOTE(sirp): W602 (deprecated 3-arg raise) is being ignored for the
# following reasons:
#
# 1. It's needed to preserve traceback information when re-raising
# exceptions; this is needed b/c Eventlet will clear exceptions when
# switching contexts.
#
# 2. There doesn't appear to be an alternative, "pep8-tool" compatible way of doing this
# in Python 2 (in Python 3 `with_traceback` could be used).
#
# 3. Can find no corroborating evidence that this is deprecated in Python 2
# other than what the PEP8 tool claims. It is deprecated in Python 3, so,
# perhaps the mistake was thinking that the deprecation applied to Python 2
# as well.
pep8_opts="--ignore=E202,W602 --repeat"
${wrapper} pep8 ${pep8_opts} ${srcfiles}
}

NOSETESTS="nosetests $noseopts $noseargs"

if [ $never_venv -eq 0 ]
then
# Remove the virtual environment if --force used
if [ $force -eq 1 ]; then
echo "Cleaning virtualenv..."
rm -rf ${venv}
fi
if [ -e ${venv} ]; then
wrapper="${with_venv}"
else
if [ $always_venv -eq 1 ]; then
# Automatically install the virtualenv
python tools/install_venv.py $installvenvopts
wrapper="${with_venv}"
else
echo -e "No virtual environment found...create one? (Y/n) \c"
read use_ve
if [ "x$use_ve" = "xY" -o "x$use_ve" = "x" -o "x$use_ve" = "xy" ]; then
# Install the virtualenv and run the test suite in it
python tools/install_venv.py $installvenvopts
wrapper=${with_venv}
fi
fi
fi
fi

# Delete old coverage data from previous runs
if [ $coverage -eq 1 ]; then
${wrapper} coverage erase
fi

if [ $just_pep8 -eq 1 ]; then
tox -e pep8
exit
run_pep8
exit
fi

tox -e py27 $toxargs 2>&1 | tee run_tests.err.log || exit
if [ ${PIPESTATUS[0]} -ne 0 ]; then
exit ${PIPESTATUS[0]}
run_tests

# NOTE(sirp): we only want to run pep8 when we're running the full-test suite,
# not when we're running tests individually. To handle this, we need to
# distinguish between options (noseopts), which begin with a '-', and
# arguments (noseargs).
if [ -z "$noseargs" ]; then
if [ $no_pep8 -eq 0 ]; then
run_pep8
fi
fi

if [ -z "$toxargs" ]; then
tox -e pep8
if [ $coverage -eq 1 ]; then
echo "Generating coverage report in covhtml/"
${wrapper} coverage html -d covhtml -i
fi
4 changes: 0 additions & 4 deletions tests/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,16 @@

import time

import mox
import testtools


class TestCase(testtools.TestCase):

def setUp(self):
super(TestCase, self).setUp()
self.mox = mox.Mox()
self._original_time = time.time
time.time = lambda: 1234

def tearDown(self):
time.time = self._original_time
self.mox.UnsetStubs()
self.mox.VerifyAll()
super(TestCase, self).tearDown()
Loading

0 comments on commit c1ea298

Please sign in to comment.