From 230b9df08d040659ba12661a505441f26508ef7a Mon Sep 17 00:00:00 2001 From: =?utf8?q?C=C3=A9dric=20Ollivier?= Date: Mon, 11 Jul 2016 15:19:30 +0200 Subject: [PATCH] Propose a new python file to launch ODL testing MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit OpenDaylightTesting.py safely replaces start_tests.sh. It also adds the report of the basic test of RESTConf which was previously ignored. JIRA: FUNCTEST-367 Change-Id: I8ba288271455fd9f31cf87aa65bf45cfb53cd8d6 Signed-off-by: Cédric Ollivier --- ci/exec_test.sh | 8 +- testcases/Controllers/ODL/OpenDaylightTesting.py | 116 +++++++++++++++++++++++ testcases/Controllers/ODL/start_tests.sh | 98 ------------------- testcases/Controllers/ODL/test_list.txt | 5 - 4 files changed, 121 insertions(+), 106 deletions(-) create mode 100755 testcases/Controllers/ODL/OpenDaylightTesting.py delete mode 100755 testcases/Controllers/ODL/start_tests.sh delete mode 100644 testcases/Controllers/ODL/test_list.txt diff --git a/ci/exec_test.sh b/ci/exec_test.sh index 32988f87..89e29662 100755 --- a/ci/exec_test.sh +++ b/ci/exec_test.sh @@ -80,9 +80,11 @@ function run_test(){ ;; "odl") odl_tests - ODL_WEB_PORT=$odl_port ODL_IP=$odl_ip KEYSTONE_IP=$keystone_ip NEUTRON_IP=$neutron_ip \ - TENANT_NAME=${OS_TENANT_NAME} USR_NAME=${OS_USERNAME} PASS=${OS_PASSWORD} \ - ${FUNCTEST_REPO_DIR}/testcases/Controllers/ODL/start_tests.sh + ${FUNCTEST_REPO_DIR}/testcases/Controllers/ODL/OpenDaylightTesting.py \ + --keystoneip $keystone_ip --neutronip $neutron_ip \ + --osusername ${OS_USERNAME} --ostenantname ${OS_TENANT_NAME} \ + --ospassword ${OS_PASSWORD} \ + --odlip $odl_ip --odlwebport $odl_port # push results to the DB in case of CI if [[ "$report" == "-r" && diff --git a/testcases/Controllers/ODL/OpenDaylightTesting.py b/testcases/Controllers/ODL/OpenDaylightTesting.py new file mode 100755 index 00000000..b1f94b11 --- /dev/null +++ b/testcases/Controllers/ODL/OpenDaylightTesting.py @@ -0,0 +1,116 @@ +#!/usr/bin/python + +import argparse +import fileinput +import os +import re +from robot import run +import shutil +import sys + + +class ODLTestCases: + + repos = "/home/opnfv/repos/" + odl_test_repo = repos + "odl_test/" + neutron_suite_dir = odl_test_repo + "csit/suites/openstack/neutron/" + basic_suite_dir = odl_test_repo + "csit/suites/integration/basic/" + + @classmethod + def copy_opnf_testcases(cls): + opnfv_testcases_dir = (os.path.dirname(os.path.abspath(__file__)) + + "/custom_tests/neutron/") + files = [opnfv_testcases_dir + "001__reachability.robot", + opnfv_testcases_dir + "040__delete_ports.robot", + opnfv_testcases_dir + "050__delete_subnets.robot", + opnfv_testcases_dir + "060__delete_networks.robot"] + for f in files: + try: + shutil.copy(f, cls.neutron_suite_dir) + except IOError as e: + print "Cannot copy OPNFV's testcases to ODL directory", e + return False + return True + + @classmethod + def set_robotframework_vars(cls, odlusername="admin", odlpassword="admin"): + odl_variables_files = cls.odl_test_repo + 'csit/variables/Variables.py' + try: + print cls.neutron_suite_dir + '__init__.robot' + for line in fileinput.input(odl_variables_files, + inplace=True): + print re.sub("AUTH = .*", + ("AUTH = [u'" + odlusername + "', u'" + + odlpassword + "']"), + line.rstrip()) + return True + except Exception as e: + print "Cannot set ODL creds", e + return False + + @classmethod + def run(cls, **kwargs): + dirs = [cls.basic_suite_dir, cls.neutron_suite_dir] + try: + odlusername = kwargs['odlusername'] + odlpassword = kwargs['odlpassword'] + variables = ['KEYSTONE:' + kwargs['keystoneip'], + 'NEUTRON:' + kwargs['neutronip'], + 'OSUSERNAME:"' + kwargs['osusername'] + '"', + 'OSTENANTNAME:"' + kwargs['ostenantname'] + '"', + 'OSPASSWORD:"' + kwargs['ospassword'] + '"', + 'ODL_SYSTEM_IP:' + kwargs['odlip'], + 'PORT:' + kwargs['odlwebport'], + 'RESTCONFPORT:' + kwargs['odlrestconfport']] + except KeyError as e: + print "Cannot run ODL testcases. Please check", e + return False + res_dir = '/home/opnfv/functest/results/odl/' + if (cls.copy_opnf_testcases() and + cls.set_robotframework_vars(odlusername, odlpassword)): + try: + os.makedirs(res_dir) + except OSError: + pass + return run(*dirs, variable=variables, + output=res_dir + 'output.xml', + log=res_dir + 'log.html', + report=res_dir + 'report.html') + else: + return False + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('-k', '--keystoneip', + help='Keystone IP', + default='127.0.0.1') + parser.add_argument('-n', '--neutronip', + help='Neutron IP', + default='127.0.0.1') + parser.add_argument('-a', '--osusername', + help='Username for OpenStack', + default='admin') + parser.add_argument('-b', '--ostenantname', + help='Tenantname for OpenStack', + default='admin') + parser.add_argument('-c', '--ospassword', + help='Password for OpenStack', + default='admin') + parser.add_argument('-o', '--odlip', + help='OpenDaylight IP', + default='127.0.0.1') + parser.add_argument('-w', '--odlwebport', + help='OpenDaylight Web Portal Port', + default='8080') + parser.add_argument('-r', '--odlrestconfport', + help='OpenDaylight RESTConf Port', + default='8181') + parser.add_argument('-d', '--odlusername', + help='Username for ODL', + default='admin') + parser.add_argument('-e', '--odlpassword', + help='Password for ODL', + default='admin') + args = vars(parser.parse_args()) + sys.exit(ODLTestCases.run(**args)) diff --git a/testcases/Controllers/ODL/start_tests.sh b/testcases/Controllers/ODL/start_tests.sh deleted file mode 100755 index 01c8553e..00000000 --- a/testcases/Controllers/ODL/start_tests.sh +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/bash -# it includes python2.7 virtual env with robot packages and git -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -# - -BASEDIR=`dirname $0` -RESULTS_DIR='/home/opnfv/functest/results/odl/' -REPO_DIR='/home/opnfv/repos/odl_test' -#TODO: read this form config_functest.yaml - -# Colors -green='\033[0;32m' -light_green='\033[1;32m' -red='\033[1;31m' -nc='\033[0m' # No Color - -usage="Script for starting ODL tests. Tests to be executed are specified in test_list.txt file. - -usage: -[var=value] bash $(basename "$0") [-h] - -where: - -h show this help text - var one of the following: ODL_IP, ODL_WEB_PORT, ODL_RESTCONF_PORT, ODL_USER, ODL_PASS, TENANT_NAME, USR_NAME, PASS, NEUTRON_IP, KEYSTONE_IP - value new value for var - -example: - ODL_IP=oscontro1 ODL_PORT=8080 bash $(basename "$0")" - -while getopts ':h' option; do - case "$option" in - h) echo "$usage" - exit - ;; - \?) printf "illegal option: -%s\n" "$OPTARG" >&2 - echo "$usage" >&2 - exit 1 - ;; - esac -done - -echo -e "${green}Current environment parameters for ODL suite.${nc}" -# Following vars might be also specified as CLI params -set -x -ODL_IP=${ODL_IP:-'127.0.0.1'} -ODL_WEB_PORT=${ODL_WEB_PORT:-8080} -ODL_RESTCONF_PORT=${ODL_RESTCONF_PORT:-8181} -ODL_USER=${ODL_USER:-'admin'} -ODL_PASS=${ODL_PASS:-'admin'} -TENANT_NAME=${TENANT_NAME:-'admin'} -USR_NAME=${USR_NAME:-'admin'} -PASS=${PASS:-'admin'} -NEUTRON_IP=${NEUTRON_IP:-'127.0.0.1'} -KEYSTONE_IP=${KEYSTONE_IP:-'127.0.0.1'} -set +x - -# set ODL credentials in ${REPO_DIR}/csit/variables/Variables.py -sed -i "s/^AUTH\ =.*$/AUTH\ =\ [u'$ODL_USER', u'$ODL_PASS']/" \ - ${REPO_DIR}/csit/variables/Variables.py - -# add custom tests to suite, if there are more custom tests needed this will be reworked -echo -e "${green}Copy custom tests to suite.${nc}" -cp -vf ${BASEDIR}/custom_tests/neutron/* ${REPO_DIR}/csit/suites/openstack/neutron/ - -# List of tests are specified in test_list.txt -# those are relative paths to test directories from integartion suite -echo -e "${green}Executing chosen tests.${nc}" -test_num=0 -while read line -do - # skip comments - [[ ${line:0:1} == "#" ]] && continue - # skip empty lines - [[ -z "${line}" ]] && continue - - ((test_num++)) - echo -e "${light_green}Starting test: $line ${nc}" - pybot -v KEYSTONE:${KEYSTONE_IP} -v NEUTRON:${NEUTRON_IP} \ - -v OSUSERNAME:\"${USR_NAME}\" -v OSTENANTNAME:\"${TENANT_NAME}\" -v OSPASSWORD:\"${PASS}\" \ - -v PORT:${ODL_WEB_PORT} -v RESTCONFPORT:${ODL_RESTCONF_PORT} -v ODL_SYSTEM_IP:${ODL_IP} \ - ${REPO_DIR}/$line - mkdir -p $RESULTS_DIR/logs/${test_num} - mv log.html $RESULTS_DIR/logs/${test_num}/ - mv report.html $RESULTS_DIR/logs/${test_num}/ - mv output.xml $RESULTS_DIR/logs/${test_num}/ -done < ${BASEDIR}/test_list.txt - -# create final report which includes all partial test reports -for i in $(seq $test_num); do - rebot_params="$rebot_params $RESULTS_DIR/logs/$i/output.xml" -done - -echo -e "${green}Final report is located:${nc}" -rebot $rebot_params diff --git a/testcases/Controllers/ODL/test_list.txt b/testcases/Controllers/ODL/test_list.txt deleted file mode 100644 index ec8cd32e..00000000 --- a/testcases/Controllers/ODL/test_list.txt +++ /dev/null @@ -1,5 +0,0 @@ -# List of tests` which will be executed by script start_test.sh -# You can specify path to specific robot test file or directory (in that case all tests from directory will be executed) - -csit/suites/integration/basic/ -csit/suites/openstack/neutron/ -- 2.16.6