Add possibility to run specific set of tests
authorjose.lausuch <jose.lausuch@ericsson.com>
Wed, 21 Oct 2015 16:22:46 +0000 (18:22 +0200)
committerjose.lausuch <jose.lausuch@ericsson.com>
Thu, 22 Oct 2015 12:17:29 +0000 (14:17 +0200)
JIRA: FUNCTEST-29

Change-Id: I20f1556911866cc7922cff9923ef7d01a95355ad
Signed-off-by: jose.lausuch <jose.lausuch@ericsson.com>
docker/prepare_env.sh
docker/run_tests.sh

index eaa9b4f..42b1e1c 100755 (executable)
@@ -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
 
index ef3125f..c794d3b 100755 (executable)
 # 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