summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docker/Dockerfile2
-rwxr-xr-xdocker/prepare_env.sh48
-rwxr-xr-xdocker/run_tests.sh198
-rw-r--r--testcases/VIM/OpenStack/CI/libraries/run_tempest.py7
-rwxr-xr-xtestcases/config_functest.py17
-rw-r--r--testcases/config_functest.yaml2
6 files changed, 178 insertions, 96 deletions
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 53cfe15f0..59a262d20 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -55,3 +55,5 @@ RUN git clone https://github.com/openstack/rally.git ${repos_dir}/rally
RUN git clone https://github.com/opendaylight/integration.git ${repos_dir}/odl_integration
RUN pip install -r ${repos_dir}/functest/docker/requirements.pip
+
+ADD http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img /home/opnfv/functest/data/
diff --git a/docker/prepare_env.sh b/docker/prepare_env.sh
index eaa9b4f00..42b1e1c43 100755
--- a/docker/prepare_env.sh
+++ b/docker/prepare_env.sh
@@ -7,15 +7,47 @@
# and run the tests automatically
#
+usage="Script to prepare the Functest environment.
+
+usage:
+ bash $(basename "$0") [--offline] [-h|--help] [-t <test_name>]
+
+where:
+ -o|--offline optional offline mode (experimental)
+ -h|--help show this help text
+
+examples:
+ $(basename "$0")
+ $(basename "$0") --offline"
+
+offline=false
+
+# Parse parameters
+while [[ $# > 0 ]]
+ do
+ key="$1"
+ case $key in
+ -h|--help)
+ echo "$usage"
+ exit 0
+ shift
+ ;;
+ -o|--offline)
+ offline=true
+ ;;
+ *)
+ error "unknown option $1"
+ exit 1
+ ;;
+ esac
+ shift # past argument or value
+done
+
BASEDIR=`dirname $0`
source ${BASEDIR}/common.sh
# Support for Functest offline
# NOTE: Still not 100% working when running the tests
-offline=false
-if [ ! -z "$1" ] && [ $1 == "--offline" ]; then
- offline=true
-fi
info "######### Preparing Functest environment #########"
if [ $offline == false ]; then
@@ -86,8 +118,6 @@ mkdir -p ${FUNCTEST_CONF_DIR}
mkdir -p ${FUNCTEST_DATA_DIR}
mkdir -p ${FUNCTEST_RESULTS_DIR}/ODL
-# Detect type of installer
-# NOTE: this is tricky, since the IPs will have to be the same ALWAYS
# Create Openstack credentials file
@@ -95,7 +125,7 @@ ${REPOS_DIR}/releng/utils/fetch_os_creds.sh -d ${FUNCTEST_CONF_DIR}/openstack.cr
-i ${INSTALLER_TYPE} -a ${INSTALLER_IP}
retval=$?
if [ $retval != 0 ]; then
- echo "Cannot retrieve credentials file from installation. Check logs."
+ error "Cannot retrieve credentials file from installation. Check logs."
exit $retval
fi
@@ -105,11 +135,11 @@ source ${FUNCTEST_CONF_DIR}/openstack.creds
# Prepare Functest Environment
-echo "Functest: prepare Functest environment"
+info "Functest: prepare Functest environment"
python ${FUNCTEST_REPO_DIR}/testcases/config_functest.py --debug ${FUNCTEST_REPO_DIR}/ start
retval=$?
if [ $retval != 0 ]; then
- echo "Error when configuring Functest environment"
+ error "Error when configuring Functest environment"
exit $retval
fi
diff --git a/docker/run_tests.sh b/docker/run_tests.sh
index ef3125fc3..c794d3bff 100755
--- a/docker/run_tests.sh
+++ b/docker/run_tests.sh
@@ -7,91 +7,147 @@
# and run the tests automatically
#
-BASEDIR=`dirname $0`
-source ${BASEDIR}/common.sh
+usage="Script to trigger the tests automatically.
+
+usage:
+ bash $(basename "$0") [--offline] [-h|--help] [-t <test_name>]
+
+where:
+ -o|--offline optional offline mode (experimental)
+ -h|--help show this help text
+ -t|--test run specific set of tests
+ <test_name> one or more of the following: vping,odl,rally,tempest. Separated by comma.
+
+
+examples:
+ $(basename "$0")
+ $(basename "$0") --test vping,odl
+ $(basename "$0") --offline -t tempest,rally"
-if [ ! -f ${FUNCTEST_CONF_DIR}/env_active ]; then
- error "The Functest environment is not installed. \
- Please run prepare_env.sh before running this script...."
-fi
# Support for Functest offline
# NOTE: Still not 100% working when running the tests
offline=false
-if [ ! -z "$1" ] && [ $1 == "--offline" ]; then
- offline=true
-fi
+arr_test=(vping odl rally tempest)
+
+
+function run_test(){
+ test_name=$1
+ echo "----------------------------------------------"
+ echo "------------- Running $i test case "
+ echo "----------------------------------------------"
+ case $test_name in
+ "vping")
+ info "Running vPing test..."
+ python ${FUNCTEST_REPO_DIR}/testcases/vPing/CI/libraries/vPing.py --debug ${FUNCTEST_REPO_DIR}/ -r
+ ;;
+ "odl")
+ info "Running ODL test..."
+ if [ $INSTALLER_TYPE == "fuel" ]; then
+ odl_ip=$(keystone catalog --service network | grep publicURL | cut -f3 -d"/" | cut -f1 -d":")
+ neutron_ip=$(keystone catalog --service identity | grep publicURL | cut -f3 -d"/" | cut -f1 -d":")
+ usr_name=$(env | grep OS | grep OS_USERNAME | cut -f2 -d'=')
+ pass=$(env | grep OS | grep OS_PASSWORD | cut -f2 -d'=')
+ odl_port=8181
+ ODL_PORT=$odl_port ODL_IP=$odl_ip NEUTRON_IP=$neutron_ip USR_NAME=$usr_name PASS=$pass \
+ ${FUNCTEST_REPO_DIR}/testcases/Controllers/ODL/CI/start_tests.sh
+ elif [ $INSTALLER_TYPE == "foreman" ]; then
+ #odl_port=8081
+ ${FUNCTEST_REPO_DIR}/testcases/Controllers/ODL/CI/start_tests.sh
+ else
+ error "INSTALLER_TYPE not valid."
+ exit 1
+ fi
+ # save ODL results
+ odl_logs="${FUNCTEST_REPO_DIR}/testcases/Controllers/ODL/CI/logs"
+ if [ -d ${odl_logs} ]; then
+ cp -Rf ${odl_logs} ${FUNCTEST_CONF_DIR}/ODL/
+ fi
+ ;;
+ "rally")
+ info "Running Rally benchmark suite..."
+ python ${FUNCTEST_REPO_DIR}/testcases/VIM/OpenStack/CI/libraries/run_rally.py --debug ${FUNCTEST_REPO_DIR}/ all
+ ;;
+ "tempest")
+ info "Running Tempest smoke tests..."
+ rally verify start smoke
+ rally verify list
+ # save tempest.conf for further troubleshooting
+ tempest_conf="${RALLY_VENV_DIR}/tempest/for-deployment-*/tempest.conf"
+ if [ -f ${tempest_conf} ]; then
+ cp $tempest_conf ${FUNCTEST_CONF_DIR}
+ fi
+ ;;
+ esac
+}
+
+
+# Parse parameters
+while [[ $# > 0 ]]
+ do
+ key="$1"
+ case $key in
+ -h|--help)
+ echo "$usage"
+ exit 0
+ shift
+ ;;
+ -o|--offline)
+ offline=true
+ ;;
+ -t|--tests)
+ TEST="$2"
+ shift
+ ;;
+ *)
+ echo "unknown option $1 $2"
+ exit 1
+ ;;
+ esac
+ shift # past argument or value
+done
+BASEDIR=`dirname $0`
+source ${BASEDIR}/common.sh
-# Source credentials
-info "Sourcing Credentials ${FUNCTEST_CONF_DIR}/openstack.creds again to run the tests.."
-source ${FUNCTEST_CONF_DIR}/openstack.creds
+# Check that the given tests are correct
+if [ "${TEST}" != "" ]; then
+ arr_test_exec=(${TEST//,/ })
+ for i in "${arr_test_exec[@]}"; do
+ if [[ " ${arr_test[*]} " != *" $i "* ]]; then
+ error "Unknown test: $i. Available tests are: ${arr_test[@]}"
+ fi
+ done
+ info "Tests to execute: ${TEST}."
+fi
-# vPing
-echo "----------------------------------------------"
-echo "---------- Running vPING test case ----------"
-echo "----------------------------------------------"
-info "Running vPing"
-python ${FUNCTEST_REPO_DIR}/testcases/vPing/CI/libraries/vPing.py --debug ${FUNCTEST_REPO_DIR}/ -r
-
-
-
-# ODL
-echo "----------------------------------------------"
-echo "----------- Running ODL test case -----------"
-echo "----------------------------------------------"
-info "Functest: run ODL suite"
-if [ $INSTALLER_TYPE == "fuel" ]; then
- odl_ip=$(keystone catalog --service network | grep publicURL | cut -f3 -d"/" | cut -f1 -d":")
- neutron_ip=$(keystone catalog --service identity | grep publicURL | cut -f3 -d"/" | cut -f1 -d":")
- usr_name=$(env | grep OS | grep OS_USERNAME | cut -f2 -d'=')
- pass=$(env | grep OS | grep OS_PASSWORD | cut -f2 -d'=')
- odl_port=8181
- ODL_PORT=$odl_port ODL_IP=$odl_ip NEUTRON_IP=$neutron_ip USR_NAME=$usr_name PASS=$pass \
- ${FUNCTEST_REPO_DIR}/testcases/Controllers/ODL/CI/start_tests.sh
-elif [ $INSTALLER_TYPE == "foreman" ]; then
- #odl_port=8081
- ${FUNCTEST_REPO_DIR}/testcases/Controllers/ODL/CI/start_tests.sh
+if [ $offline == false ]; then
+ info "MODE: online"
else
- error "INSTALLER_TYPE not valid."
- exit 1
+ info "MODE: offline"
fi
+# Check that the functest environment has been installed
+if [ ! -f ${FUNCTEST_CONF_DIR}/env_active ]; then
+ error "The Functest environment is not installed. \
+ Please run prepare_env.sh before running this script...."
+fi
-# rally
-echo "----------------------------------------------"
-echo "--------- Running Rally bench suite ---------"
-echo "----------------------------------------------"
-info "Running Rally Bench suites"
-python ${FUNCTEST_REPO_DIR}/testcases/VIM/OpenStack/CI/libraries/run_rally.py --debug ${FUNCTEST_REPO_DIR}/ all
-
-
-
-# tempest
-echo "----------------------------------------------"
-echo "-------- Running Tempest smoke tests --------"
-echo "----------------------------------------------"
-info "Running Tempest suite..."
-rally verify start smoke
-rally verify list
-
-
-
-
-# collect results
-# NOTE: To be removed when all the resuls are pushed to the DB
-info "Functest: copy results and clean Functest environment"
+# Source credentials
+info "Sourcing Credentials ${FUNCTEST_CONF_DIR}/openstack.creds to run the tests.."
+source ${FUNCTEST_CONF_DIR}/openstack.creds
-# save ODL results
-odl_logs="${FUNCTEST_REPO_DIR}/testcases/Controllers/ODL/CI/logs"
-if [ -d ${tempest_conf} ]; then
- cp -Rf ${odl_logs} ${FUNCTEST_CONF_DIR}/ODL/
-fi
-# save tempest.conf for further troubleshooting
-tempest_conf="${RALLY_VENV_DIR}/tempest/for-deployment-*/tempest.conf"
-if [ -f ${tempest_conf} ]; then
- cp $tempest_conf ${FUNCTEST_CONF_DIR}
+# Run tests
+if [ "${TEST}" != "" ]; then
+ for i in "${arr_test_exec[@]}"; do
+ run_test $i
+ done
+else
+ info "Executing all the tests"
+ for i in "${arr_test[@]}"; do
+ run_test $i
+ done
fi
diff --git a/testcases/VIM/OpenStack/CI/libraries/run_tempest.py b/testcases/VIM/OpenStack/CI/libraries/run_tempest.py
index 8a417ccfc..8ad62d15e 100644
--- a/testcases/VIM/OpenStack/CI/libraries/run_tempest.py
+++ b/testcases/VIM/OpenStack/CI/libraries/run_tempest.py
@@ -120,9 +120,14 @@ def run_tempest(OPTION):
num_failures = output[5]
time_start = output[6]
duration = output[7]
+ # Compute duration (lets assume it does not take more than 60 min)
+ dur_min=int(duration.split(':')[1])
+ dur_sec_float=float(duration.split(':')[2])
+ dur_sec_int=int(round(dur_sec_float,0))
+ dur_sec_int = dur_sec_int + 60 * dur_min
# Generate json results for DB
- json_results = {"timestart": time_start, "duration": duration,
+ json_results = {"timestart": time_start, "duration": dur_sec_int,
"tests": int(num_tests), "failures": int(num_failures)}
logger.info("Results: "+str(json_results))
push_results_to_db(json_results, MODE, "opnfv-jump-2")
diff --git a/testcases/config_functest.py b/testcases/config_functest.py
index c509d3d12..8523a77f4 100755
--- a/testcases/config_functest.py
+++ b/testcases/config_functest.py
@@ -58,18 +58,17 @@ RALLY_INSTALLATION_DIR = functest_yaml.get("general").get("directories").get("di
RALLY_RESULT_DIR = functest_yaml.get("general").get("directories").get("dir_rally_res")
VPING_DIR = REPO_PATH + functest_yaml.get("general").get("directories").get("dir_vping")
ODL_DIR = REPO_PATH + functest_yaml.get("general").get("directories").get("dir_odl")
-IMAGE_DIR = functest_yaml.get("general").get("directories").get("dir_functest_data")
+DATA_DIR = functest_yaml.get("general").get("directories").get("dir_functest_data")
# Tempest/Rally configuration details
DEPLOYMENT_MAME = "opnfv-rally"
RALLY_COMMIT = functest_yaml.get("general").get("openstack").get("rally_stable_commit")
#GLANCE image parameters
-IMAGE_URL = functest_yaml.get("general").get("openstack").get("image_url")
+IMAGE_FILE_NAME = functest_yaml.get("general").get("openstack").get("image_file_name")
IMAGE_DISK_FORMAT = functest_yaml.get("general").get("openstack").get("image_disk_format")
IMAGE_NAME = functest_yaml.get("general").get("openstack").get("image_name")
-IMAGE_FILE_NAME = IMAGE_URL.rsplit('/')[-1]
-IMAGE_PATH = IMAGE_DIR + "/" + IMAGE_FILE_NAME
+IMAGE_PATH = DATA_DIR + "/" + IMAGE_FILE_NAME
def action_start():
@@ -106,12 +105,6 @@ def action_start():
if not os.path.exists(RALLY_RESULT_DIR):
os.makedirs(RALLY_RESULT_DIR)
- logger.info("Downloading image...")
- if not functest_utils.download_url(IMAGE_URL, IMAGE_DIR):
- logger.error("There has been a problem downloading the image '%s'." %IMAGE_URL)
- action_clean()
- exit(-1)
-
logger.info("Creating Glance image: %s ..." %IMAGE_NAME)
if not create_glance_image(IMAGE_PATH,IMAGE_NAME,IMAGE_DISK_FORMAT):
logger.error("There has been a problem while creating the Glance image.")
@@ -194,10 +187,6 @@ def action_clean():
logger.debug("Removing Rally installation directory %s" % RALLY_INSTALLATION_DIR)
shutil.rmtree(RALLY_INSTALLATION_DIR,ignore_errors=True)
- if os.path.exists(IMAGE_PATH):
- logger.debug("Deleting image")
- os.remove(IMAGE_PATH)
-
cmd = "glance image-list | grep "+IMAGE_NAME+" | cut -c3-38"
p = os.popen(cmd,"r")
diff --git a/testcases/config_functest.yaml b/testcases/config_functest.yaml
index 92eb769e0..03835158d 100644
--- a/testcases/config_functest.yaml
+++ b/testcases/config_functest.yaml
@@ -32,7 +32,7 @@ general:
openstack:
image_name: functest-img
- image_url: http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
+ image_file_name: cirros-0.3.4-x86_64-disk.img
image_disk_format: qcow2