diff options
-rw-r--r-- | docker/Dockerfile | 2 | ||||
-rwxr-xr-x | docker/prepare_env.sh | 48 | ||||
-rwxr-xr-x | docker/run_tests.sh | 198 | ||||
-rw-r--r-- | testcases/VIM/OpenStack/CI/libraries/run_tempest.py | 7 | ||||
-rwxr-xr-x | testcases/config_functest.py | 17 | ||||
-rw-r--r-- | testcases/config_functest.yaml | 2 |
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 |