8ba6c8ffe8
This allows functional tests to be written for each individual template. See the test_Wordpress_Single_Instance for an example, but the basic form to follow is: import util def test_template(): func_utils = util.FuncUtils() func_utils.create_stack(template, 'F17') func_utils.check_cfntools() func_utils.wait_for_provisioning() func_utils.check_user_data(template) ssh = func_utils.get_ssh_client() # test stuff here func_utils.cleanup() Functional test changes: Changed jeos creation to use new tool. Added distribution to heat stack creation. Improved IP parsing from glance. Improve SSH connection exception handling. Changed cfntools SHA check to match installed copy instead of locally. Fixed stack parsing to check correct file and handle user-data injection. Clean up run_tests a little to make it clear default execution is on host. Add a short option for unit test running only (may be important due to not wanting to run functional tests locally). Also added paramiko to test-requires. Change-Id: Ib2ae1be32801cb0ee3d1937c4f82ab9f574b4591 Signed-off-by: Jeff Peeler <jpeeler@redhat.com>
121 lines
3.3 KiB
Bash
Executable File
121 lines
3.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
function usage {
|
|
echo "Usage: $0 [OPTION]..."
|
|
echo "Run Heat'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 (default)"
|
|
echo " -f, --force Force a clean re-build of the virtual environment. Useful when dependencies have been added."
|
|
echo " -u, --unittests-only Run unit tests only."
|
|
echo " -p, --pep8 Just run pep8"
|
|
echo " -P, --no-pep8 Don't run static code checks"
|
|
echo " -c, --coverage Generate coverage report"
|
|
echo " -h, --help Print this usage message"
|
|
exit
|
|
}
|
|
|
|
function process_option {
|
|
case "$1" in
|
|
-V|--virtual-env) let always_venv=1; let never_venv=0;;
|
|
-N|--no-virtual-env) let always_venv=0; let never_venv=1;;
|
|
-f|--force) let force=1;;
|
|
-u|--unittests-only) noseargs="$noseargs -a tag=unit";;
|
|
-p|--pep8) let just_pep8=1;;
|
|
-P|--no-pep8) no_pep8=1;;
|
|
-c|--coverage) coverage=1;;
|
|
-h|--help) usage;;
|
|
*) noseargs="$noseargs $1"
|
|
esac
|
|
}
|
|
|
|
venv=.venv
|
|
with_venv=tools/with_venv.sh
|
|
# change usage text if this option is changed:
|
|
always_venv=0
|
|
never_venv=1
|
|
force=0
|
|
noseargs=
|
|
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=heat"
|
|
fi
|
|
|
|
NOSETESTS="python heat/testing/runner.py $noseopts $noseargs"
|
|
|
|
function run_tests {
|
|
echo 'Running tests'
|
|
# Just run the test suites in current environment
|
|
${wrapper} $NOSETESTS 2> run_tests.err.log
|
|
}
|
|
|
|
function run_pep8 {
|
|
echo "Running pep8 ..."
|
|
PEP8_OPTIONS="--exclude=$PEP8_EXCLUDE --repeat"
|
|
PEP8_INCLUDE="bin/heat bin/heat-boto bin/heat-api bin/heat-engine heat tools setup.py heat/testing/runner.py"
|
|
${wrapper} pep8 $PEP8_OPTIONS $PEP8_INCLUDE
|
|
}
|
|
|
|
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
|
|
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
|
|
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
|
|
run_pep8
|
|
exit
|
|
fi
|
|
|
|
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 [ $coverage -eq 1 ]; then
|
|
echo "Generating coverage report in covhtml/"
|
|
# Don't compute coverage for common code, which is tested elsewhere
|
|
${wrapper} coverage html --include='heat/*' --omit='heat/openstack/common/*' -d covhtml -i
|
|
fi
|