summaryrefslogtreecommitdiff
path: root/run_tests.sh
diff options
context:
space:
mode:
authorJohn Griffith <john.griffith@solidfire.com>2013-05-31 13:42:17 -0600
committerJohn Griffith <john.griffith@solidfire.com>2013-05-31 13:45:13 -0600
commit2e58e73a0cdfae43ca206abcc1de0743324d8b68 (patch)
treec86b1e0676b4d230742bce7ce9c4ba85923d3001 /run_tests.sh
parentbde6efb65c8a7b2e0bc08e6d9f187e5654cfba22 (diff)
downloadpython-cinderclient-2e58e73a0cdfae43ca206abcc1de0743324d8b68.tar.gz
Update run_tests and bring back colorizer.
This patch adds output of tests and their results to run_tests.sh. It also brings back colorizer to the output and updates the test-requirements. Should align with cinder changes that are in progress at: https://review.openstack.org/#/c/30291/ Change-Id: I3df6d861f4b4d4355464ceb2d507e69bcf682fbe
Diffstat (limited to 'run_tests.sh')
-rwxr-xr-xrun_tests.sh148
1 files changed, 104 insertions, 44 deletions
diff --git a/run_tests.sh b/run_tests.sh
index bbee9fc..3299a30 100755
--- a/run_tests.sh
+++ b/run_tests.sh
@@ -4,17 +4,27 @@ set -eu
function usage {
echo "Usage: $0 [OPTION]..."
- echo "Run python-cinderclient test suite"
+ echo "Run cinderclient's test suite(s)"
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 " -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 " -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 " -r, --recreate-db Recreate the test database (deprecated, as this is now the default)."
+ echo " -n, --no-recreate-db Don't recreate the test database."
+ echo " -f, --force Force a clean re-build of the virtual environment. Useful when dependencies have been added."
+ echo " -u, --update Update the virtual environment with any newer package versions"
+ echo " -p, --pep8 Just run PEP8 and HACKING compliance check"
+ echo " -P, --no-pep8 Don't run static code checks"
+ echo " -c, --coverage Generate coverage report"
+ echo " -d, --debug Run tests with testtools instead of testr. This allows you to use the debugger."
+ 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 " --virtual-env-path <path> Location of the virtualenv directory"
+ echo " Default: \$(pwd)"
+ echo " --virtual-env-name <name> Name of the virtualenv directory"
+ echo " Default: .venv"
+ echo " --tools-path <dir> Location of the tools directory"
+ echo " Default: \$(pwd)"
echo ""
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 "
@@ -22,23 +32,44 @@ function usage {
exit
}
-function process_option {
- case "$1" in
- -h|--help) usage;;
- -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;;
- -d|--debug) debug=1;;
- -*) testropts="$testropts $1";;
- *) testrargs="$testrargs $1"
- esac
+function process_options {
+ i=1
+ while [ $i -le $# ]; do
+ case "${!i}" in
+ -h|--help) usage;;
+ -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;;
+ -r|--recreate-db) recreate_db=1;;
+ -n|--no-recreate-db) recreate_db=0;;
+ -f|--force) force=1;;
+ -u|--update) update=1;;
+ -p|--pep8) just_pep8=1;;
+ -P|--no-pep8) no_pep8=1;;
+ -c|--coverage) coverage=1;;
+ -d|--debug) debug=1;;
+ --virtual-env-path)
+ (( i++ ))
+ venv_path=${!i}
+ ;;
+ --virtual-env-name)
+ (( i++ ))
+ venv_dir=${!i}
+ ;;
+ --tools-path)
+ (( i++ ))
+ tools_path=${!i}
+ ;;
+ -*) testropts="$testropts ${!i}";;
+ *) testrargs="$testrargs ${!i}"
+ esac
+ (( i++ ))
+ done
}
-venv=.venv
+tool_path=${tools_path:-$(pwd)}
+venv_path=${venv_path:-$(pwd)}
+venv_dir=${venv_name:-.venv}
with_venv=tools/with_venv.sh
always_venv=0
never_venv=0
@@ -52,14 +83,20 @@ just_pep8=0
no_pep8=0
coverage=0
debug=0
+recreate_db=1
+update=0
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_ALL=C
-for arg in "$@"; do
- process_option $arg
-done
+process_options $@
+# Make our paths available to other scripts we call
+export venv_path
+export venv_dir
+export venv_name
+export tools_dir
+export venv=${venv_path}/${venv_dir}
if [ $no_site_packages -eq 1 ]; then
installvenvopts="--no-site-packages"
@@ -90,22 +127,40 @@ function run_tests {
fi
if [ $coverage -eq 1 ]; then
- # Do not test test_coverage_ext when gathering coverage.
- if [ "x$testrargs" = "x" ]; then
- testrargs="^(?!.*test_coverage_ext).*$"
- fi
- export PYTHON="${wrapper} coverage run --source cinderclient --parallel-mode"
+ TESTRTESTS="$TESTRTESTS --coverage"
+ else
+ TESTRTESTS="$TESTRTESTS"
fi
+
# Just run the test suites in current environment
set +e
- TESTRTESTS="$TESTRTESTS $testrargs"
+ testrargs=`echo "$testrargs" | sed -e's/^\s*\(.*\)\s*$/\1/'`
+ TESTRTESTS="$TESTRTESTS --testr-args='--subunit $testropts $testrargs'"
+ if [ setup.cfg -nt cinderclient.egg-info/entry_points.txt ]
+ then
+ ${wrapper} python setup.py egg_info
+ fi
echo "Running \`${wrapper} $TESTRTESTS\`"
- ${wrapper} $TESTRTESTS
+ if ${wrapper} which subunit-2to1 2>&1 > /dev/null
+ then
+ # subunit-2to1 is present, testr subunit stream should be in version 2
+ # format. Convert to version one before colorizing.
+ bash -c "${wrapper} $TESTRTESTS | ${wrapper} subunit-2to1 | ${wrapper} tools/colorizer.py"
+ else
+ bash -c "${wrapper} $TESTRTESTS | ${wrapper} tools/colorizer.py"
+ fi
RESULT=$?
set -e
copy_subunit_log
+ if [ $coverage -eq 1 ]; then
+ echo "Generating coverage report in covhtml/"
+ # Don't compute coverage for common code, which is tested elsewhere
+ ${wrapper} coverage combine
+ ${wrapper} coverage html --include='cinderclient/*' --omit='cinderclient/openstack/common/*' -d covhtml -i
+ fi
+
return $RESULT
}
@@ -118,10 +173,11 @@ function copy_subunit_log {
function run_pep8 {
echo "Running flake8 ..."
- ${wrapper} flake8
+ bash -c "${wrapper} flake8"
}
-TESTRTESTS="testr run --parallel $testropts"
+
+TESTRTESTS="python setup.py testr"
if [ $never_venv -eq 0 ]
then
@@ -130,6 +186,10 @@ then
echo "Cleaning virtualenv..."
rm -rf ${venv}
fi
+ if [ $update -eq 1 ]; then
+ echo "Updating virtualenv..."
+ python tools/install_venv.py $installvenvopts
+ fi
if [ -e ${venv} ]; then
wrapper="${with_venv}"
else
@@ -159,19 +219,19 @@ if [ $just_pep8 -eq 1 ]; then
exit
fi
+if [ $recreate_db -eq 1 ]; then
+ rm -f tests.sqlite
+fi
+
init_testr
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.
+# not when we're running tests individually. To handle this, we need to
+# distinguish between options (testropts), which begin with a '-', and
+# arguments (testrargs).
if [ -z "$testrargs" ]; then
if [ $no_pep8 -eq 0 ]; then
run_pep8
fi
fi
-
-if [ $coverage -eq 1 ]; then
- echo "Generating coverage report in covhtml/"
- ${wrapper} coverage combine
- ${wrapper} coverage html --include='cinderclient/*' --omit='cinderclient/openstack/common/*' -d covhtml -i
-fi