From 71d85bca9549348b0c2f486bac58923f299e5a88 Mon Sep 17 00:00:00 2001 From: "jose.lausuch" Date: Wed, 30 Sep 2015 15:29:04 +0200 Subject: Dockerfile for Functest Includes also: - script to trigger Functest automatically within the container - common requirements file to install python modules - added new parameters in the config_functest.yaml - other small adjustements JIRA: FUNCTEST-29 Change-Id: I230631e43e5f7e14938b35903ecec1b17db0f88a Signed-off-by: jose.lausuch --- docker/start.sh | 142 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 docker/start.sh (limited to 'docker/start.sh') diff --git a/docker/start.sh b/docker/start.sh new file mode 100644 index 000000000..bd2308caf --- /dev/null +++ b/docker/start.sh @@ -0,0 +1,142 @@ +#!/bin/bash + +# +# Author: Jose Lausuch (jose.lausuch@ericsson.com) +# +# Installs the Functest framework within the Docker container +# and run the tests automatically +# + + +config_file=$(find / -name config_functest.yaml) + +REPOS_DIR=$(cat $config_file | grep -w dir_repos | awk 'END {print $NF}') +FUNCTEST_REPO_DIR=$(cat $config_file | grep -w dir_repo_functest | awk 'END {print $NF}') +RALLY_REPO_DIR=$(cat $config_file | grep -w dir_repo_rally | awk 'END {print $NF}') +RELENG_REPO_DIR=$(cat $config_file | grep -w dir_repo_releng | awk 'END {print $NF}') + +FUNCTEST_DIR=$(cat $config_file | grep -w dir_functest | awk 'END {print $NF}') +FUNCTEST_RESULTS_DIR=$(cat $config_file | grep -w dir_results | awk 'END {print $NF}') +FUNCTEST_CONF_DIR=$(cat $config_file | grep -w dir_functest_conf | awk 'END {print $NF}') +FUNCTEST_DATA_DIR=$(cat $config_file | grep -w dir_functest_data | awk 'END {print $NF}') +RALLY_VENV=$(cat $config_file | grep -w dir_rally_inst | awk 'END {print $NF}') +RALLY_COMMIT=$(cat $config_file | grep -w rally_stable_commit | awk 'END {print $NF}') + + +echo "REPOS_DIR=${REPOS_DIR}" +echo "FUNCTEST_REPO_DIR=${FUNCTEST_REPO_DIR}" +echo "RALLY_REPO_DIR=${RALLY_REPO_DIR}" +echo "RELENG_REPO_DIR=${RELENG_REPO_DIR}" +echo "FUNCTEST_DIR=${FUNCTEST_DIR}" +echo "FUNCTEST_RESULTS_DIR=${FUNCTEST_RESULTS_DIR}" +echo "FUNCTEST_CONF_DIR=${FUNCTEST_CONF_DIR}" +echo "FUNCTEST_DATA_DIR=${FUNCTEST_DATA_DIR}" +echo "RALLY_VENV=${RALLY_VENV}" +echo "RALLY_COMMIT=${RALLY_COMMIT}" + + +info () { + logger -s -t "start.info" "$*" +} + + +error () { + logger -s -t "start.error" "$*" + exit 1 +} + +# Check if environment variables are set +if [ -z ${INSTALLER_TYPE} ]; then + error "Environment variable 'INSTALLER_TYPE' is not defined." +elif [ "${INSTALLER_TYPE}" != "fuel" ] && [ "${INSTALLER_TYPE}" != "foreman" ]; then + error "Invalid environment variable INSTALLER_TYPE=${INSTALLER_TYPE}" +fi + +if [ -z ${INSTALLER_IP} ]; then + error "Environment variable 'INSTALLER_IP' is not defined." +fi + + +# Update repos +cd ${FUNCTEST_REPO_DIR} +git pull +cd ${RELENG_REPO_DIR} +git pull +cd ${RALLY_REPO_DIR} +git reset --hard ${RALLY_COMMIT} + + +# Create directories +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 +${REPOS_DIR}/releng/utils/fetch_os_creds.sh -d ${FUNCTEST_CONF_DIR}/openstack.creds \ + -i ${INSTALLER_TYPE} -a ${INSTALLER_IP} +retval=$? +if [ $retval != 0 ]; then + echo "Cannot retrieve credentials file from installation. Check logs." + exit $retval +fi + + +# Source credentials +source ${FUNCTEST_CONF_DIR}/openstack.creds + + +# Prepare Functest Environment +echo "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" + exit $retval +fi + +# vPing +echo "Functest: run vPing" +python ${FUNCTEST_REPO_DIR}/testcases/vPing/CI/libraries/vPing.py --debug ${FUNCTEST_REPO_DIR}/ -r + +# ODL +echo "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 +else + echo "INSTALLER_TYPE not valid." + exit 1 +fi + +# rally +echo "Functest: run Functest Rally Bench suites" +python ${FUNCTEST_REPO_DIR}/testcases/VIM/OpenStack/CI/libraries/run_rally.py --debug ${FUNCTEST_REPO_DIR}/ all + +# tempest +echo "Functest: run Tempest suite" +rally verify start smoke +rally verify list + +# collect results +echo "Functest: copy results and clean Functest environment" + +# save ODL results +cp -Rf ${FUNCTEST_REPO_DIR}/testcases/Controllers/ODL/CI/logs ${FUNCTEST_RESULTS_DIR}/ODL + +# save tempest.conf for further troubleshooting +cp $RALLY_VENV/tempest/for-deployment-*/tempest.conf ${FUNCTEST_CONF_DIR} + + -- cgit 1.2.3-korg