aboutsummaryrefslogtreecommitdiffstats
path: root/functest/ci
diff options
context:
space:
mode:
Diffstat (limited to 'functest/ci')
-rwxr-xr-x[-rw-r--r--]functest/ci/__init__.py0
-rwxr-xr-x[-rw-r--r--]functest/ci/check_os.sh0
-rwxr-xr-x[-rw-r--r--]functest/ci/config_functest.yaml405
-rwxr-xr-x[-rw-r--r--]functest/ci/config_patch.yaml0
-rw-r--r--functest/ci/exec_test.sh13
-rwxr-xr-x[-rw-r--r--]functest/ci/generate_report.py63
-rwxr-xr-x[-rw-r--r--]functest/ci/prepare_env.py158
-rw-r--r--functest/ci/run_tests.py71
-rwxr-xr-x[-rw-r--r--]functest/ci/testcases.yaml2
-rwxr-xr-x[-rw-r--r--]functest/ci/tier_builder.py0
-rwxr-xr-x[-rw-r--r--]functest/ci/tier_handler.py0
11 files changed, 369 insertions, 343 deletions
diff --git a/functest/ci/__init__.py b/functest/ci/__init__.py
index e69de29b..e69de29b 100644..100755
--- a/functest/ci/__init__.py
+++ b/functest/ci/__init__.py
diff --git a/functest/ci/check_os.sh b/functest/ci/check_os.sh
index 053796d9..053796d9 100644..100755
--- a/functest/ci/check_os.sh
+++ b/functest/ci/check_os.sh
diff --git a/functest/ci/config_functest.yaml b/functest/ci/config_functest.yaml
index de019486..a19139c0 100644..100755
--- a/functest/ci/config_functest.yaml
+++ b/functest/ci/config_functest.yaml
@@ -1,199 +1,206 @@
-general:
- directories:
- # Relative to the path where the repo is cloned:
- dir_vping: functest/opnfv_tests/OpenStack/vPing/
- dir_odl: functest/opnfv_tests/Controllers/ODL/
- dir_rally: functest/opnfv_tests/OpenStack/rally/
- dir_tempest_cases: functest/opnfv_tests/OpenStack/tempest/custom_tests/
- dir_vIMS: functest/opnfv_tests/vnf/vIMS/
- dir_onos: functest/opnfv_tests/Controllers/ONOS/Teston/
- dir_onos_sfc: functest/opnfv_tests/Controllers/ONOS/Sfc/
-
- # Absolute path
- dir_repos: /home/opnfv/repos
- dir_repo_functest: /home/opnfv/repos/functest
- dir_repo_rally: /home/opnfv/repos/rally
- dir_repo_tempest: /home/opnfv/repos/tempest
- dir_repo_releng: /home/opnfv/repos/releng
- dir_repo_vims_test: /home/opnfv/repos/vims-test
- dir_repo_bgpvpn: /home/opnfv/repos/bgpvpn
- dir_repo_onos: /home/opnfv/repos/onos
- dir_repo_promise: /home/opnfv/repos/promise
- dir_repo_doctor: /home/opnfv/repos/doctor
- dir_repo_copper: /home/opnfv/repos/copper
- dir_repo_ovno: /home/opnfv/repos/ovno
- dir_repo_parser: /home/opnfv/repos/parser
- dir_repo_domino: /home/opnfv/repos/domino
- dir_functest: /home/opnfv/functest
- dir_results: /home/opnfv/functest/results
- dir_functest_conf: /home/opnfv/functest/conf
- dir_rally_res: /home/opnfv/functest/results/rally/
- dir_functest_data: /home/opnfv/functest/data
- dir_vIMS_data: /home/opnfv/functest/data/vIMS
- dir_rally_inst: /home/opnfv/.rally
-
- openstack:
- snapshot_file: /home/opnfv/functest/conf/openstack_snapshot.yaml
-
- image_name: Cirros-0.3.4
- image_file_name: cirros-0.3.4-x86_64-disk.img
- image_disk_format: qcow2
-
- flavor_name: opnfv_flavor
- flavor_ram: 512
- flavor_disk: 1
- flavor_vcpus: 1
-
- # Private network for functest. Will be created by config_functest.py
- neutron_private_net_name: functest-net
- neutron_private_subnet_name: functest-subnet
- neutron_private_subnet_cidr: 192.168.120.0/24
- neutron_private_subnet_start: 192.168.120.2
- neutron_private_subnet_end: 192.168.120.254
- neutron_private_subnet_gateway: 192.168.120.254
- neutron_router_name: functest-router
-
-healthcheck:
- disk_image: /home/opnfv/functest/data/cirros-0.3.4-x86_64-disk.img
- disk_format: qcow2
- wait_time: 60
-
-vping:
- ping_timeout: 200
- vm_flavor: m1.tiny # adapt to your environment
- vm_name_1: opnfv-vping-1
- vm_name_2: opnfv-vping-2
- image_name: functest-vping
- vping_private_net_name: vping-net
- vping_private_subnet_name: vping-subnet
- vping_private_subnet_cidr: 192.168.130.0/24
- vping_router_name: vping-router
- vping_sg_name: vPing-sg
- vping_sg_descr: Security group for vPing test case
-
-onos_sfc:
- image_name: TestSfcVm
- image_file_name: firewall_block_image.img
-
-tempest:
- identity:
- tenant_name: tempest
- tenant_description: Tenant for Tempest test suite
- user_name: tempest
- user_password: tempest
- validation:
- ssh_timeout: 130
- private_net_name: tempest-net
- private_subnet_name: tempest-subnet
- private_subnet_cidr: 192.168.150.0/24
- router_name: tempest-router
- use_custom_images: False
- use_custom_flavors: False
-
-rally:
- deployment_name: opnfv-rally
- network_name: rally-net
- subnet_name: rally-subnet
- subnet_cidr: 192.168.140.0/24
- router_name: rally-router
-
-vIMS:
- general:
- tenant_name: vIMS
- tenant_description: vIMS Functionality Testing
- images:
- ubuntu:
- image_url: 'http://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img'
- image_name: ubuntu_14.04
- centos:
- image_url: 'http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1510.qcow2'
- image_name: centos_7
- cloudify:
- blueprint:
- url: https://github.com/boucherv-orange/cloudify-manager-blueprints.git
- branch: "3.3.1-build"
- requierments:
- ram_min: 3000
- os_image: centos_7
- inputs:
- keystone_username: ""
- keystone_password: ""
- keystone_tenant_name: ""
- keystone_url: ""
- manager_public_key_name: 'manager-kp'
- agent_public_key_name: 'agent-kp'
- image_id: ""
- flavor_id: "3"
- external_network_name: ""
- ssh_user: centos
- agents_user: ubuntu
- clearwater:
- blueprint:
- file_name: 'openstack-blueprint.yaml'
- name: "clearwater-opnfv"
- destination_folder: "opnfv-cloudify-clearwater"
- url: 'https://github.com/Orange-OpenSource/opnfv-cloudify-clearwater.git'
- branch: "stable"
- deployment-name: 'clearwater-opnfv'
- requierments:
- ram_min: 1700
- os_image: ubuntu_14.04
- inputs:
- image_id: ''
- flavor_id: ''
- agent_user: 'ubuntu'
- external_network_name: ''
- public_domain: clearwater.opnfv
-ONOS:
- general:
- onosbench_username: 'root'
- onosbench_password: 'root'
- onoscli_username: 'root'
- onoscli_password: 'root'
- runtimeout: 300
- environment:
- OCT: '10.20.0.1'
- OC1: '10.20.0.7'
- OC2: '10.20.0.7'
- OC3: '10.20.0.7'
- OCN: '10.20.0.4'
- OCN2: '10.20.0.5'
- installer_master: '10.20.0.2'
- installer_master_username: 'root'
- installer_master_password: 'r00tme'
-multisite:
- fuel_environment:
- installer_username: 'root'
- installer_password: 'r00tme'
- compass_environment:
- installer_username: 'root'
- installer_password: 'root'
- multisite_controller_ip: '10.1.0.50'
-promise:
- tenant_name: promise
- tenant_description: promise Functionality Testing
- user_name: promiser
- user_pwd: test
- image_name: promise-img
- flavor_name: promise-flavor
- flavor_vcpus: 1
- flavor_ram: 128
- flavor_disk: 0
- network_name: promise-net
- subnet_name: promise-subnet
- subnet_cidr: 192.168.121.0/24
- router_name: promise-router
-
-example:
- example_vm_name: example-vm
- example_flavor: m1.small
- example_image_name: functest-example-vm
- example_private_net_name: example-net
- example_private_subnet_name: example-subnet
- example_private_subnet_cidr: 192.168.170.0/24
- example_router_name: example-router
- example_sg_name: example-sg
- example_sg_descr: Example Security group
-
-results:
- test_db_url: http://testresults.opnfv.org/test/api/v1
+general:
+ directories:
+ # Relative to the path where the repo is cloned:
+ dir_vping: functest/opnfv_tests/OpenStack/vPing
+ dir_odl: functest/opnfv_tests/Controllers/ODL
+ dir_rally: functest/opnfv_tests/OpenStack/rally
+ dir_tempest_cases: functest/opnfv_tests/OpenStack/tempest/custom_tests
+ dir_vIMS: functest/opnfv_tests/vnf/vIMS
+ dir_onos: functest/opnfv_tests/Controllers/ONOS/Teston
+ dir_onos_sfc: functest/opnfv_tests/Controllers/ONOS/Sfc
+
+ # Absolute path
+ dir_home: /home/opnfv
+ dir_repos: /home/opnfv/repos
+ dir_repo_functest: /home/opnfv/repos/functest
+ dir_repo_rally: /home/opnfv/repos/rally
+ dir_repo_tempest: /home/opnfv/repos/tempest
+ dir_repo_releng: /home/opnfv/repos/releng
+ dir_repo_vims_test: /home/opnfv/repos/vims-test
+ dir_repo_sdnvpn: /home/opnfv/repos/sdnvpn
+ dir_repo_sfc: /home/opnfv/repos/sfc
+ dir_repo_onos: /home/opnfv/repos/onos
+ dir_repo_promise: /home/opnfv/repos/promise
+ dir_repo_doctor: /home/opnfv/repos/doctor
+ dir_repo_copper: /home/opnfv/repos/copper
+ dir_repo_ovno: /home/opnfv/repos/ovno
+ dir_repo_parser: /home/opnfv/repos/parser
+ dir_repo_domino: /home/opnfv/repos/domino
+ dir_functest: /home/opnfv/functest
+ dir_functest_test: /home/opnfv/repos/functest/functest/opnfv_tests
+ dir_results: /home/opnfv/functest/results
+ dir_functest_conf: /home/opnfv/functest/conf
+ dir_functest_data: /home/opnfv/functest/data
+ dir_vIMS_data: /home/opnfv/functest/data/vIMS/
+ dir_rally_inst: /home/opnfv/.rally
+
+ openstack:
+ creds: /home/opnfv/functest/conf/openstack.creds
+ snapshot_file: /home/opnfv/functest/conf/openstack_snapshot.yaml
+
+ image_name: Cirros-0.3.4
+ image_file_name: cirros-0.3.4-x86_64-disk.img
+ image_disk_format: qcow2
+
+ flavor_name: opnfv_flavor
+ flavor_ram: 512
+ flavor_disk: 1
+ flavor_vcpus: 1
+
+ # Private network for functest. Will be created by config_functest.py
+ neutron_private_net_name: functest-net
+ neutron_private_subnet_name: functest-subnet
+ neutron_private_subnet_cidr: 192.168.120.0/24
+ neutron_private_subnet_start: 192.168.120.2
+ neutron_private_subnet_end: 192.168.120.254
+ neutron_private_subnet_gateway: 192.168.120.254
+ neutron_router_name: functest-router
+
+ functest:
+ testcases_yaml: /home/opnfv/repos/functest/functest/ci/testcases.yaml
+
+healthcheck:
+ disk_image: /home/opnfv/functest/data/cirros-0.3.4-x86_64-disk.img
+ disk_format: qcow2
+ wait_time: 60
+
+vping:
+ ping_timeout: 200
+ vm_flavor: m1.tiny # adapt to your environment
+ vm_name_1: opnfv-vping-1
+ vm_name_2: opnfv-vping-2
+ image_name: functest-vping
+ vping_private_net_name: vping-net
+ vping_private_subnet_name: vping-subnet
+ vping_private_subnet_cidr: 192.168.130.0/24
+ vping_router_name: vping-router
+ vping_sg_name: vPing-sg
+ vping_sg_descr: Security group for vPing test case
+
+onos_sfc:
+ image_base_url: http://artifacts.opnfv.org/sfc/demo
+ image_name: TestSfcVm
+ image_file_name: firewall_block_image.img
+
+tempest:
+ identity:
+ tenant_name: tempest
+ tenant_description: Tenant for Tempest test suite
+ user_name: tempest
+ user_password: tempest
+ validation:
+ ssh_timeout: 130
+ private_net_name: tempest-net
+ private_subnet_name: tempest-subnet
+ private_subnet_cidr: 192.168.150.0/24
+ router_name: tempest-router
+ use_custom_images: False
+ use_custom_flavors: False
+
+rally:
+ deployment_name: opnfv-rally
+ network_name: rally-net
+ subnet_name: rally-subnet
+ subnet_cidr: 192.168.140.0/24
+ router_name: rally-router
+
+vIMS:
+ general:
+ tenant_name: vIMS
+ tenant_description: vIMS Functionality Testing
+ images:
+ ubuntu:
+ image_url: http://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img
+ image_name: ubuntu_14.04
+ centos:
+ image_url: http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1510.qcow2
+ image_name: centos_7
+ cloudify:
+ blueprint:
+ url: https://github.com/boucherv-orange/cloudify-manager-blueprints.git
+ branch: "3.3.1-build"
+ requierments:
+ ram_min: 3000
+ os_image: centos_7
+ inputs:
+ keystone_username: ""
+ keystone_password: ""
+ keystone_tenant_name: ""
+ keystone_url: ""
+ manager_public_key_name: 'manager-kp'
+ agent_public_key_name: 'agent-kp'
+ image_id: ""
+ flavor_id: "3"
+ external_network_name: ""
+ ssh_user: centos
+ agents_user: ubuntu
+ clearwater:
+ blueprint:
+ file_name: 'openstack-blueprint.yaml'
+ name: "clearwater-opnfv"
+ destination_folder: "opnfv-cloudify-clearwater"
+ url: https://github.com/Orange-OpenSource/opnfv-cloudify-clearwater.git
+ branch: "stable"
+ deployment-name: 'clearwater-opnfv'
+ requierments:
+ ram_min: 1700
+ os_image: ubuntu_14.04
+ inputs:
+ image_id: ''
+ flavor_id: ''
+ agent_user: 'ubuntu'
+ external_network_name: ''
+ public_domain: clearwater.opnfv
+ONOS:
+ general:
+ onosbench_username: 'root'
+ onosbench_password: 'root'
+ onoscli_username: 'root'
+ onoscli_password: 'root'
+ runtimeout: 300
+ environment:
+ OCT: '10.20.0.1'
+ OC1: '10.20.0.7'
+ OC2: '10.20.0.7'
+ OC3: '10.20.0.7'
+ OCN: '10.20.0.4'
+ OCN2: '10.20.0.5'
+ installer_master: '10.20.0.2'
+ installer_master_username: 'root'
+ installer_master_password: 'r00tme'
+multisite:
+ fuel_environment:
+ installer_username: 'root'
+ installer_password: 'r00tme'
+ compass_environment:
+ installer_username: 'root'
+ installer_password: 'root'
+ multisite_controller_ip: '10.1.0.50'
+promise:
+ tenant_name: promise
+ tenant_description: promise Functionality Testing
+ user_name: promiser
+ user_pwd: test
+ image_name: promise-img
+ flavor_name: promise-flavor
+ flavor_vcpus: 1
+ flavor_ram: 128
+ flavor_disk: 0
+ network_name: promise-net
+ subnet_name: promise-subnet
+ subnet_cidr: 192.168.121.0/24
+ router_name: promise-router
+
+example:
+ example_vm_name: example-vm
+ example_flavor: m1.small
+ example_image_name: functest-example-vm
+ example_private_net_name: example-net
+ example_private_subnet_name: example-subnet
+ example_private_subnet_cidr: 192.168.170.0/24
+ example_router_name: example-router
+ example_sg_name: example-sg
+ example_sg_descr: Example Security group
+
+results:
+ test_db_url: http://testresults.opnfv.org/test/api/v1
diff --git a/functest/ci/config_patch.yaml b/functest/ci/config_patch.yaml
index 46064a07..46064a07 100644..100755
--- a/functest/ci/config_patch.yaml
+++ b/functest/ci/config_patch.yaml
diff --git a/functest/ci/exec_test.sh b/functest/ci/exec_test.sh
index f7b96af2..a71079e3 100644
--- a/functest/ci/exec_test.sh
+++ b/functest/ci/exec_test.sh
@@ -127,18 +127,18 @@ function run_test(){
"ovno")
# suite under rewritting for colorado
# no need to run anything until refactoring done
- # ${repos_dir}/ovno/Testcases/RunTests.sh
+ # ${REPOS_DIR}/ovno/Testcases/RunTests.sh
;;
"security_scan")
echo "Sourcing Credentials ${FUNCTEST_CONF_DIR}/stackrc for undercloud .."
source ${FUNCTEST_CONF_DIR}/stackrc
- python ${repos_dir}/securityscanning/security_scan.py --config ${repos_dir}/securityscanning/config.ini
+ python ${REPOS_DIR}/securityscanning/security_scan.py --config ${REPOS_DIR}/securityscanning/config.ini
;;
"copper")
python ${FUNCTEST_TEST_DIR}/features/copper.py $report
;;
"moon")
- python ${repos_dir}/moon/tests/run_tests.py $report
+ python ${REPOS_DIR}/moon/tests/run_tests.py $report
;;
"multisite")
python ${FUNCTEST_TEST_DIR}/OpenStack/tempest/gen_tempest_conf.py
@@ -147,7 +147,8 @@ function run_test(){
-c ${FUNCTEST_TEST_DIR}/OpenStack/tempest/tempest_multisite.conf
;;
"odl-sfc")
- ODL_SFC_DIR=${repos_dir}/sfc/tests/functest/odl-sfc
+ ODL_SFC_DIR=${REPOS_DIR}/sfc/tests/functest/odl-sfc
+ # pass FUNCTEST_REPO_DIR inside prepare_odl_sfc.bash
FUNCTEST_REPO_DIR=${FUNCTEST_REPO_DIR} python ${ODL_SFC_DIR}/prepare_odl_sfc.py || exit $?
source ${ODL_SFC_DIR}/tackerc
python ${ODL_SFC_DIR}/sfc.py $report
@@ -196,8 +197,8 @@ done
# Source credentials
-echo "Sourcing Credentials ${FUNCTEST_CONF_DIR}/openstack.creds to run the test.."
-source ${FUNCTEST_CONF_DIR}/openstack.creds
+echo "Sourcing Credentials ${creds} to run the test.."
+source ${creds}
# ODL Boron workaround to create additional flow rules to allow port 22 TCP
if [[ $DEPLOY_SCENARIO == *"odl_l2-sfc"* ]]; then
diff --git a/functest/ci/generate_report.py b/functest/ci/generate_report.py
index c9343729..9ae9dca5 100644..100755
--- a/functest/ci/generate_report.py
+++ b/functest/ci/generate_report.py
@@ -1,10 +1,10 @@
import json
-import os
import re
import urllib2
import functest.utils.functest_logger as ft_logger
import functest.utils.functest_utils as ft_utils
+import functest.utils.functest_constants as ft_constants
COL_1_LEN = 25
@@ -15,8 +15,15 @@ COL_5_LEN = 75
# If we run from CI (Jenkins) we will push the results to the DB
# and then we can print the url to the specific test result
-IS_CI_RUN = False
-BUILD_TAG = None
+
+
+class GlobalVariables:
+ IS_CI_RUN = ft_constants.IS_CI_RUN
+ BUILD_TAG = ft_constants.CI_BUILD_TAG
+ INSTALLER = ft_constants.CI_INSTALLER_TYPE
+ CI_LOOP = ft_constants.CI_LOOP
+ SCENARIO = ft_constants.CI_SCENARIO
+
logger = ft_logger.Logger("generate_report").getLogger()
@@ -34,7 +41,8 @@ def init(tiers_to_run):
def get_results_from_db():
- url = ft_utils.get_db_url() + '/results?build_tag=' + BUILD_TAG
+ url = ft_utils.get_db_url() + '/results?build_tag=' \
+ + GlobalVariables.BUILD_TAG
logger.debug("Query to rest api: %s" % url)
try:
data = json.load(urllib2.urlopen(url))
@@ -61,7 +69,7 @@ def print_line(w1, w2='', w3='', w4='', w5=''):
'| ' + w2.ljust(COL_2_LEN - 1) +
'| ' + w3.ljust(COL_3_LEN - 1) +
'| ' + w4.ljust(COL_4_LEN - 1))
- if IS_CI_RUN:
+ if GlobalVariables.IS_CI_RUN:
str += ('| ' + w5.ljust(COL_5_LEN - 1))
str += '|\n'
return str
@@ -69,7 +77,7 @@ def print_line(w1, w2='', w3='', w4='', w5=''):
def print_line_no_columns(str):
TOTAL_LEN = COL_1_LEN + COL_2_LEN + COL_3_LEN + COL_4_LEN + 2
- if IS_CI_RUN:
+ if GlobalVariables.IS_CI_RUN:
TOTAL_LEN += COL_5_LEN + 1
return ('| ' + str.ljust(TOTAL_LEN) + "|\n")
@@ -79,21 +87,16 @@ def print_separator(char="=", delimiter="+"):
delimiter + char * COL_2_LEN +
delimiter + char * COL_3_LEN +
delimiter + char * COL_4_LEN)
- if IS_CI_RUN:
+ if GlobalVariables.IS_CI_RUN:
str += (delimiter + char * COL_5_LEN)
str += '+\n'
return str
def main(args):
- global BUILD_TAG, IS_CI_RUN
executed_test_cases = args
- BUILD_TAG = os.getenv("BUILD_TAG")
- if BUILD_TAG is not None:
- IS_CI_RUN = True
-
- if IS_CI_RUN:
+ if GlobalVariables.IS_CI_RUN:
results = get_results_from_db()
if results is not None:
for test in executed_test_cases:
@@ -102,19 +105,15 @@ def main(args):
"result": data['result']})
TOTAL_LEN = COL_1_LEN + COL_2_LEN + COL_3_LEN + COL_4_LEN
- if IS_CI_RUN:
+ if GlobalVariables.IS_CI_RUN:
TOTAL_LEN += COL_5_LEN
MID = TOTAL_LEN / 2
- INSTALLER = os.getenv('INSTALLER_TYPE', 'unknown')
- CI_LOOP = os.getenv('CI_LOOP')
- SCENARIO = os.getenv('DEPLOY_SCENARIO')
- CI_LOOP = None
- if BUILD_TAG is not None:
- if re.search("daily", BUILD_TAG) is not None:
- CI_LOOP = "daily"
+ if GlobalVariables.BUILD_TAG is not None:
+ if re.search("daily", GlobalVariables.BUILD_TAG) is not None:
+ GlobalVariables.CI_LOOP = "daily"
else:
- CI_LOOP = "weekly"
+ GlobalVariables.CI_LOOP = "weekly"
str = ''
str += print_separator('=', delimiter="=")
@@ -122,16 +121,20 @@ def main(args):
str += print_separator('=', delimiter="=")
str += print_line_no_columns(' ')
str += print_line_no_columns(" Deployment description:")
- str += print_line_no_columns(" INSTALLER: %s" % INSTALLER)
- if SCENARIO is not None:
- str += print_line_no_columns(" SCENARIO: %s" % SCENARIO)
- if BUILD_TAG is not None:
- str += print_line_no_columns(" BUILD TAG: %s" % BUILD_TAG)
- if CI_LOOP is not None:
- str += print_line_no_columns(" CI LOOP: %s" % CI_LOOP)
+ str += print_line_no_columns(" INSTALLER: %s"
+ % GlobalVariables.INSTALLER)
+ if GlobalVariables.SCENARIO is not None:
+ str += print_line_no_columns(" SCENARIO: %s"
+ % GlobalVariables.SCENARIO)
+ if GlobalVariables.BUILD_TAG is not None:
+ str += print_line_no_columns(" BUILD TAG: %s"
+ % GlobalVariables.BUILD_TAG)
+ if GlobalVariables.CI_LOOP is not None:
+ str += print_line_no_columns(" CI LOOP: %s"
+ % GlobalVariables.CI_LOOP)
str += print_line_no_columns(' ')
str += print_separator('=')
- if IS_CI_RUN:
+ if GlobalVariables.IS_CI_RUN:
str += print_line('TEST CASE', 'TIER', 'DURATION', 'RESULT', 'URL')
else:
str += print_line('TEST CASE', 'TIER', 'DURATION', 'RESULT')
diff --git a/functest/ci/prepare_env.py b/functest/ci/prepare_env.py
index e5c24cc3..246a02a8 100644..100755
--- a/functest/ci/prepare_env.py
+++ b/functest/ci/prepare_env.py
@@ -25,6 +25,7 @@ import yaml
import functest.utils.functest_logger as ft_logger
import functest.utils.functest_utils as ft_utils
import functest.utils.openstack_utils as os_utils
+import functest.utils.functest_constants as ft_constants
actions = ['start', 'check']
parser = argparse.ArgumentParser()
@@ -38,34 +39,13 @@ args = parser.parse_args()
logger = ft_logger.Logger("prepare_env").getLogger()
-""" global variables """
-INSTALLERS = ['fuel', 'compass', 'apex', 'joid']
-CI_INSTALLER_TYPE = ""
-CI_INSTALLER_IP = ""
-CI_SCENARIO = ""
-CI_DEBUG = False
-CONFIG_FUNCTEST_PATH = os.environ["CONFIG_FUNCTEST_YAML"]
+CONFIG_FUNCTEST_PATH = ft_constants.CONFIG_FUNCTEST_YAML
CONFIG_PATCH_PATH = os.path.join(os.path.dirname(
CONFIG_FUNCTEST_PATH), "config_patch.yaml")
with open(CONFIG_PATCH_PATH) as f:
functest_patch_yaml = yaml.safe_load(f)
-FUNCTEST_CONF_DIR = \
- ft_utils.get_functest_config('general.directories.dir_functest_conf')
-
-
-FUNCTEST_DATA_DIR = \
- ft_utils.get_functest_config('general.directories.dir_functest_data')
-FUNCTEST_RESULTS_DIR = \
- ft_utils.get_functest_config('general.directories.dir_results')
-DEPLOYMENT_MAME = \
- ft_utils.get_functest_config('rally.deployment_name')
-TEMPEST_REPO_DIR = \
- ft_utils.get_functest_config('general.directories.dir_repo_tempest')
-
-ENV_FILE = FUNCTEST_CONF_DIR + "/env_active"
-
def print_separator():
logger.info("==============================================")
@@ -74,97 +54,97 @@ def print_separator():
def check_env_variables():
print_separator()
logger.info("Checking environment variables...")
- global CI_INSTALLER_TYPE
- global CI_INSTALLER_IP
- global CI_DEBUG
- global CI_SCENARIO
- CI_INSTALLER_TYPE = os.getenv('INSTALLER_TYPE')
- CI_INSTALLER_IP = os.getenv('INSTALLER_IP')
- CI_SCENARIO = os.getenv('DEPLOY_SCENARIO')
- CI_NODE = os.getenv('NODE_NAME')
- CI_BUILD_TAG = os.getenv('BUILD_TAG')
- CI_DEBUG = os.getenv('CI_DEBUG')
-
- if CI_INSTALLER_TYPE is None:
+
+ if ft_constants.CI_INSTALLER_TYPE is None:
logger.warning("The env variable 'INSTALLER_TYPE' is not defined.")
- CI_INSTALLER_TYPE = "undefined"
+ ft_constants.CI_INSTALLER_TYPE = "undefined"
else:
- if CI_INSTALLER_TYPE not in INSTALLERS:
+ if ft_constants.CI_INSTALLER_TYPE not in ft_constants.INSTALLERS:
logger.warning("INSTALLER_TYPE=%s is not a valid OPNFV installer. "
"Available OPNFV Installers are : %s. "
"Setting INSTALLER_TYPE=undefined."
- % (CI_INSTALLER_TYPE, INSTALLERS))
- CI_INSTALLER_TYPE = "undefined"
+ % (ft_constants.CI_INSTALLER_TYPE,
+ ft_constants.INSTALLERS))
+ ft_constants.CI_INSTALLER_TYPE = "undefined"
else:
- logger.info(" INSTALLER_TYPE=%s" % CI_INSTALLER_TYPE)
+ logger.info(" INSTALLER_TYPE=%s"
+ % ft_constants.CI_INSTALLER_TYPE)
- if CI_INSTALLER_IP is None:
+ if ft_constants.CI_INSTALLER_IP is None:
logger.warning("The env variable 'INSTALLER_IP' is not defined. "
"It is needed to fetch the OpenStack credentials. "
"If the credentials are not provided to the "
"container as a volume, please add this env variable "
"to the 'docker run' command.")
else:
- logger.info(" INSTALLER_IP=%s" % CI_INSTALLER_IP)
+ logger.info(" INSTALLER_IP=%s" % ft_constants.CI_INSTALLER_IP)
- if CI_SCENARIO is None:
+ if ft_constants.CI_SCENARIO is None:
logger.warning("The env variable 'DEPLOY_SCENARIO' is not defined. "
"Setting CI_SCENARIO=undefined.")
- CI_SCENARIO = "undefined"
+ ft_constants.CI_SCENARIO = "undefined"
else:
- logger.info(" DEPLOY_SCENARIO=%s" % CI_SCENARIO)
- if CI_DEBUG:
- logger.info(" CI_DEBUG=%s" % CI_DEBUG)
+ logger.info(" DEPLOY_SCENARIO=%s" % ft_constants.CI_SCENARIO)
+ if ft_constants.CI_DEBUG:
+ logger.info(" CI_DEBUG=%s" % ft_constants.CI_DEBUG)
- if CI_NODE:
- logger.info(" NODE_NAME=%s" % CI_NODE)
+ if ft_constants.CI_NODE:
+ logger.info(" NODE_NAME=%s" % ft_constants.CI_NODE)
- if CI_BUILD_TAG:
- logger.info(" BUILD_TAG=%s" % CI_BUILD_TAG)
+ if ft_constants.CI_BUILD_TAG:
+ logger.info(" BUILD_TAG=%s" % ft_constants.CI_BUILD_TAG)
+
+ if ft_constants.IS_CI_RUN:
+ logger.info(" IS_CI_RUN=%s" % ft_constants.IS_CI_RUN)
def create_directories():
print_separator()
logger.info("Creating needed directories...")
- if not os.path.exists(FUNCTEST_CONF_DIR):
- os.makedirs(FUNCTEST_CONF_DIR)
- logger.info(" %s created." % FUNCTEST_CONF_DIR)
+ if not os.path.exists(ft_constants.FUNCTEST_CONF_DIR):
+ os.makedirs(ft_constants.FUNCTEST_CONF_DIR)
+ logger.info(" %s created." % ft_constants.FUNCTEST_CONF_DIR)
else:
- logger.debug(" %s already exists." % FUNCTEST_CONF_DIR)
+ logger.debug(" %s already exists."
+ % ft_constants.FUNCTEST_CONF_DIR)
- if not os.path.exists(FUNCTEST_DATA_DIR):
- os.makedirs(FUNCTEST_DATA_DIR)
- logger.info(" %s created." % FUNCTEST_DATA_DIR)
+ if not os.path.exists(ft_constants.FUNCTEST_DATA_DIR):
+ os.makedirs(ft_constants.FUNCTEST_DATA_DIR)
+ logger.info(" %s created." % ft_constants.FUNCTEST_DATA_DIR)
else:
- logger.debug(" %s already exists." % FUNCTEST_DATA_DIR)
+ logger.debug(" %s already exists."
+ % ft_constants.FUNCTEST_DATA_DIR)
def source_rc_file():
print_separator()
logger.info("Fetching RC file...")
- rc_file = os.getenv('creds')
- if rc_file is None:
+
+ if ft_constants.OPENSTACK_CREDS is None:
logger.warning("The environment variable 'creds' must be set and"
"pointing to the local RC file. Using default: "
"/home/opnfv/functest/conf/openstack.creds ...")
- rc_file = "/home/opnfv/functest/conf/openstack.creds"
+ ft_constants.OPENSTACK_CREDS = \
+ "/home/opnfv/functest/conf/openstack.creds"
- if not os.path.isfile(rc_file):
+ if not os.path.isfile(ft_constants.OPENSTACK_CREDS):
logger.info("RC file not provided. "
"Fetching it from the installer...")
- if CI_INSTALLER_IP is None:
+ if ft_constants.CI_INSTALLER_IP is None:
logger.error("The env variable CI_INSTALLER_IP must be provided in"
" order to fetch the credentials from the installer.")
sys.exit("Missing CI_INSTALLER_IP.")
- if CI_INSTALLER_TYPE not in INSTALLERS:
+ if ft_constants.CI_INSTALLER_TYPE not in ft_constants.INSTALLERS:
logger.error("Cannot fetch credentials. INSTALLER_TYPE=%s is "
"not a valid OPNFV installer. Available "
- "installers are : %s." % INSTALLERS)
+ "installers are : %s." % ft_constants.INSTALLERS)
sys.exit("Wrong INSTALLER_TYPE.")
cmd = ("/home/opnfv/repos/releng/utils/fetch_os_creds.sh "
"-d %s -i %s -a %s"
- % (rc_file, CI_INSTALLER_TYPE, CI_INSTALLER_IP))
+ % (ft_constants.OPENSTACK_CREDS,
+ ft_constants.CI_INSTALLER_TYPE,
+ ft_constants.CI_INSTALLER_IP))
logger.debug("Executing command: %s" % cmd)
p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)
output = p.communicate()[0]
@@ -173,24 +153,39 @@ def source_rc_file():
logger.error("Failed to fetch credentials from installer.")
sys.exit(1)
else:
- logger.info("RC file provided in %s." % rc_file)
- if os.path.getsize(rc_file) == 0:
- logger.error("The file %s is empty." % rc_file)
+ logger.info("RC file provided in %s."
+ % ft_constants.OPENSTACK_CREDS)
+ if os.path.getsize(ft_constants.OPENSTACK_CREDS) == 0:
+ logger.error("The file %s is empty."
+ % ft_constants.OPENSTACK_CREDS)
sys.exit(1)
logger.info("Sourcing the OpenStack RC file...")
- creds = os_utils.source_credentials(rc_file)
+ creds = os_utils.source_credentials(
+ ft_constants.OPENSTACK_CREDS)
str = ""
for key, value in creds.iteritems():
if re.search("OS_", key):
str += "\n\t\t\t\t\t\t " + key + "=" + value
+ if key == 'OS_AUTH_URL':
+ ft_constants.OS_AUTH_URL = value
+ elif key == 'OS_USERNAME':
+ ft_constants.OS_USERNAME = value
+ elif key == 'OS_TENANT_NAME':
+ ft_constants.OS_TENANT_NAME = value
+ elif key == 'OS_PASSWORD':
+ ft_constants.OS_PASSWORD = value
logger.debug("Used credentials: %s" % str)
+ logger.debug("OS_AUTH_URL:%s" % ft_constants.OS_AUTH_URL)
+ logger.debug("OS_USERNAME:%s" % ft_constants.OS_USERNAME)
+ logger.debug("OS_TENANT_NAME:%s" % ft_constants.OS_TENANT_NAME)
+ logger.debug("OS_PASSWORD:%s" % ft_constants.OS_PASSWORD)
def patch_config_file():
updated = False
for key in functest_patch_yaml:
- if key in CI_SCENARIO:
+ if key in ft_constants.CI_SCENARIO:
new_functest_yaml = dict(ft_utils.merge_dicts(
ft_utils.get_functest_yaml(), functest_patch_yaml[key]))
updated = True
@@ -205,7 +200,7 @@ def patch_config_file():
def verify_deployment():
print_separator()
logger.info("Verifying OpenStack services...")
- cmd = ("%s/functest/ci/check_os.sh" % ft_utils.FUNCTEST_REPO)
+ cmd = ("%s/functest/ci/check_os.sh" % ft_constants.FUNCTEST_REPO_DIR)
logger.debug("Executing command: %s" % cmd)
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
@@ -223,19 +218,21 @@ def install_rally():
logger.info("Creating Rally environment...")
cmd = "rally deployment destroy opnfv-rally"
- ft_utils.execute_command(cmd,
- error_msg=("Deployment %s does not exist."
- % DEPLOYMENT_MAME), verbose=False)
+ ft_utils.execute_command(cmd, error_msg=(
+ "Deployment %s does not exist."
+ % ft_constants.RALLY_DEPLOYMENT_NAME),
+ verbose=False)
rally_conf = os_utils.get_credentials_for_rally()
with open('rally_conf.json', 'w') as fp:
json.dump(rally_conf, fp)
cmd = "rally deployment create --file=rally_conf.json --name="
- cmd += DEPLOYMENT_MAME
+ cmd += ft_constants.RALLY_DEPLOYMENT_NAME
ft_utils.execute_command(cmd,
error_msg="Problem creating Rally deployment")
logger.info("Installing tempest from existing repo...")
- cmd = ("rally verify install --source " + TEMPEST_REPO_DIR +
+ cmd = ("rally verify install --source " +
+ ft_constants.TEMPEST_REPO_DIR +
" --system-wide")
ft_utils.execute_command(cmd,
error_msg="Problem installing Tempest.")
@@ -258,11 +255,11 @@ def install_rally():
def check_environment():
msg_not_active = "The Functest environment is not installed."
- if not os.path.isfile(ENV_FILE):
+ if not os.path.isfile(ft_constants.ENV_FILE):
logger.error(msg_not_active)
sys.exit(1)
- with open(ENV_FILE, "r") as env_file:
+ with open(ft_constants.ENV_FILE, "r") as env_file:
s = env_file.read()
if not re.search("1", s):
logger.error(msg_not_active)
@@ -285,7 +282,7 @@ def main():
verify_deployment()
install_rally()
- with open(ENV_FILE, "w") as env_file:
+ with open(ft_constants.ENV_FILE, "w") as env_file:
env_file.write("1")
check_environment()
@@ -295,5 +292,6 @@ def main():
exit(0)
+
if __name__ == '__main__':
main()
diff --git a/functest/ci/run_tests.py b/functest/ci/run_tests.py
index 015b5840..da9d28a9 100644
--- a/functest/ci/run_tests.py
+++ b/functest/ci/run_tests.py
@@ -21,6 +21,7 @@ import functest.ci.tier_builder as tb
import functest.core.TestCasesBase as TestCasesBase
import functest.utils.functest_logger as ft_logger
import functest.utils.functest_utils as ft_utils
+import functest.utils.functest_constants as ft_constants
import functest.utils.openstack_clean as os_clean
import functest.utils.openstack_snapshot as os_snapshot
import functest.utils.openstack_utils as os_utils
@@ -43,14 +44,17 @@ logger = ft_logger.Logger("run_tests").getLogger()
""" global variables """
-EXEC_SCRIPT = ("%s/functest/ci/exec_test.sh" % ft_utils.FUNCTEST_REPO)
-CLEAN_FLAG = True
-REPORT_FLAG = False
-EXECUTED_TEST_CASES = []
+EXEC_SCRIPT = ("%s/functest/ci/exec_test.sh" % ft_constants.FUNCTEST_REPO_DIR)
# This will be the return code of this script. If any of the tests fails,
# this variable will change to -1
-OVERALL_RESULT = 0
+
+
+class GlobalVariables:
+ EXECUTED_TEST_CASES = []
+ OVERALL_RESULT = 0
+ CLEAN_FLAG = True
+ REPORT_FLAG = False
def print_separator(str, count=45):
@@ -61,12 +65,26 @@ def print_separator(str, count=45):
def source_rc_file():
- rc_file = os.getenv('creds')
+ rc_file = ft_constants.OPENSTACK_CREDS
if not os.path.isfile(rc_file):
logger.error("RC file %s does not exist..." % rc_file)
sys.exit(1)
logger.debug("Sourcing the OpenStack RC file...")
- os_utils.source_credentials(rc_file)
+ creds = os_utils.source_credentials(rc_file)
+ for key, value in creds.iteritems():
+ if re.search("OS_", key):
+ if key == 'OS_AUTH_URL':
+ ft_constants.OS_AUTH_URL = value
+ elif key == 'OS_USERNAME':
+ ft_constants.OS_USERNAME = value
+ elif key == 'OS_TENANT_NAME':
+ ft_constants.OS_TENANT_NAME = value
+ elif key == 'OS_PASSWORD':
+ ft_constants.OS_PASSWORD = value
+ logger.debug("OS_AUTH_URL:%s" % ft_constants.OS_AUTH_URL)
+ logger.debug("OS_USERNAME:%s" % ft_constants.OS_USERNAME)
+ logger.debug("OS_TENANT_NAME:%s" % ft_constants.OS_TENANT_NAME)
+ logger.debug("OS_PASSWORD:%s" % ft_constants.OS_PASSWORD)
def generate_os_snapshot():
@@ -78,7 +96,7 @@ def cleanup():
def update_test_info(test_name, result, duration):
- for test in EXECUTED_TEST_CASES:
+ for test in GlobalVariables.EXECUTED_TEST_CASES:
if test['test_name'] == test_name:
test.update({"result": result,
"duration": duration})
@@ -98,7 +116,6 @@ def get_run_dict_if_defined(testname):
def run_test(test, tier_name):
- global OVERALL_RESULT, EXECUTED_TEST_CASES
result_str = "PASS"
start = datetime.datetime.now()
test_name = test.get_name()
@@ -108,11 +125,11 @@ def run_test(test, tier_name):
print_separator("=")
logger.debug("\n%s" % test)
- if CLEAN_FLAG:
+ if GlobalVariables.CLEAN_FLAG:
generate_os_snapshot()
flags = (" -t %s" % (test_name))
- if REPORT_FLAG:
+ if GlobalVariables.REPORT_FLAG:
flags += " -r"
result = TestCasesBase.TestCasesBase.EX_RUN_ERROR
@@ -123,7 +140,9 @@ def run_test(test, tier_name):
cls = getattr(module, run_dict['class'])
test_case = cls()
result = test_case.run()
- if result != TestCasesBase.TestCasesBase.EX_SKIP and REPORT_FLAG:
+
+ if result != TestCasesBase.TestCasesBase.EX_SKIP and \
+ GlobalVariables.REPORT_FLAG:
test_case.push_to_db()
except ImportError:
logger.exception("Cannot import module {}".format(
@@ -138,7 +157,7 @@ def run_test(test, tier_name):
cmd, test_name))
result = ft_utils.execute_command(cmd)
- if CLEAN_FLAG:
+ if GlobalVariables.CLEAN_FLAG:
cleanup()
end = datetime.datetime.now()
duration = (end - start).seconds
@@ -156,7 +175,7 @@ def run_test(test, tier_name):
"execution.")
# if it is a single test we don't print the whole results table
update_test_info(test_name, result_str, duration_str)
- generate_report.main(EXECUTED_TEST_CASES)
+ generate_report.main(GlobalVariables.EXECUTED_TEST_CASES)
logger.info("Execution exit value: %s" % OVERALL_RESULT)
sys.exit(OVERALL_RESULT)
@@ -180,9 +199,8 @@ def run_tier(tier):
def run_all(tiers):
- global EXECUTED_TEST_CASES
summary = ""
- BUILD_TAG = os.getenv('BUILD_TAG')
+ BUILD_TAG = ft_constants.CI_BUILD_TAG
if BUILD_TAG is not None and re.search("daily", BUILD_TAG) is not None:
CI_LOOP = "daily"
else:
@@ -199,28 +217,26 @@ def run_all(tiers):
tier.get_test_names()))
logger.info("Tests to be executed:%s" % summary)
- EXECUTED_TEST_CASES = generate_report.init(tiers_to_run)
+ GlobalVariables.EXECUTED_TEST_CASES = generate_report.init(tiers_to_run)
for tier in tiers_to_run:
run_tier(tier)
- generate_report.main(EXECUTED_TEST_CASES)
+ generate_report.main(GlobalVariables.EXECUTED_TEST_CASES)
def main():
- global CLEAN_FLAG
- global REPORT_FLAG
- CI_INSTALLER_TYPE = os.getenv('INSTALLER_TYPE')
- CI_SCENARIO = os.getenv('DEPLOY_SCENARIO')
+ CI_INSTALLER_TYPE = ft_constants.CI_INSTALLER_TYPE
+ CI_SCENARIO = ft_constants.CI_SCENARIO
- file = ft_utils.get_testcases_file()
+ file = ft_constants.FUNCTEST_TESTCASES_YAML
_tiers = tb.TierBuilder(CI_INSTALLER_TYPE, CI_SCENARIO, file)
if args.noclean:
- CLEAN_FLAG = False
+ GlobalVariables.CLEAN_FLAG = False
if args.report:
- REPORT_FLAG = True
+ GlobalVariables.REPORT_FLAG = True
if args.test:
source_rc_file()
@@ -242,8 +258,9 @@ def main():
else:
run_all(_tiers)
- logger.info("Execution exit value: %s" % OVERALL_RESULT)
- sys.exit(OVERALL_RESULT)
+ logger.info("Execution exit value: %s" % GlobalVariables.OVERALL_RESULT)
+ sys.exit(GlobalVariables.OVERALL_RESULT)
+
if __name__ == '__main__':
main()
diff --git a/functest/ci/testcases.yaml b/functest/ci/testcases.yaml
index 195108b4..a5ddcf23 100644..100755
--- a/functest/ci/testcases.yaml
+++ b/functest/ci/testcases.yaml
@@ -151,7 +151,7 @@ tiers:
dependencies:
installer: '(fuel)|(apex)'
scenario: 'bgpvpn'
- run:
+ run:
module: 'functest.opnfv_tests.features.sdnvpn'
class: 'SDNVPN'
diff --git a/functest/ci/tier_builder.py b/functest/ci/tier_builder.py
index e1c3e49e..e1c3e49e 100644..100755
--- a/functest/ci/tier_builder.py
+++ b/functest/ci/tier_builder.py
diff --git a/functest/ci/tier_handler.py b/functest/ci/tier_handler.py
index 1eadfba5..1eadfba5 100644..100755
--- a/functest/ci/tier_handler.py
+++ b/functest/ci/tier_handler.py