interop/tools/consistency.sh
lpiwowar cf024be535 Fix test discovery by checktest.py
Chectest.py wasn't able to catch bug [1] as it didn't take into
consideration inheritance during the test discovery.

The cause of the issue is the fact that chectest.py parsed python files
by itself to discover the tests. This patch fixes this by using unittest
library for test discovery instead.

[1] https://review.opendev.org/c/osf/interop/+/806178

Story: 2009146
Task: 43097
Change-Id: I6e1b11eeb3ca1915ca41b6af88f9f568e6d674eb
2021-09-14 09:44:50 +02:00

120 lines
4.0 KiB
Bash
Executable File

#!/bin/bash
# This script will run consistency checks for Tempest tests against
# the current and next interoperability guidelines. It can run in two
# modes.
#
# * If no arguments are specified, the script will check out Tempest and
# tempest plugins into a temporary directory, run the consistency checks,
# then delete temporary checkout.
#
# * If an argument is given, this script will assume that it is a
# user checked-out repository and run the consistency checks against
# that, and leave the directory unchanged on exit. This mode is useful
# for gate jobs and Tempest/tempest plugin development.
set -x
# Prints help
function usage {
SCRIPT_NAME="basename ${BASH_SOURCE[0]}"
echo "Usage: ${SCRIPT_NAME} [OPTION]..."
echo "Consistency check"
echo ""
echo " -h Print this usage message"
echo " -t Local Tempest directory"
echo " -d Local designate-tempest-plugin directory"
echo " -o Local heat-tempest-plugin directory"
echo " -s Local manila-tempest-plugin directory"
echo " -c Set if tempest and plugins directory should be removed after"
echo " the consistency check"
exit 1
}
while getopts t:d:o:s:ch FLAG; do
case ${FLAG} in
t)
TEMPESTDIR=${OPTARG}
;;
d)
DNSDIR=${OPTARG}
;;
o)
ORCHESTRATIONDIR=${OPTARG}
;;
s)
SFSDIR=${OPTARG}
;;
c)
CLEANTEMPEST=true
;;
h) #show help
usage
;;
\?) #unrecognized option - show help
echo -e \\n"Option -$OPTARG not allowed."
usage
;;
esac
done
# check if a local directory was given (for Tempest or one of the plugins),
# if not, create a temp dir and clone the project there
if [[ -z $TEMPESTDIR ]]; then
TEMPESTDIR=$(mktemp -d)
git clone https://opendev.org/openstack/tempest $TEMPESTDIR
fi
if [[ -z $DNSDIR ]]; then
DNSDIR=$(mktemp -d)
git clone https://opendev.org/openstack/designate-tempest-plugin $DNSDIR
fi
if [[ -z $ORCHESTRATIONDIR ]]; then
ORCHESTRATIONDIR=$(mktemp -d)
git clone https://opendev.org/openstack/heat-tempest-plugin $ORCHESTRATIONDIR
fi
if [[ -z $SFSDIR ]]; then
SFSDIR=$(mktemp -d)
git clone https://opendev.org/openstack/manila-tempest-plugin $SFSDIR
fi
pip install $TEMPESTDIR
pip install $DNSDIR
pip install $ORCHESTRATIONDIR
pip install $SFSDIR
export PYTHONPATH=$TEMPESTDIR:$DNSDIR:$ORCHESTRATIONDIR:$SFSDIR
python3 ./tools/checktests.py --guideline guidelines/next.json
exit_1=$?
# TODO(lpiwowar) The consistency check of designate_tempest_plugin is omitted until
# https://bugs.launchpad.net/designate/+bug/1943115 is fixed.
# python3 ./tools/checktests.py --guideline add-ons/guidelines/dns.next.json --testlib designate_tempest_plugin
# exit_2=$?
python3 ./tools/checktests.py --guideline add-ons/guidelines/shared_file_system.next.json --testlib manila_tempest_tests
exit_3=$?
# TODO(kopecmartin) consistency check of heat_tempest_plugin is omitted intentionally until we improve the
# checktests.py so that it detects ids of the heat_tempest_plugin.api tests which don't use decorator.idempotent_id
# call to track the id
# python3 ./tools/checktests.py --guideline add-ons/guidelines/orchestration.next.json --testlib heat_tempest_plugin
# exit_4=$?
python3 ./tools/checktests.py --guideline current_guideline
exit_5=$?
# python3 ./tools/checktests.py --guideline add-ons/dns_current_guideline --testlib designate_tempest_plugin
# exit_6=$?
python3 ./tools/checktests.py --guideline add-ons/shared_file_system_current_guideline --testlib manila_tempest_tests
exit_7=$?
# python3 ./tools/checktests.py --guideline add-ons/orchestration_current_guideline --testlib heat_tempest_plugin
# exit_8=$?
if [[ "${CLEANTEMPEST}" ]]; then
rm -rf $TEMPESTDIR
rm -rf $DNSDIR
rm -rf $ORCHESTRATIONDIR
rm -rf $SFSDIR
fi
#! (( $exit_1 || $exit_2 || $exit_3 || $exit_4 || $exit_5 || $exit_6 || $exit_7 || $exit_8 ))
! (( $exit_1 || $exit_3 || $exit_5 || $exit_7 ))