diff options
Diffstat (limited to 'functest/ci')
-rwxr-xr-x[-rw-r--r--] | functest/ci/__init__.py | 0 | ||||
-rwxr-xr-x[-rw-r--r--] | functest/ci/check_os.sh | 0 | ||||
-rwxr-xr-x[-rw-r--r--] | functest/ci/config_functest.yaml | 405 | ||||
-rwxr-xr-x[-rw-r--r--] | functest/ci/config_patch.yaml | 0 | ||||
-rw-r--r-- | functest/ci/exec_test.sh | 17 | ||||
-rwxr-xr-x[-rw-r--r--] | functest/ci/generate_report.py | 63 | ||||
-rwxr-xr-x[-rw-r--r--] | functest/ci/prepare_env.py | 158 | ||||
-rw-r--r-- | functest/ci/run_tests.py | 71 | ||||
-rwxr-xr-x[-rw-r--r--] | functest/ci/testcases.yaml | 2 | ||||
-rwxr-xr-x[-rw-r--r--] | functest/ci/tier_builder.py | 0 | ||||
-rwxr-xr-x[-rw-r--r--] | functest/ci/tier_handler.py | 0 |
11 files changed, 371 insertions, 345 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..cc885c4c 100644 --- a/functest/ci/exec_test.sh +++ b/functest/ci/exec_test.sh @@ -36,8 +36,8 @@ if [[ "${CI_DEBUG,,}" == "true" ]];then debug="--debug" fi -FUNCTEST_REPO_DIR=${repos_dir}/functest -FUNCTEST_TEST_DIR=${repos_dir}/functest/functest/opnfv_tests +FUNCTEST_REPO_DIR=${REPOS_DIR}/functest +FUNCTEST_TEST_DIR=${REPOS_DIR}/functest/functest/opnfv_tests FUNCTEST_CONF_DIR=/home/opnfv/functest/conf export PYTHONUNBUFFERED=1 @@ -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 |