blob: a856bb44d97a27b9a1ca1a3489b9103dbd8fab2d [file] [log] [blame]
Attila Fazekas5abb2532012-12-04 11:30:49 +01001#!/usr/bin/env bash
Justin Shepherd0d9bbd12011-08-11 12:57:44 -05002
3function usage {
Jay Pipesf38eaac2012-06-21 13:37:35 -04004 echo "Usage: $0 [OPTION]..."
Matthew Treinish17520e42014-01-05 13:02:23 -05005 echo "Run Tempest unit tests"
Justin Shepherd0d9bbd12011-08-11 12:57:44 -05006 echo ""
Matthew Treinish8e937d72012-12-14 11:11:41 -05007 echo " -V, --virtual-env Always use virtualenv. Install automatically if not present"
8 echo " -N, --no-virtual-env Don't use virtualenv. Run tests in local environment"
Andrea Frittoli1cfbc4a2013-01-31 19:44:10 +00009 echo " -n, --no-site-packages Isolate the virtualenv from the global Python environment"
Matthew Treinish8e937d72012-12-14 11:11:41 -050010 echo " -f, --force Force a clean re-build of the virtual environment. Useful when dependencies have been added."
Matthew Treinish8f42d3b2013-02-15 13:24:05 -050011 echo " -u, --update Update the virtual environment with any newer package versions"
Matthew Treinish49f40362013-08-27 16:02:53 -040012 echo " -t, --serial Run testr serially"
Jay Pipesf38eaac2012-06-21 13:37:35 -040013 echo " -p, --pep8 Just run pep8"
Matthew Treinishab836be2014-01-11 14:34:58 -050014 echo " -c, --coverage Generate coverage report"
Justin Shepherd0d9bbd12011-08-11 12:57:44 -050015 echo " -h, --help Print this usage message"
Matthew Treinish1b1eb642014-01-21 19:38:47 +000016 echo " -d, --debug Run tests with testtools instead of testr. This allows you to use PDB"
Matthew Treinish59eb0b22013-08-07 15:48:21 -040017 echo " -- [TESTROPTIONS] After the first '--' you can pass arbitrary arguments to testr "
Justin Shepherd0d9bbd12011-08-11 12:57:44 -050018}
19
Masayuki Igawaafb11432016-06-02 16:09:50 +090020function deprecation_warning {
21 cat <<EOF
22-------------------------------------------------------------------------
23WARNING: run_tests.sh is deprecated and this script will be removed after
24the Newton release. All tests should be run through testr/ostestr or tox.
25
26To run style checks:
27
28 tox -e pep8
29
30To run python 2.7 unit tests
31
32 tox -e py27
33
34To run unit tests and generate coverage report
35
36 tox -e cover
37
38To run a subset of any of these tests:
39
40 tox -e py27 someregex
41
42 i.e.: tox -e py27 test_servers
43
44Additional tox targets are available in tox.ini. For more information
45see:
46http://docs.openstack.org/project-team-guide/project-setup/python.html
47
48NOTE: if you want to use testr to run tests, you can instead use:
49
50 OS_TEST_PATH=./tempest/tests testr run
51
52Documentation on using testr directly can be found at
53http://testrepository.readthedocs.org/en/latest/MANUAL.html
54-------------------------------------------------------------------------
55EOF
56}
57
Matthew Treinish59eb0b22013-08-07 15:48:21 -040058testrargs=""
Jay Pipesf38eaac2012-06-21 13:37:35 -040059just_pep8=0
ghanshyamf5360ff2015-06-29 13:32:01 +090060venv=${VENV:-.venv}
Matthew Treinish8e937d72012-12-14 11:11:41 -050061with_venv=tools/with_venv.sh
Matthew Treinish49f40362013-08-27 16:02:53 -040062serial=0
Matthew Treinish8e937d72012-12-14 11:11:41 -050063always_venv=0
64never_venv=0
65no_site_packages=0
Matthew Treinish1b1eb642014-01-21 19:38:47 +000066debug=0
Matthew Treinish8e937d72012-12-14 11:11:41 -050067force=0
Matthew Treinishab836be2014-01-11 14:34:58 -050068coverage=0
Matthew Treinish8e937d72012-12-14 11:11:41 -050069wrapper=""
Attila Fazekasa63a9992013-02-14 16:44:37 +010070config_file=""
Matthew Treinish8f42d3b2013-02-15 13:24:05 -050071update=0
Attila Fazekasa63a9992013-02-14 16:44:37 +010072
Masayuki Igawaafb11432016-06-02 16:09:50 +090073deprecation_warning
74
Matthew Treinishab836be2014-01-11 14:34:58 -050075if ! options=$(getopt -o VNnfuctphd -l virtual-env,no-virtual-env,no-site-packages,force,update,serial,coverage,pep8,help,debug -- "$@")
Attila Fazekasa63a9992013-02-14 16:44:37 +010076then
77 # parse error
78 usage
79 exit 1
80fi
81
82eval set -- $options
83first_uu=yes
84while [ $# -gt 0 ]; do
85 case "$1" in
86 -h|--help) usage; exit;;
87 -V|--virtual-env) always_venv=1; never_venv=0;;
88 -N|--no-virtual-env) always_venv=0; never_venv=1;;
89 -n|--no-site-packages) no_site_packages=1;;
90 -f|--force) force=1;;
Matthew Treinish8f42d3b2013-02-15 13:24:05 -050091 -u|--update) update=1;;
Matthew Treinish1b1eb642014-01-21 19:38:47 +000092 -d|--debug) debug=1;;
Attila Fazekasa63a9992013-02-14 16:44:37 +010093 -p|--pep8) let just_pep8=1;;
Matthew Treinishab836be2014-01-11 14:34:58 -050094 -c|--coverage) coverage=1;;
Matthew Treinish49f40362013-08-27 16:02:53 -040095 -t|--serial) serial=1;;
Matthew Treinish59eb0b22013-08-07 15:48:21 -040096 --) [ "yes" == "$first_uu" ] || testrargs="$testrargs $1"; first_uu=no ;;
Matthew Treinisha74f5d42014-02-07 20:25:44 -050097 *) testrargs="$testrargs $1";;
Attila Fazekasa63a9992013-02-14 16:44:37 +010098 esac
99 shift
100done
101
Mitsuhiko Yamazaki46818aa2013-04-18 17:49:17 +0900102
Attila Fazekasa63a9992013-02-14 16:44:37 +0100103cd `dirname "$0"`
Jay Pipesf38eaac2012-06-21 13:37:35 -0400104
Matthew Treinish8e937d72012-12-14 11:11:41 -0500105if [ $no_site_packages -eq 1 ]; then
106 installvenvopts="--no-site-packages"
107fi
Sean Dague422af972012-11-16 07:30:43 -0500108
Matthew Treinish87af1bb2013-06-17 15:29:10 -0400109function testr_init {
110 if [ ! -d .testrepository ]; then
111 ${wrapper} testr init
112 fi
113}
114
Justin Shepherd0d9bbd12011-08-11 12:57:44 -0500115function run_tests {
Matthew Treinish59eb0b22013-08-07 15:48:21 -0400116 testr_init
117 ${wrapper} find . -type f -name "*.pyc" -delete
Matthew Treinish17520e42014-01-05 13:02:23 -0500118 export OS_TEST_PATH=./tempest/tests
Matthew Treinish1b1eb642014-01-21 19:38:47 +0000119 if [ $debug -eq 1 ]; then
120 if [ "$testrargs" = "" ]; then
121 testrargs="discover ./tempest/tests"
122 fi
123 ${wrapper} python -m testtools.run $testrargs
124 return $?
125 fi
126
Matthew Treinish95817e02014-02-11 19:29:48 +0000127 if [ $coverage -eq 1 ]; then
128 ${wrapper} python setup.py test --coverage
129 return $?
130 fi
131
Matthew Treinish49f40362013-08-27 16:02:53 -0400132 if [ $serial -eq 1 ]; then
John Warren26ce9212015-12-03 13:15:05 -0500133 ${wrapper} testr run --subunit $testrargs | ${wrapper} subunit-trace -n -f
Matthew Treinish49f40362013-08-27 16:02:53 -0400134 else
John Warren26ce9212015-12-03 13:15:05 -0500135 ${wrapper} testr run --parallel --subunit $testrargs | ${wrapper} subunit-trace -n -f
Matthew Treinish87af1bb2013-06-17 15:29:10 -0400136 fi
Justin Shepherd0d9bbd12011-08-11 12:57:44 -0500137}
138
Jay Pipesf38eaac2012-06-21 13:37:35 -0400139function run_pep8 {
Kui Shib1b7c712013-08-23 06:40:05 +0800140 echo "Running flake8 ..."
141 if [ $never_venv -eq 1 ]; then
142 echo "**WARNING**:" >&2
143 echo "Running flake8 without virtual env may miss OpenStack HACKING detection" >&2
144 fi
Monty Taylorb2ca5ca2013-04-28 18:00:21 -0700145 ${wrapper} flake8
Jay Pipesf38eaac2012-06-21 13:37:35 -0400146}
147
Matthew Treinish8e937d72012-12-14 11:11:41 -0500148if [ $never_venv -eq 0 ]
149then
150 # Remove the virtual environment if --force used
151 if [ $force -eq 1 ]; then
152 echo "Cleaning virtualenv..."
153 rm -rf ${venv}
154 fi
Matthew Treinish8f42d3b2013-02-15 13:24:05 -0500155 if [ $update -eq 1 ]; then
156 echo "Updating virtualenv..."
Matthew Treinish72e83762016-01-20 20:19:23 -0500157 virtualenv $installvenvopts $venv
158 $venv/bin/pip install -U -r requirements.txt -r test-requirements.txt
Matthew Treinish8f42d3b2013-02-15 13:24:05 -0500159 fi
Matthew Treinish8e937d72012-12-14 11:11:41 -0500160 if [ -e ${venv} ]; then
161 wrapper="${with_venv}"
162 else
163 if [ $always_venv -eq 1 ]; then
164 # Automatically install the virtualenv
Matthew Treinish72e83762016-01-20 20:19:23 -0500165 virtualenv $installvenvopts $venv
Matthew Treinish8e937d72012-12-14 11:11:41 -0500166 wrapper="${with_venv}"
Matthew Treinish72e83762016-01-20 20:19:23 -0500167 ${wrapper} pip install -U -r requirements.txt -r test-requirements.txt
Matthew Treinish8e937d72012-12-14 11:11:41 -0500168 else
169 echo -e "No virtual environment found...create one? (Y/n) \c"
170 read use_ve
171 if [ "x$use_ve" = "xY" -o "x$use_ve" = "x" -o "x$use_ve" = "xy" ]; then
172 # Install the virtualenv and run the test suite in it
Matthew Treinish72e83762016-01-20 20:19:23 -0500173 virtualenv $installvenvopts $venv
Matthew Treinish8e937d72012-12-14 11:11:41 -0500174 wrapper=${with_venv}
Matthew Treinish72e83762016-01-20 20:19:23 -0500175 ${wrapper} pip install -U -r requirements.txt -r test-requirements.txt
Matthew Treinish8e937d72012-12-14 11:11:41 -0500176 fi
177 fi
178 fi
179fi
180
Matthew Treinish0cc26b62013-01-03 18:07:09 -0500181if [ $just_pep8 -eq 1 ]; then
182 run_pep8
183 exit
184fi
185
Matthew Treinish17520e42014-01-05 13:02:23 -0500186run_tests
Giulio Fidente1e50b3b2013-06-03 15:00:54 +0200187retval=$?
Matthew Treinishd15705b2012-10-16 14:04:48 -0400188
Matthew Treinish59eb0b22013-08-07 15:48:21 -0400189if [ -z "$testrargs" ]; then
Giulio Fidente1e50b3b2013-06-03 15:00:54 +0200190 run_pep8
Jay Pipesf38eaac2012-06-21 13:37:35 -0400191fi
Giulio Fidente1e50b3b2013-06-03 15:00:54 +0200192
193exit $retval