diff options
Diffstat (limited to 'functest/ci')
-rw-r--r-- | functest/ci/__init__.py | 0 | ||||
-rw-r--r-- | functest/ci/add_proxy.sh | 138 | ||||
-rw-r--r-- | functest/ci/check_deployment.py | 184 | ||||
-rw-r--r-- | functest/ci/config_aarch64_patch.yaml | 151 | ||||
-rw-r--r-- | functest/ci/config_functest.yaml | 123 | ||||
-rw-r--r-- | functest/ci/config_patch.yaml | 516 | ||||
-rw-r--r-- | functest/ci/convert_images.sh | 13 | ||||
-rw-r--r-- | functest/ci/download_images.sh | 25 | ||||
-rw-r--r-- | functest/ci/logging.debug.ini | 110 | ||||
-rw-r--r-- | functest/ci/logging.ini | 48 | ||||
-rw-r--r-- | functest/ci/rally_aarch64_patch.conf | 2 | ||||
-rw-r--r-- | functest/ci/run_tests.py | 289 | ||||
-rw-r--r-- | functest/ci/testcases.yaml | 1082 | ||||
-rw-r--r-- | functest/ci/tier_builder.py | 107 | ||||
-rw-r--r-- | functest/ci/tier_handler.py | 174 |
15 files changed, 1804 insertions, 1158 deletions
diff --git a/functest/ci/__init__.py b/functest/ci/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/functest/ci/__init__.py +++ /dev/null diff --git a/functest/ci/add_proxy.sh b/functest/ci/add_proxy.sh new file mode 100644 index 000000000..9d7db22e4 --- /dev/null +++ b/functest/ci/add_proxy.sh @@ -0,0 +1,138 @@ +#!/bin/sh + +set -e + +initdir=$(pwd) +cd "${1:-/home/opnfv/functest/images}" + +http_proxy_host=${http_proxy_host:-proxy} +http_proxy_port=${http_proxy_port:-8080} + +http_proxy=http://${http_proxy_host}:${http_proxy_port} +https_proxy=${https_proxy:-${http_proxy:-http://proxy:8080}} +ftp_proxy=${ftp_proxy:-${http_proxy:-http://proxy:8080}} +no_proxy=${no_proxy:-"10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"} + +images=${images-"\ +ubuntu-14.04-server-cloudimg-amd64-disk1.img \ +ubuntu-16.04-server-cloudimg-amd64-disk1.img"} + +add_proxy () { + cat << EOF >> "$1" +http_proxy=${http_proxy} +HTTP_PROXY=${http_proxy} +https_proxy=${https_proxy} +HTTPS_PROXY=${https_proxy} +ftp_proxy=${ftp_proxy} +FTP_PROXY=${ftp_proxy} +no_proxy=${no_proxy} +NO_PROXY=${no_proxy} +EOF +} + +add_proxy_apt () { + cat << EOF >> "$1" +Acquire::http::Proxy "${http_proxy}"; +Acquire::https::Proxy "${https_proxy}"; +EOF +} + +add_proxy_juju_env () { + cat << EOF >> "$1" +export no_proxy="${no_proxy}"; +export NO_PROXY="${no_proxy}"; +EOF +} + +add_proxy_juju_systemd () { + cat << EOF >> "$1" +[Manager] +DefaultEnvironment="no_proxy='${no_proxy}'" "NO_PROXY='${no_proxy}'" +EOF +} + +add_proxy_maven () { + cat << EOF >> "$1" +<settings> + <proxies> + <proxy> + <id>example-proxy</id> + <active>true</active> + <protocol>http</protocol> + <host>"${http_proxy_host}"</host> + <port>"${http_proxy_port}"</port> + </proxy> + </proxies> +</settings> +EOF +} + +add_proxy_svn () { + cat << EOF >> "$1" +[global] +http-proxy-host = "${http_proxy_host}" +http-proxy-port = "${http_proxy_port}" +EOF +} + +add_proxy_pip () { + cat << EOF >> "$1" +[global] +proxy="${http_proxy}" +EOF +} + +tmpdir=$(mktemp -d) +for image in $images; do + if [ ! -f "$image" ]; then + echo "skip ${image} ($(pwd)/${image} not found)" + continue + fi + guestmount -a "${image}" -i --rw "${tmpdir}" + add_proxy "${tmpdir}/etc/environment" + if expr "$image" : 'ubuntu' ; then + add_proxy_apt "${tmpdir}/etc/apt/apt.conf" + add_proxy_juju_env "${tmpdir}/etc/juju-proxy.conf" + add_proxy_juju_systemd "${tmpdir}/etc/juju-proxy-systemd.conf" + mkdir -p ${tmpdir}/root/.m2 + mkdir -p ${tmpdir}/root/.subversion + add_proxy_maven "${tmpdir}/root/.m2/settings.xml" + add_proxy_svn "${tmpdir}/root/.subversion/servers" + add_proxy_pip "${tmpdir}/etc/pip.conf" + fi + guestunmount "${tmpdir}" +done + +if [ -f cloudify-docker-manager-community-19.01.24.tar ]; then + sudo docker load -i cloudify-docker-manager-community-19.01.24.tar + dockerfile=${tmpdir}/Dockerfile + cat << EOF > $dockerfile +FROM docker-cfy-manager:latest +ENV HTTP_PROXY "${http_proxy}" +ENV HTTPS_PROXY "${https_proxy}" +ENV NO_PROXY "${no_proxy}" +EOF + for f in /etc/sysconfig/cloudify-mgmtworker /etc/sysconfig/cloudify-restservice; do \ + cat << EOF >> $dockerfile +RUN echo >> $f +RUN echo "http_proxy=${http_proxy}" >> $f +RUN echo "https_proxy=${https_proxy}" >> $f +RUN echo "HTTP_PROXY=${http_proxy}" >> $f +RUN echo "HTTPS_PROXY=${https_proxy}" >> $f +RUN echo "no_proxy=${no_proxy}" >> $f +EOF + done + sudo docker build -t docker-cfy-manager -f $dockerfile ${tmpdir} + sudo docker save \ + docker-cfy-manager > cloudify-docker-manager-community-19.01.24.tar + sudo docker rmi docker-cfy-manager + + rm "${dockerfile}" +else + echo "skip cloudify-docker-manager-community-19.01.24.tar \ + ($(pwd)/cloudify-docker-manager-community-19.01.24.tar not found)" +fi + +rmdir "${tmpdir}" +cd initdir + diff --git a/functest/ci/check_deployment.py b/functest/ci/check_deployment.py deleted file mode 100644 index 9453c6d49..000000000 --- a/functest/ci/check_deployment.py +++ /dev/null @@ -1,184 +0,0 @@ -#!/usr/bin/env python - -# Copyright (c) 2017 Ericsson and others. -# -# 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 - -""" -OpenStack deployment checker - -Verifies that: - - Credentials file is given and contains the right information - - OpenStack endpoints are reachable -""" - -import logging -import logging.config -import os -import pkg_resources -from six.moves import urllib -import socket - -from functest.opnfv_tests.openstack.snaps import snaps_utils - -from snaps.openstack.tests import openstack_tests -from snaps.openstack.utils import glance_utils -from snaps.openstack.utils import keystone_utils -from snaps.openstack.utils import neutron_utils -from snaps.openstack.utils import nova_utils - -__author__ = "Jose Lausuch <jose.lausuch@ericsson.com>" - -LOGGER = logging.getLogger(__name__) - - -def verify_connectivity(endpoint): - """ Returns true if an hostname/port is reachable""" - connection = socket.socket() - connection.settimeout(10) - hostname = urllib.parse.urlparse(endpoint).hostname - port = urllib.parse.urlparse(endpoint).port - if not port: - port = 443 if urllib.parse.urlparse(endpoint).scheme == "https" else 80 - try: - connection.connect((hostname, port)) - LOGGER.debug('%s:%s is reachable!', hostname, port) - return True - except socket.error: - LOGGER.exception('%s:%s is not reachable.', hostname, port) - return False - - -def get_auth_token(os_creds): - """ Get auth token """ - sess = keystone_utils.keystone_session(os_creds) - try: - return sess.get_token() - except Exception as error: - LOGGER.error("Got token ...FAILED") - raise error - - -class CheckDeployment(object): - """ Check deployment class.""" - - def __init__(self, rc_file='/home/opnfv/functest/conf/openstack.creds'): - self.rc_file = rc_file - self.services = ('compute', 'network', 'image') - self.os_creds = None - - def check_rc(self): - """ Check if RC file exists and contains OS_AUTH_URL """ - if not os.path.isfile(self.rc_file): - raise IOError('RC file {} does not exist!'.format(self.rc_file)) - if 'OS_AUTH_URL' not in open(self.rc_file).read(): - raise SyntaxError('OS_AUTH_URL not defined in {}.'. - format(self.rc_file)) - - def check_auth_endpoint(self): - """ Verifies connectivity to the OS_AUTH_URL given in the RC file - and get auth token""" - rc_endpoint = self.os_creds.auth_url - if not verify_connectivity(rc_endpoint): - raise Exception("OS_AUTH_URL {} is not reachable.". - format(rc_endpoint)) - LOGGER.info("Connectivity to OS_AUTH_URL %s ...OK", rc_endpoint) - if get_auth_token(self.os_creds): - LOGGER.info("Got token ...OK") - - def check_public_endpoint(self): - """ Gets the public endpoint and verifies connectivity to it """ - public_endpoint = keystone_utils.get_endpoint(self.os_creds, - 'identity', - interface='public') - if not verify_connectivity(public_endpoint): - raise Exception("Public endpoint {} is not reachable.". - format(public_endpoint)) - LOGGER.info("Connectivity to the public endpoint %s ...OK", - public_endpoint) - - def check_service_endpoint(self, service): - """ Verifies connectivity to a given openstack service """ - endpoint = keystone_utils.get_endpoint(self.os_creds, - service, - interface='public') - if not verify_connectivity(endpoint): - raise Exception("{} endpoint {} is not reachable.". - format(service, endpoint)) - LOGGER.info("Connectivity to endpoint '%s' %s ...OK", - service, endpoint) - - def check_nova(self): - """ checks that a simple nova operation works """ - try: - client = nova_utils.nova_client(self.os_creds) - client.servers.list() - LOGGER.info("Nova service ...OK") - except Exception as error: - LOGGER.error("Nova service ...FAILED") - raise error - - def check_neutron(self): - """ checks that a simple neutron operation works """ - try: - client = neutron_utils.neutron_client(self.os_creds) - client.list_networks() - LOGGER.info("Neutron service ...OK") - except Exception as error: - LOGGER.error("Neutron service ...FAILED") - raise error - - def check_glance(self): - """ checks that a simple glance operation works """ - try: - client = glance_utils.glance_client(self.os_creds) - client.images.list() - LOGGER.info("Glance service ...OK") - except Exception as error: - LOGGER.error("Glance service ...FAILED") - raise error - - def check_ext_net(self): - """ checks if external network exists """ - ext_net = snaps_utils.get_ext_net_name(self.os_creds) - if ext_net: - LOGGER.info("External network found: %s", ext_net) - else: - raise Exception("ERROR: No external networks in the deployment.") - - def check_all(self): - """ - Calls all the class functions and returns 0 if all of them succeed. - This is the method called by CLI - """ - self.check_rc() - try: - self.os_creds = openstack_tests.get_credentials( - os_env_file=self.rc_file, - proxy_settings_str=None, - ssh_proxy_cmd=None) - except: - raise Exception("Problem while getting credentials object.") - if self.os_creds is None: - raise Exception("Credentials is None.") - self.check_auth_endpoint() - self.check_public_endpoint() - for service in self.services: - self.check_service_endpoint(service) - self.check_nova() - self.check_neutron() - self.check_glance() - self.check_ext_net() - return 0 - - -def main(): - """Entry point""" - logging.config.fileConfig(pkg_resources.resource_filename( - 'functest', 'ci/logging.ini')) - logging.captureWarnings(True) - deployment = CheckDeployment() - return deployment.check_all() diff --git a/functest/ci/config_aarch64_patch.yaml b/functest/ci/config_aarch64_patch.yaml index a87fe25be..278265620 100644 --- a/functest/ci/config_aarch64_patch.yaml +++ b/functest/ci/config_aarch64_patch.yaml @@ -1,56 +1,99 @@ --- os: - general: - openstack: - image_name: TestVM - image_file_name: cirros-d161201-aarch64-disk.img - image_password: gocubsgo - extra_properties: - hw_firmware_type: 'uefi' - hw_video_model: 'vga' - short_id: 'ubuntu16.04' - snaps: - images: - glance_tests: - disk_file: - /home/opnfv/functest/images/cirros-d161201-aarch64-disk.img - extra_properties: - hw_firmware_type: 'uefi' - short_id: 'ubuntu16.04' - hw_video_model: 'vga' - cirros: - disk_file: - /home/opnfv/functest/images/cirros-d161201-aarch64-disk.img - extra_properties: - hw_firmware_type: 'uefi' - short_id: 'ubuntu16.04' - hw_video_model: 'vga' - ubuntu: - disk_file: - /home/opnfv/functest/images/ubuntu-14.04-server-cloudimg-arm64-uefi1.img - extra_properties: - hw_firmware_type: 'uefi' - hw_video_model: 'vga' - centos: - disk_file: - /home/opnfv/functest/images/CentOS-7-aarch64-GenericCloud.qcow2 - extra_properties: - hw_firmware_type: 'uefi' - hw_video_model: 'vga' - - vping: - image_name: TestVM - - tempest: - use_custom_flavors: 'True' - - odl_sfc: - image_base_url: "http://artifacts.opnfv.org/sfc/demo" - image_name: sfc_nsh_danube - image_file_name: sf_nsh_danube_arm64.img - image_initrd: sf_nsh_danube_arm64-initrd - image_kernel: sf_nsh_danube_arm64-kernel - image_format: ami - os_cmd_line: 'root=LABEL=cloudimg-rootfs ro' - doctor: - image_name: TestVM + vmready1: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + vmready2: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + singlevm1: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + singlevm2: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + vping_ssh: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + vping_userdata: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + cinder_test: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + tempest_smoke: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + tempest_horizon: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + tempest_neutron: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + tempest_cinder: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + tempest_keystone: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + tempest_heat: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: + /home/opnfv/functest/images/Fedora-Cloud-Base-30-1.2.aarch64.qcow2 + tempest_telemetry: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + rally_sanity: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + refstack_compute: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + refstack_object: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + refstack_platform: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + tempest_full: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + tempest_scenario: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + tempest_slow: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + patrole: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + tempest_barbican: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + tempest_octavia: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + tempest_neutron_cntt: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + tempest_cinder_cntt: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + tempest_keystone_cntt: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + tempest_heat_cntt: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: + /home/opnfv/functest/images/Fedora-Cloud-Base-30-1.2.aarch64.qcow2 + rally_sanity_cntt: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + tempest_full_cntt: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + tempest_scenario_cntt: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + tempest_slow_cntt: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + image_alt: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + rally_full: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + rally_jobs: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + rally_full_cntt: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img + rally_jobs_cntt: + image: /home/opnfv/functest/images/cirros-0.5.1-aarch64-disk.img diff --git a/functest/ci/config_functest.yaml b/functest/ci/config_functest.yaml index cf6b13287..647301ab4 100644 --- a/functest/ci/config_functest.yaml +++ b/functest/ci/config_functest.yaml @@ -11,18 +11,17 @@ general: functest_conf: /home/opnfv/functest/conf functest_data: /home/opnfv/functest/data ims_data: /home/opnfv/functest/data/ims/ - router_data: /home/opnfv/functest/data/router/ + rally_data: /home/opnfv/functest/data/rally + refstack_data: /home/opnfv/functest/data/refstack + router_data: /home/opnfv/functest/data/router/opnfv-vnf-data functest_images: /home/opnfv/functest/images rally_inst: /root/.rally openstack: - creds: /home/opnfv/functest/conf/openstack.creds - - image_name: Cirros-0.4.0 - image_name_alt: Cirros-0.4.0-1 - image_file_name: cirros-0.4.0-x86_64-disk.img - image_url: - http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img + image_name: Cirros-0.5.1 + image_name_alt: Cirros-0.5.1-1 + image_file_name: cirros-0.5.1-x86_64-disk.img + image_url: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.img image_user: cirros image_disk_format: qcow2 image_username: cirros @@ -43,45 +42,6 @@ general: neutron_private_subnet_gateway: 192.168.120.254 neutron_router_name: functest-router -snaps: - use_keystone: 'True' - use_floating_ips: 'True' - images: - glance_tests: - disk_file: /home/opnfv/functest/images/cirros-0.4.0-x86_64-disk.img - cirros: - disk_file: /home/opnfv/functest/images/cirros-0.4.0-x86_64-disk.img - ubuntu: - disk_file: - /home/opnfv/functest/images/ubuntu-14.04-server-cloudimg-amd64-disk1.img - centos: - disk_file: - /home/opnfv/functest/images/CentOS-7-x86_64-GenericCloud.qcow2 - # netconf_override: - # network_type: vlan - # physical_network: physnet2 - # segmentation_id: 2366 - -# All of these values are optional and will override the values retrieved -# by the RC file -# os_creds_override: -# username: {user} -# password: {password} -# auth_url: {auth_url} -# project_name: {project_name} -# identity_api_version: {2|3} -# network_api_version: {2} -# compute_api_version: {2} -# image_api_version: {1|2} -# user_domain_id: {user_domain_id} -# project_domain_id: {projects_domain_id} -# interface: {interface} -# cacert: {True|False} -# proxy_settings: -# host: {proxy_host} -# port: {proxy_port} -# ssh_proxy_cmd: {OpenSSH -o ProxyCommand value} - vping: ping_timeout: 200 vm_flavor: m1.tiny # adapt to your environment @@ -95,9 +55,9 @@ vping: private_subnet_name: vping-subnet private_subnet_cidr: 192.168.130.0/24 router_name: vping-router - sg_name: vPing-sg + sg_name: vping-sg sg_desc: Security group for vPing test case - keypair_name: vPing-keypair + keypair_name: vping-keypair keypair_priv_file: /tmp/vPing-keypair keypair_pub_file: /tmp/vPing-keypair.pub vm_boot_timeout: 180 @@ -105,6 +65,24 @@ vping: vm_ssh_connect_timeout: 60 cleanup_objects: 'True' +cinder: + vm_name_1: opnfv-cinder-1 + vm_name_2: opnfv-cinder-2 + image_name: functest-cinder + private_net_name: cinder-net + private_subnet_name: cinder-subnet + private_subnet_cidr: 192.168.130.0/24 + router_name: cinder-router + sg_name: cinder-sg + sg_desc: Security group for CinderCheck test case + keypair_name: cinder-keypair + keypair_priv_file: /tmp/CinderCheck-keypair + keypair_pub_file: /tmp/CinderCheck-keypair.pub + vm_boot_timeout: 180 + vm_delete_timeout: 100 + vm_ssh_connect_timeout: 60 + cleanup_objects: 'True' + odl_sfc: image_base_url: "http://artifacts.opnfv.org/sfc/images" image_name: sfc_nsh_danube @@ -113,36 +91,9 @@ odl_sfc: tempest: verifier_name: opnfv-tempest - identity: - tenant_name: tempest - tenant_description: Tenant for Tempest test suite - user_name: tempest - user_password: Tempest123! - validation: - ssh_timeout: 130 - object_storage: - operator_role: SwiftOperator - # network_type: vlan - # physical_network: physnet2 - # segmentation_id: 2366 - private_net_name: tempest-net - private_subnet_name: tempest-subnet - private_subnet_cidr: 192.168.150.0/24 - router_name: tempest-router - use_custom_flavors: 'False' - volume_device_name: vdc rally: deployment_name: opnfv-rally - network_name: rally-net - # network_type: vlan - # physical_network: physnet2 - # segmentation_id: 2366 - subnet_name: rally-subnet - subnet_cidr: 192.168.140.0/24 - router_name: rally-router - flavor_name: rally-tiny - flavor_alt_name: rally-mini vnf: juju_epc: @@ -153,17 +104,12 @@ vnf: private_subnet_cidr: 172.16.0.0/24 private_subnet_name: abot-subnet external_router: abot-router - external_network_name: ext-net - dns_nameserver: ['8.8.8.8'] - cloudify_ims: tenant_name: cloudify_ims tenant_description: vIMS config: cloudify_ims.yaml - cloudify_ims_perf: - tenant_name: cloudify_ims_perf - tenant_description: vIMS - config: cloudify_ims_perf.yaml + heat_ims: + config: heat_ims.yaml orchestra_openims: tenant_name: orchestra_openims tenant_description: OpenIMS deployed with Open Baton @@ -187,14 +133,3 @@ example: router_name: example-router sg_name: example-sg sg_desc: Example Security group - -results: - # you can also set a file (e.g. /home/opnfv/functest/results/dump.txt) - # to dump results - # test_db_url: file:///home/opnfv/functest/results/dump.txt - test_db_url: http://testresults.opnfv.org/test/api/v1/results - -energy_recorder: - api_url: http://energy.opnfv.fr/resources - api_user: "" - api_password: "" diff --git a/functest/ci/config_patch.yaml b/functest/ci/config_patch.yaml index 32b67057f..d5335c3ab 100644 --- a/functest/ci/config_patch.yaml +++ b/functest/ci/config_patch.yaml @@ -1,20 +1,504 @@ --- -lxd: - general: - openstack: - image_name: Cirros-0.4.0 - image_file_name: cirros-0.4.0-x86_64-lxc.tar.gz - image_disk_format: raw +gsma: + tempest_smoke: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + tempest_horizon: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + tempest_neutron: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + tempest_cinder: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + tempest_keystone: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + tempest_heat: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + tempest_telemetry: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + rally_sanity: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + refstack_compute: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + refstack_object: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + refstack_platform: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + tempest_full: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + tempest_scenario: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + tempest_slow: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + patrole: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + tempest_barbican: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + tempest_octavia: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + tempest_neutron_cntt: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + tempest_cinder_cntt: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + tempest_keystone_cntt: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + tempest_heat_cntt: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + rally_sanity_cntt: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + tempest_full_cntt: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + tempest_scenario_cntt: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + tempest_slow_cntt: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + rally_full: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + rally_jobs: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + vmtp: + flavor_ram: 2048 + flavor_vcpus: 1 + flavor_disk: 40 + shaker: + flavor_ram: 2048 + flavor_vcpus: 1 + flavor_disk: 40 + rally_full_cntt: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + rally_jobs_cntt: + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + cloudify: + flavor_ram: 4096 + flavor_vcpus: 2 + flavor_disk: 40 + cloudify_ims: + flavor_ram: 4096 + flavor_vcpus: 2 + flavor_disk: 40 + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + heat_ims: + flavor_ram: 2048 + flavor_vcpus: 1 + flavor_disk: 40 + vyos_vrouter: + flavor_ram: 4096 + flavor_vcpus: 2 + flavor_disk: 40 + flavor_alt_ram: 2048 + flavor_alt_vcpus: 1 + flavor_alt_disk: 40 + juju_epc: + flavor_ram: 2048 + flavor_vcpus: 1 + flavor_disk: 40 + flavor_alt_ram: 4096 + flavor_alt_vcpus: 2 + flavor_alt_disk: 40 fdio: - general: - flavor_extra_specs: {'hw:mem_page_size':'large'} - image_properties: {'hw_mem_page_size':'large'} - tempest: - use_custom_flavors: 'True' + vmready1: + flavor_ram: 1024 + vmready2: + flavor_ram: 1024 + singlevm1: + flavor_ram: 1024 + singlevm2: + flavor_ram: 1024 + vping_ssh: + flavor_ram: 1024 + vping_userdata: + flavor_ram: 1024 + cinder_test: + flavor_ram: 1024 + tempest_smoke: + flavor_ram: 1024 + tempest_horizon: + flavor_ram: 1024 + tempest_neutron: + flavor_ram: 1024 + tempest_cinder: + flavor_ram: 1024 + tempest_keystone: + flavor_ram: 1024 + tempest_heat: + flavor_ram: 1024 + tempest_telemetry: + flavor_ram: 1024 + rally_sanity: + flavor_ram: 1024 + refstack_compute: + flavor_ram: 1024 + refstack_object: + flavor_ram: 1024 + refstack_platform: + flavor_ram: 1024 + tempest_full: + flavor_ram: 1024 + tempest_scenario: + flavor_ram: 1024 + tempest_slow: + flavor_ram: 1024 + patrole: + flavor_ram: 1024 + tempest_barbican: + flavor_ram: 1024 + tempest_octavia: + flavor_ram: 1024 + tempest_neutron_cntt: + flavor_ram: 1024 + tempest_cinder_cntt: + flavor_ram: 1024 + tempest_keystone_cntt: + flavor_ram: 1024 + tempest_heat_cntt: + flavor_ram: 1024 + rally_sanity_cntt: + flavor_ram: 1024 + tempest_full_cntt: + flavor_ram: 1024 + tempest_scenario_cntt: + flavor_ram: 1024 + tempest_slow_cntt: + flavor_ram: 1024 + rally_full: + flavor_ram: 1024 + rally_jobs: + flavor_ram: 1024 + vmtp: + flavor_ram: 2048 + shaker: + flavor_ram: 1024 + rally_full_cntt: + flavor_ram: 1024 + rally_jobs_cntt: + flavor_ram: 1024 + ovs: - general: - flavor_extra_specs: {'hw:mem_page_size':'large'} - image_properties: {'hw_mem_page_size':'large'} - tempest: - use_custom_flavors: 'True' + vmready1: + flavor_ram: 1024 + vmready2: + flavor_ram: 1024 + singlevm1: + flavor_ram: 1024 + singlevm2: + flavor_ram: 1024 + vping_ssh: + flavor_ram: 1024 + vping_userdata: + flavor_ram: 1024 + cinder_test: + flavor_ram: 1024 + tempest_smoke: + flavor_ram: 1024 + tempest_horizon: + flavor_ram: 1024 + tempest_neutron: + flavor_ram: 1024 + tempest_cinder: + flavor_ram: 1024 + tempest_keystone: + flavor_ram: 1024 + tempest_heat: + flavor_ram: 1024 + tempest_telemetry: + flavor_ram: 1024 + rally_sanity: + flavor_ram: 1024 + refstack_compute: + flavor_ram: 1024 + refstack_object: + flavor_ram: 1024 + refstack_platform: + flavor_ram: 1024 + tempest_full: + flavor_ram: 1024 + tempest_scenario: + flavor_ram: 1024 + tempest_slow: + flavor_ram: 1024 + patrole: + flavor_ram: 1024 + tempest_barbican: + flavor_ram: 1024 + tempest_octavia: + flavor_ram: 1024 + tempest_neutron_cntt: + flavor_ram: 1024 + tempest_cinder_cntt: + flavor_ram: 1024 + tempest_keystone_cntt: + flavor_ram: 1024 + tempest_heat_cntt: + flavor_ram: 1024 + rally_sanity_cntt: + flavor_ram: 1024 + tempest_full_cntt: + flavor_ram: 1024 + tempest_scenario_cntt: + flavor_ram: 1024 + tempest_slow_cntt: + flavor_ram: 1024 + rally_full: + flavor_ram: 1024 + rally_jobs: + flavor_ram: 1024 + vmtp: + flavor_ram: 2048 + shaker: + flavor_ram: 1024 + rally_full_cntt: + flavor_ram: 1024 + rally_jobs_cntt: + flavor_ram: 1024 + +vio: + vmready1: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + vmready2: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + singlevm1: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + singlevm2: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + vping_ssh: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + vping_userdata: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + cinder_test: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + tempest_smoke: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_alt_format: vmdk + tempest_horizon: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_alt_format: vmdk + tempest_neutron: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_alt_format: vmdk + tempest_cinder: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_alt_format: vmdk + tempest_keystone: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_alt_format: vmdk + tempest_heat: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: + /home/opnfv/functest/images/Fedora-Cloud-Base-30-1.2.x86_64.vmdk + image_alt_format: vmdk + tempest_telemetry: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_alt_format: vmdk + rally_sanity: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + refstack_compute: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_alt_format: vmdk + refstack_object: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_alt_format: vmdk + refstack_platform: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_alt_format: vmdk + tempest_full: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_alt_format: vmdk + tempest_scenario: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_alt_format: vmdk + tempest_slow: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_alt_format: vmdk + patrole: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_alt_format: vmdk + tempest_barbican: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_alt_format: vmdk + tempest_octavia: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_alt_format: vmdk + tempest_neutron_cntt: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_alt_format: vmdk + tempest_cinder_cntt: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_alt_format: vmdk + tempest_keystone_cntt: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_alt_format: vmdk + tempest_heat_cntt: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: + /home/opnfv/functest/images/Fedora-Cloud-Base-30-1.2.x86_64.vmdk + image_alt_format: vmdk + rally_sanity_cntt: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + tempest_full_cntt: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_alt_format: vmdk + tempest_scenario_cntt: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_alt_format: vmdk + tempest_slow_cntt: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + image_alt: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_alt_format: vmdk + rally_full: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + rally_jobs: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + vmtp: + image: + /home/opnfv/functest/images/ubuntu-14.04-server-cloudimg-amd64-disk1.vmdk + image_format: vmdk + shaker: + image: /home/opnfv/functest/images/shaker-image.vmdk + image_format: vmdk + rally_full_cntt: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + rally_jobs_cntt: + image: /home/opnfv/functest/images/cirros-0.5.1-x86_64-disk.vmdk + image_format: vmdk + cloudify: + image: + /home/opnfv/functest/images/ubuntu-16.04-server-cloudimg-amd64-disk1.vmdk + image_format: vmdk + cloudify_ims: + image: + /home/opnfv/functest/images/ubuntu-16.04-server-cloudimg-amd64-disk1.vmdk + image_format: vmdk + image_alt: + /home/opnfv/functest/images/ubuntu-14.04-server-cloudimg-amd64-disk1.vmdk + image_alt_format: vmdk + heat_ims: + image: + /home/opnfv/functest/images/ubuntu-14.04-server-cloudimg-amd64-disk1.vmdk + image_format: vmdk + vyos_vrouter: + image: + /home/opnfv/functest/images/ubuntu-16.04-server-cloudimg-amd64-disk1.vmdk + image_format: vmdk + image_alt: /home/opnfv/functest/images/vyos-1.1.7.vmdk + image_alt_format: vmdk + juju_epc: + image: + /home/opnfv/functest/images/ubuntu-16.04-server-cloudimg-amd64-disk1.vmdk + image_format: vmdk + image_alt: + /home/opnfv/functest/images/ubuntu-14.04-server-cloudimg-amd64-disk1.vmdk + image_alt_format: vmdk diff --git a/functest/ci/convert_images.sh b/functest/ci/convert_images.sh new file mode 100644 index 000000000..2159d2a60 --- /dev/null +++ b/functest/ci/convert_images.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +set -ex + +initdir=$(pwd) + +cd "${1:-/home/opnfv/functest/images}" + +for i in *.img *.qcow2; do + qemu-img convert -f qcow2 -O vmdk "$i" "${i%.*}.vmdk" +done + +cd $initdir diff --git a/functest/ci/download_images.sh b/functest/ci/download_images.sh index 14cda1470..a56c02b60 100644 --- a/functest/ci/download_images.sh +++ b/functest/ci/download_images.sh @@ -1,24 +1,19 @@ -#!/bin/bash +#!/bin/sh set -ex wget_opts="-N --tries=1 --connect-timeout=30" +[ -t 1 ] || wget_opts="${wget_opts} --progress=dot:giga" cat << EOF | wget ${wget_opts} -i - -P ${1:-/home/opnfv/functest/images} -http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img +http://download.cirros-cloud.net/0.6.1/cirros-0.6.1-x86_64-disk.img https://cloud-images.ubuntu.com/releases/14.04/release/ubuntu-14.04-server-cloudimg-amd64-disk1.img -https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2 https://cloud-images.ubuntu.com/releases/16.04/release/ubuntu-16.04-server-cloudimg-amd64-disk1.img -http://repository.cloudifysource.org/cloudify/4.0.1/sp-release/cloudify-manager-premium-4.0.1.qcow2 -http://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img -http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-lxc.tar.gz -http://download.cirros-cloud.net/daily/20161201/cirros-d161201-aarch64-disk.img -http://download.cirros-cloud.net/daily/20161201/cirros-d161201-aarch64-initramfs -http://download.cirros-cloud.net/daily/20161201/cirros-d161201-aarch64-kernel -https://cloud-images.ubuntu.com/releases/14.04/release/ubuntu-14.04-server-cloudimg-arm64-uefi1.img -http://cloud.centos.org/altarch/7/images/aarch64/CentOS-7-aarch64-GenericCloud.qcow2.xz -https://sourceforge.net/projects/ool-opnfv/files/vyos-1.1.7.img -http://marketplace.openbaton.org:8080/api/v1/images/52e2ccc0-1dce-4663-894d-28aab49323aa/img +https://cloud-images.ubuntu.com/releases/18.04/release/ubuntu-18.04-server-cloudimg-amd64.img +http://download.cirros-cloud.net/0.6.1/cirros-0.6.1-aarch64-disk.img +http://repository.cloudifysource.org/cloudify/19.01.24/community-release/cloudify-docker-manager-community-19.01.24.tar +http://testresults.opnfv.org/functest/vyos-1.1.8-amd64.qcow2 +http://testresults.opnfv.org/functest/shaker-image-1.3.4+stretch.qcow2 +https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/30/Cloud/x86_64/images/Fedora-Cloud-Base-30-1.2.x86_64.qcow2 +https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/30/Cloud/aarch64/images/Fedora-Cloud-Base-30-1.2.aarch64.qcow2 EOF - -xz --decompress --force --keep ${1:-/home/opnfv/functest/images}/CentOS-7-aarch64-GenericCloud.qcow2.xz diff --git a/functest/ci/logging.debug.ini b/functest/ci/logging.debug.ini new file mode 100644 index 000000000..c926a5055 --- /dev/null +++ b/functest/ci/logging.debug.ini @@ -0,0 +1,110 @@ +[loggers] +keys=root,functest,api,ci,core,cli,opnfv_tests,utils,xtesting,xci,xcore,xutils,sfc,baro,warnings + +[handlers] +keys=console,wconsole,file,dfile + +[formatters] +keys=standard + +[logger_root] +level=NOTSET +handlers=dfile + +[logger_functest] +level=NOTSET +handlers=file +qualname=functest + +[logger_api] +level=NOTSET +handlers=wconsole +qualname=functest.api + +[logger_ci] +level=NOTSET +handlers=console +qualname=functest.ci + +[logger_core] +level=NOTSET +handlers=console +qualname=functest.core + +[logger_cli] +level=NOTSET +handlers=wconsole +qualname=functest.cli + +[logger_opnfv_tests] +level=NOTSET +handlers=wconsole +qualname=functest.opnfv_tests + +[logger_utils] +level=NOTSET +handlers=wconsole +qualname=functest.utils + +[logger_xtesting] +level=NOTSET +handlers=file +qualname=xtesting + +[logger_xci] +level=NOTSET +handlers=console +qualname=xtesting.ci + +[logger_xcore] +level=NOTSET +handlers=console +qualname=xtesting.core + +[logger_xutils] +level=NOTSET +handlers=wconsole +qualname=xtesting.utils + +[logger_sfc] +level=NOTSET +handlers=file,wconsole +qualname=sfc + +[logger_baro] +level=NOTSET +handlers=file,wconsole +qualname=baro_tests + +[logger_warnings] +level=NOTSET +handlers=file,console +qualname=py.warnings + +[handler_console] +class=StreamHandler +level=INFO +formatter=standard +args=(sys.stdout,) + +[handler_wconsole] +class=StreamHandler +level=WARN +formatter=standard +args=(sys.stdout,) + +[handler_file] +class=FileHandler +level=INFO +formatter=standard +args=("/home/opnfv/functest/results/functest.log",) + +[handler_dfile] +class=FileHandler +level=DEBUG +formatter=standard +args=("/home/opnfv/functest/results/functest.debug.log",) + +[formatter_standard] +format=%(asctime)s - %(name)s - %(levelname)s - %(message)s +datefmt= diff --git a/functest/ci/logging.ini b/functest/ci/logging.ini index f1ab72414..dde079493 100644 --- a/functest/ci/logging.ini +++ b/functest/ci/logging.ini @@ -1,5 +1,5 @@ [loggers] -keys=root,functest,api,ci,cli,core,energy,opnfv_tests,utils +keys=root,functest,api,ci,core,cli,opnfv_tests,utils,xtesting,xci,xcore,xutils,sfc,baro,warnings [handlers] keys=console,wconsole,file,null @@ -26,20 +26,15 @@ level=NOTSET handlers=console qualname=functest.ci -[logger_cli] -level=NOTSET -handlers=wconsole -qualname=functest.cli - [logger_core] level=NOTSET handlers=console qualname=functest.core -[logger_energy] +[logger_cli] level=NOTSET handlers=wconsole -qualname=functest.energy +qualname=functest.cli [logger_opnfv_tests] level=NOTSET @@ -51,6 +46,41 @@ level=NOTSET handlers=wconsole qualname=functest.utils +[logger_xtesting] +level=NOTSET +handlers=file +qualname=xtesting + +[logger_xci] +level=NOTSET +handlers=console +qualname=xtesting.ci + +[logger_xcore] +level=NOTSET +handlers=console +qualname=xtesting.core + +[logger_xutils] +level=NOTSET +handlers=wconsole +qualname=xtesting.utils + +[logger_sfc] +level=NOTSET +handlers=file,wconsole +qualname=sfc + +[logger_baro] +level=NOTSET +handlers=file,wconsole +qualname=baro_tests + +[logger_warnings] +level=NOTSET +handlers=file,console +qualname=py.warnings + [handler_null] class=NullHandler level=NOTSET @@ -71,7 +101,7 @@ args=(sys.stdout,) [handler_file] class=FileHandler -level=DEBUG +level=INFO formatter=standard args=("/home/opnfv/functest/results/functest.log",) diff --git a/functest/ci/rally_aarch64_patch.conf b/functest/ci/rally_aarch64_patch.conf index e5cae8137..4ea0d7605 100644 --- a/functest/ci/rally_aarch64_patch.conf +++ b/functest/ci/rally_aarch64_patch.conf @@ -1,5 +1,5 @@ img_name_regex = ^TestVM$ -img_url = http://download.cirros-cloud.net/daily/20161201/cirros-d161201-aarch64-disk.img +img_url = http://download.cirros-cloud.net/0.5.1/cirros-0.5.1-aarch64-disk.img flavor_ref_ram = 256 flavor_ref_alt_ram = 256 heat_instance_type_ram = 256 diff --git a/functest/ci/run_tests.py b/functest/ci/run_tests.py deleted file mode 100644 index 6748484d7..000000000 --- a/functest/ci/run_tests.py +++ /dev/null @@ -1,289 +0,0 @@ -#!/usr/bin/env python - -# Copyright (c) 2016 Ericsson AB and others. -# -# 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 - -""" The entry of running tests: -1) Parses functest/ci/testcases.yaml to check which testcase(s) to be run -2) Execute the common operations on every testcase (run, push results to db...) -3) Return the right status code -""" - -import argparse -import enum -import importlib -import logging -import logging.config -import os -import re -import sys -import textwrap -import pkg_resources - -import prettytable - -import functest.ci.tier_builder as tb -import functest.core.testcase as testcase -import functest.utils.functest_utils as ft_utils -import functest.utils.openstack_utils as os_utils -from functest.utils.constants import CONST - -# __name__ cannot be used here -LOGGER = logging.getLogger('functest.ci.run_tests') - -CONFIG_FUNCTEST_PATH = pkg_resources.resource_filename( - 'functest', 'ci/config_functest.yaml') - - -class Result(enum.Enum): - """The overall result in enumerated type""" - # pylint: disable=too-few-public-methods - EX_OK = os.EX_OK - EX_ERROR = -1 - - -class BlockingTestFailed(Exception): - """Exception when the blocking test fails""" - pass - - -class TestNotEnabled(Exception): - """Exception when the test is not enabled""" - pass - - -class RunTestsParser(object): - """Parser to run tests""" - # pylint: disable=too-few-public-methods - - def __init__(self): - self.parser = argparse.ArgumentParser() - self.parser.add_argument("-t", "--test", dest="test", action='store', - help="Test case or tier (group of tests) " - "to be executed. It will run all the test " - "if not specified.") - self.parser.add_argument("-n", "--noclean", help="Do not clean " - "OpenStack resources after running each " - "test (default=false).", - action="store_true") - self.parser.add_argument("-r", "--report", help="Push results to " - "database (default=false).", - action="store_true") - - def parse_args(self, argv=None): - """Parse arguments. - - It can call sys.exit if arguments are incorrect. - - Returns: - the arguments from cmdline - """ - return vars(self.parser.parse_args(argv)) - - -class Runner(object): - """Runner class""" - - def __init__(self): - self.executed_test_cases = {} - self.overall_result = Result.EX_OK - self.clean_flag = True - self.report_flag = False - self._tiers = tb.TierBuilder( - CONST.__getattribute__('INSTALLER_TYPE'), - CONST.__getattribute__('DEPLOY_SCENARIO'), - pkg_resources.resource_filename('functest', 'ci/testcases.yaml')) - - @staticmethod - def source_rc_file(): - """Set the environmental vars from openstack.creds""" - - rc_file = CONST.__getattribute__('openstack_creds') - if not os.path.isfile(rc_file): - raise Exception("RC file %s does not exist..." % rc_file) - LOGGER.debug("Sourcing the OpenStack RC file...") - os_utils.source_credentials(rc_file) - - @staticmethod - def get_run_dict(testname): - """Obtain the the 'run' block of the testcase from testcases.yaml""" - try: - dic_testcase = ft_utils.get_dict_by_test(testname) - if not dic_testcase: - LOGGER.error("Cannot get %s's config options", testname) - elif 'run' in dic_testcase: - return dic_testcase['run'] - return None - except Exception: # pylint: disable=broad-except - LOGGER.exception("Cannot get %s's config options", testname) - return None - - def run_test(self, test): - """Run one test case""" - if not test.is_enabled(): - raise TestNotEnabled( - "The test case {} is not enabled".format(test.get_name())) - LOGGER.info("Running test case '%s'...", test.get_name()) - result = testcase.TestCase.EX_RUN_ERROR - run_dict = self.get_run_dict(test.get_name()) - if run_dict: - try: - module = importlib.import_module(run_dict['module']) - cls = getattr(module, run_dict['class']) - test_dict = ft_utils.get_dict_by_test(test.get_name()) - test_case = cls(**test_dict) - self.executed_test_cases[test.get_name()] = test_case - try: - kwargs = run_dict['args'] - test_case.run(**kwargs) - except KeyError: - test_case.run() - if self.report_flag: - test_case.push_to_db() - if test.get_project() == "functest": - result = test_case.is_successful() - else: - result = testcase.TestCase.EX_OK - LOGGER.info("Test result:\n\n%s\n", test_case) - if self.clean_flag: - test_case.clean() - except ImportError: - LOGGER.exception("Cannot import module %s", run_dict['module']) - except AttributeError: - LOGGER.exception("Cannot get class %s", run_dict['class']) - else: - raise Exception("Cannot import the class for the test case.") - return result - - def run_tier(self, tier): - """Run one tier""" - tier_name = tier.get_name() - tests = tier.get_tests() - if not tests: - LOGGER.info("There are no supported test cases in this tier " - "for the given scenario") - self.overall_result = Result.EX_ERROR - else: - LOGGER.info("Running tier '%s'", tier_name) - for test in tests: - self.run_test(test) - test_case = self.executed_test_cases[test.get_name()] - if test_case.is_successful() != testcase.TestCase.EX_OK: - LOGGER.error("The test case '%s' failed.", test.get_name()) - if test.get_project() == "functest": - self.overall_result = Result.EX_ERROR - if test.is_blocking(): - raise BlockingTestFailed( - "The test case {} failed and is blocking".format( - test.get_name())) - return self.overall_result - - def run_all(self): - """Run all available testcases""" - tiers_to_run = [] - msg = prettytable.PrettyTable( - header_style='upper', padding_width=5, - field_names=['tiers', 'order', 'CI Loop', 'description', - 'testcases']) - for tier in self._tiers.get_tiers(): - if (tier.get_tests() and - re.search(CONST.__getattribute__('CI_LOOP'), - tier.get_ci_loop()) is not None): - tiers_to_run.append(tier) - msg.add_row([tier.get_name(), tier.get_order(), - tier.get_ci_loop(), - textwrap.fill(tier.description, width=40), - textwrap.fill(' '.join([str(x.get_name( - )) for x in tier.get_tests()]), width=40)]) - LOGGER.info("TESTS TO BE EXECUTED:\n\n%s\n", msg) - for tier in tiers_to_run: - self.run_tier(tier) - - def main(self, **kwargs): - """Entry point of class Runner""" - if 'noclean' in kwargs: - self.clean_flag = not kwargs['noclean'] - if 'report' in kwargs: - self.report_flag = kwargs['report'] - try: - if 'test' in kwargs: - self.source_rc_file() - LOGGER.debug("Test args: %s", kwargs['test']) - if self._tiers.get_tier(kwargs['test']): - self.run_tier(self._tiers.get_tier(kwargs['test'])) - elif self._tiers.get_test(kwargs['test']): - result = self.run_test( - self._tiers.get_test(kwargs['test'])) - if result != testcase.TestCase.EX_OK: - LOGGER.error("The test case '%s' failed.", - kwargs['test']) - self.overall_result = Result.EX_ERROR - elif kwargs['test'] == "all": - self.run_all() - else: - LOGGER.error("Unknown test case or tier '%s', or not " - "supported by the given scenario '%s'.", - kwargs['test'], - CONST.__getattribute__('DEPLOY_SCENARIO')) - LOGGER.debug("Available tiers are:\n\n%s", - self._tiers) - return Result.EX_ERROR - else: - self.run_all() - except BlockingTestFailed: - pass - except Exception: # pylint: disable=broad-except - LOGGER.exception("Failures when running testcase(s)") - self.overall_result = Result.EX_ERROR - if not self._tiers.get_test(kwargs['test']): - self.summary(self._tiers.get_tier(kwargs['test'])) - LOGGER.info("Execution exit value: %s", self.overall_result) - return self.overall_result - - def summary(self, tier=None): - """To generate functest report showing the overall results""" - msg = prettytable.PrettyTable( - header_style='upper', padding_width=5, - field_names=['env var', 'value']) - for env_var in ['INSTALLER_TYPE', 'DEPLOY_SCENARIO', 'BUILD_TAG', - 'CI_LOOP']: - msg.add_row([env_var, CONST.__getattribute__(env_var)]) - LOGGER.info("Deployment description:\n\n%s\n", msg) - msg = prettytable.PrettyTable( - header_style='upper', padding_width=5, - field_names=['test case', 'project', 'tier', - 'duration', 'result']) - tiers = [tier] if tier else self._tiers.get_tiers() - for each_tier in tiers: - for test in each_tier.get_tests(): - try: - test_case = self.executed_test_cases[test.get_name()] - except KeyError: - msg.add_row([test.get_name(), test.get_project(), - each_tier.get_name(), "00:00", "SKIP"]) - else: - result = 'PASS' if(test_case.is_successful( - ) == test_case.EX_OK) else 'FAIL' - msg.add_row( - [test_case.case_name, test_case.project_name, - self._tiers.get_tier_name(test_case.case_name), - test_case.get_duration(), result]) - for test in each_tier.get_skipped_test(): - msg.add_row([test.get_name(), test.get_project(), - each_tier.get_name(), "00:00", "SKIP"]) - LOGGER.info("FUNCTEST REPORT:\n\n%s\n", msg) - - -def main(): - """Entry point""" - logging.config.fileConfig(pkg_resources.resource_filename( - 'functest', 'ci/logging.ini')) - logging.captureWarnings(True) - parser = RunTestsParser() - args = parser.parse_args(sys.argv[1:]) - runner = Runner() - return runner.main(**args).value diff --git a/functest/ci/testcases.yaml b/functest/ci/testcases.yaml index 2e1a282cb..acf5a7199 100644 --- a/functest/ci/testcases.yaml +++ b/functest/ci/testcases.yaml @@ -2,8 +2,6 @@ tiers: - name: healthcheck - order: 0 - ci_loop: '(daily)|(weekly)' description: >- First tier to be executed to verify the basic operations in the VIM. @@ -16,59 +14,86 @@ tiers: description: >- This test case verifies the retrieval of OpenStack clients: Keystone, Glance, Neutron and Nova and may perform some - simple queries. When the config value of - snaps.use_keystone is True, functest must have access to - the cloud's private network. - dependencies: - installer: '^((?!netvirt).)*$' - scenario: '' + simple queries. run: - module: - 'functest.opnfv_tests.openstack.snaps.connection_check' - class: 'ConnectionCheck' + name: connection_check - - case_name: api_check + case_name: tenantnetwork1 project_name: functest criteria: 100 blocking: true description: >- - This test case verifies the retrieval of OpenStack clients: - Keystone, Glance, Neutron and Nova and may perform some - simple queries. When the config value of - snaps.use_keystone is True, functest must have access to - the cloud's private network. + It creates and configures all tenant network ressources + required by advanced testcases (subnet, network and + router). dependencies: - installer: '^((?!netvirt).)*$' - scenario: '^((?!lxd).)*$' + - NO_TENANT_NETWORK: '^(?![tT]rue$)' run: - module: 'functest.opnfv_tests.openstack.snaps.api_check' - class: 'ApiCheck' + name: tenantnetwork1 - - case_name: snaps_health_check + case_name: tenantnetwork2 project_name: functest criteria: 100 blocking: true description: >- - This test case creates executes the SimpleHealthCheck - Python test class which creates an, image, flavor, network, - and Cirros VM instance and observes the console output to - validate the single port obtains the correct IP address. + It creates new user/project before creating and configuring + all tenant network ressources required by a testcase + (subnet, network and router). dependencies: - installer: '' - scenario: '^((?!lxd).)*$' + - NO_TENANT_NETWORK: '^(?![tT]rue$)' run: - module: 'functest.opnfv_tests.openstack.snaps.health_check' - class: 'HealthCheck' + name: tenantnetwork2 + + - + case_name: vmready1 + project_name: functest + criteria: 100 + blocking: true + description: >- + It inherits from TenantNetwork1 which creates all network + resources and prepares a future VM attached to that + network. + run: + name: vmready1 + + - + case_name: vmready2 + project_name: functest + criteria: 100 + blocking: true + description: >- + It creates new user/project before creating and configuring + all tenant network ressources, flavors, images, etc. + required by advanced testcases. + run: + name: vmready2 + + - + case_name: singlevm1 + project_name: functest + criteria: 100 + blocking: true + description: >- + It inherits from TenantNetwork1 which creates all network + resources and completes it by booting a VM attached to that + network. + run: + name: singlevm1 + + - + case_name: singlevm2 + project_name: functest + criteria: 100 + blocking: true + description: >- + It creates new user/project before creating and configuring + all tenant network ressources and vms required by advanced + testcases. + run: + name: singlevm2 - - - name: smoke - order: 1 - ci_loop: '(daily)|(weekly)' - description: >- - Set of basic Functional tests to validate the OPNFV scenarios. - testcases: - case_name: vping_ssh project_name: functest @@ -78,12 +103,8 @@ tiers: This test case verifies: 1) SSH to an instance using floating IPs over the public network. 2) Connectivity between 2 instances over a private network. - dependencies: - installer: '' - scenario: '^((?!odl_l3|odl-bgpvpn|gluon).)*$' run: - module: 'functest.opnfv_tests.openstack.vping.vping_ssh' - class: 'VPingSSH' + name: vping_ssh - case_name: vping_userdata @@ -93,16 +114,42 @@ tiers: description: >- This test case verifies: 1) Boot a VM with given userdata. 2) Connectivity between 2 instances over a private network. + run: + name: vping_userdata + + - + case_name: cinder_test + project_name: functest + criteria: 100 + blocking: true + description: >- + This test case verifies: 1) Attach volume and to 1 + instance; 2) Write data on volume 3) Detach volume + from instance 1, attach it on instance 2 3) Read volume + data + run: + name: cinder_test + + - + case_name: odl + project_name: functest + criteria: 100 + blocking: true + description: >- + Test Suite for the OpenDaylight SDN Controller. It + integrates some test suites from upstream using + Robot as the test framework. dependencies: - installer: '' - scenario: '^((?!lxd).)*$' + - DEPLOY_SCENARIO: 'odl' run: - module: - 'functest.opnfv_tests.openstack.vping.vping_userdata' - class: 'VPingUserdata' + name: odl + args: + suites: + - /src/odl_test/csit/suites/integration/basic + - /src/odl_test/csit/suites/openstack/neutron - - case_name: tempest_smoke_serial + case_name: tempest_smoke project_name: functest criteria: 100 blocking: false @@ -111,12 +158,118 @@ tiers: Tempest suite. The list of test cases is generated by Tempest automatically and depends on the parameters of the OpenStack deplopyment. + https://github.com/openstack/tempest/blob/18.0.0/tox.ini#L114 + run: + name: tempest_common + args: + mode: '(?=.*\[.*\bsmoke\b.*\])(^tempest\.api)' + option: + - '--concurrency=4' + + - + case_name: tempest_horizon + project_name: functest + criteria: 100 + blocking: false + description: >- + This test case runs the Tempest suite proposed by the + Horizon project. dependencies: - installer: '^((?!netvirt).)*$' - scenario: '' + - DASHBOARD_URL: '^(?!\s*$).+' run: - module: 'functest.opnfv_tests.openstack.tempest.tempest' - class: 'TempestSmokeSerial' + name: tempest_common + args: + mode: '^tempest.scenario.test_dashboard_basic_ops.' + + - + name: smoke + description: >- + Set of basic Functional tests to validate the OPNFV scenarios. + testcases: + - + case_name: tempest_neutron + project_name: functest + criteria: 100 + blocking: false + description: >- + This test case runs the Tempest suite proposed by the + Neutron project. The list of test cases is generated by + Tempest automatically and depends on the parameters of + the OpenStack deployment. + run: + name: tempest_common + args: + mode: '^neutron_tempest_plugin\.api' + option: + - '--concurrency=4' + + - + case_name: tempest_cinder + project_name: functest + criteria: 100 + blocking: false + description: >- + This test case runs the Tempest suite proposed by the + Cinder project. + run: + name: tempest_common + args: + mode: "(?!.*test_incremental_backup)\ + (?!.*test_backup_crossproject_admin_negative)\ + (?!.*test_backup_crossproject_user_negative)\ + (^cinder_tempest_plugin.)" + option: + - '--concurrency=4' + + - + case_name: tempest_keystone + project_name: functest + criteria: 100 + blocking: false + description: >- + This test case runs the Tempest suite proposed by the + Keystone project. + run: + name: tempest_common + args: + mode: 'keystone_tempest_plugin.' + option: + - '--concurrency=4' + + - + case_name: tempest_heat + project_name: functest + criteria: 100 + blocking: false + description: >- + This test case runs the Tempest suite proposed by the + Heat project. + run: + name: tempest_heat + args: + mode: '^heat_tempest_plugin.tests' + option: + - '--concurrency=1' + + - + case_name: tempest_telemetry + project_name: functest + criteria: 100 + blocking: false + description: >- + This test case runs the Tempest suite proposed by the + Telemetry project. + run: + name: tempest_common + args: + mode: "(?!.*test_autoscaling)(?!.*test_live)\ + (^telemetry_tempest_plugin)" + services: + - aodh + - gnocchi + - panko + option: + - '--concurrency=4' - case_name: rally_sanity @@ -126,289 +279,790 @@ tiers: description: >- This test case runs a sub group of tests of the OpenStack Rally suite in smoke mode. - dependencies: - installer: '' - scenario: '' run: - module: 'functest.opnfv_tests.openstack.rally.rally' - class: 'RallySanity' + name: rally_sanity + args: + optional: + - 'gnocchi' + - 'barbican' - - case_name: refstack_defcore + case_name: refstack_compute project_name: functest criteria: 100 blocking: false description: >- This test case runs a sub group of tests of the OpenStack - Defcore testcases by using refstack client. + Compute testcases. dependencies: - installer: '' - scenario: '' + - NO_TENANT_NETWORK: '^(?![tT]rue$)' run: - module: - 'functest.opnfv_tests.openstack.refstack_client.refstack_client' - class: 'RefstackClient' + name: refstack + args: + target: compute + option: + - '--concurrency=4' - - case_name: odl + case_name: refstack_object project_name: functest criteria: 100 blocking: false description: >- - Test Suite for the OpenDaylight SDN Controller. It - integrates some test suites from upstream using - Robot as the test framework. - dependencies: - installer: '' - scenario: 'odl' + This test case runs a sub group of tests of the OpenStack + Object testcases. run: - module: 'functest.opnfv_tests.sdn.odl.odl' - class: 'ODLTests' + name: refstack args: - suites: - - /src/odl_test/csit/suites/integration/basic - - /src/odl_test/csit/suites/openstack/neutron + target: object + option: + - '--concurrency=4' - - case_name: odl_netvirt + case_name: refstack_platform project_name: functest criteria: 100 blocking: false description: >- - Test Suite for the OpenDaylight SDN Controller when - the NetVirt features are installed. It integrates - some test suites from upstream using Robot as the - test framework. + This test case runs a sub group of tests of the OpenStack + Platform testcases. dependencies: - installer: 'apex' - scenario: 'os-odl_l3-nofeature' + - NO_TENANT_NETWORK: '^(?![tT]rue$)' run: - module: 'functest.opnfv_tests.sdn.odl.odl' - class: 'ODLTests' + name: refstack args: - suites: - - /src/odl_test/csit/suites/integration/basic - - /src/odl_test/csit/suites/openstack/neutron - - /src/odl_test/csit/suites/openstack/connectivity + target: platform + option: + - '--concurrency=4' - - case_name: snaps_smoke + case_name: tempest_full project_name: functest criteria: 100 blocking: false description: >- - This test case contains tests that setup and destroy - environments with VMs with and without Floating IPs - with a newly created user and project. Set the config - value snaps.use_floating_ips (True|False) to toggle - this functionality. When the config value of - snaps.use_keystone is True, functest must have access to - the cloud's private network. + The list of test cases is generated by + Tempest automatically and depends on the parameters of + the OpenStack deployment. + https://github.com/openstack/tempest/blob/18.0.0/tox.ini#L83 + run: + name: tempest_common + args: + mode: '(?!.*\[.*\bslow\b.*\])(^tempest\.api)' + option: + - '--concurrency=4' - dependencies: - installer: '^((?!netvirt).)*$' - scenario: '^((?!lxd).)*$' + - + case_name: tempest_scenario + project_name: functest + criteria: 100 + blocking: false + description: >- + The list of test cases is generated by + Tempest automatically and depends on the parameters of + the OpenStack deployment. + https://github.com/openstack/tempest/blob/18.0.0/tox.ini#L84 run: - module: 'functest.opnfv_tests.openstack.snaps.smoke' - class: 'SnapsSmoke' + name: tempest_common + args: + mode: '(?!.*\[.*\bslow\b.*\])(^tempest\.scenario)' + option: + - '--concurrency=1' - - - name: features - order: 2 - ci_loop: '(daily)|(weekly)' - description: >- - Test suites from feature projects - integrated in functest - testcases: - - case_name: doctor-notification - project_name: doctor + case_name: tempest_slow + project_name: functest criteria: 100 blocking: false description: >- - Test suite from Doctor project. - dependencies: - installer: 'apex' - scenario: '^((?!fdio).)*$' + The list of test cases is generated by + Tempest automatically and depends on the parameters of + the OpenStack deployment. + https://github.com/openstack/tempest/blob/18.0.0/tox.ini#L84 run: - module: 'functest.core.feature' - class: 'BashFeature' + name: tempest_common args: - cmd: 'doctor-test' + mode: '(?=.*\[.*\bslow\b.*\])(^tempest\.)' + option: + - '--concurrency=1' - - case_name: bgpvpn - project_name: sdnvpn + case_name: patrole_admin + project_name: functest criteria: 100 blocking: false description: >- - Test suite from SDNVPN project. - dependencies: - installer: '(fuel)|(apex)|(netvirt)' - scenario: 'bgpvpn' + Test suite from Patrole project. run: - module: 'sdnvpn.test.functest.run_sdnvpn_tests' - class: 'SdnvpnFunctest' + name: patrole + args: + roles: 'admin' + mode: "(?!.*test_unmanage_snapshot_rbac)\ + (?!.*test_show_auto_allocated_topology)\ + (?!.*test_delete_auto_allocated_topology)\ + (?!.*test_create_network_provider_segmentation_id)\ + (?!.*compute.test_floating_ips_rbac)\ + (?!.*test_reset_network)\ + (?!.*test_create_image_from_volume_backed_server)\ + (?!.*test_network_ip_availability_rbac.NetworkIpAvailabilityExtRbacTest.test_get_network_ip_availabilities)\ + (?!.*test_policy_bandwidth_limit_rule_rbac)\ + (?!.*test_policy_minimum_bandwidth_rule_rbac)\ + (?!.*test_group_type_specs)\ + (?!.*test_groups_rbac.GroupTypesV3RbacTest.test_create_group_type)\ + (?!.*test_groups_rbac.GroupTypesV3RbacTest.test_delete_group_type)\ + (?!.*test_groups_rbac.GroupTypesV3RbacTest.test_update_group_type)\ + (?!.*test_group_snapshots_rbac)\ + (?!.*test_groups_rbac)\ + (?!.*test_quota_classes_rbac)\ + (?!.*test_server_misc_policy_actions_rbac.MiscPolicyActionsNetworkRbacTest.test_create_interface)\ + (?!.*test_server_misc_policy_actions_rbac.MiscPolicyActionsNetworkRbacTest.test_delete_interface)\ + (?!.*test_server_misc_policy_actions_rbac.MiscPolicyActionsNetworkRbacTest.test_show_interface)\ + (?!.*test_user_messages_rbac)\ + (?!.*test_volume_actions_rbac.VolumesActionsV310RbacTest)\ + (?!.*test_volume_actions_rbac.VolumesActionsV312RbacTest)\ + (?!.*test_volume_metadata_rbac.VolumeMetadataV3RbacTest.test_delete_volume_image_metadata)\ + (?!.*test_volume_metadata_rbac.VolumeMetadataV3RbacTest.test_list_volumes_details_image_metadata)\ + (?!.*test_volume_metadata_rbac.VolumeMetadataV3RbacTest.test_show_volume_details_image_metadata)\ + (?!.*test_volume_metadata_rbac.VolumeMetadataV3RbacTest.test_update_volume_image_metadata)\ + (?!.*test_volumes_backup_rbac.VolumesBackupsV318RbacTest)\ + (?!.*test_volumes_backup_rbac.VolumesBackupsV39RbacTest)\ + (?!.*test_volume_types_rbac)\ + (?=.*[.*\bslow\b.*])\ + (^patrole_tempest_plugin.tests.api.(compute|image|network|volume))" + option: + - '--concurrency=4' - - case_name: functest-odl-sfc - project_name: sfc + case_name: patrole_member + project_name: functest criteria: 100 blocking: false description: >- - Test suite for odl-sfc to test two chains with one SF and - one chain with two SFs - dependencies: - installer: '' - scenario: 'odl.*sfc' + Test suite from Patrole project. run: - module: 'functest.core.feature' - class: 'BashFeature' + name: patrole args: - cmd: 'run_sfc_tests.py' + roles: 'member' + mode: "(?!.*test_unmanage_snapshot_rbac)\ + (?!.*test_show_auto_allocated_topology)\ + (?!.*test_delete_auto_allocated_topology)\ + (?!.*test_create_network_provider_segmentation_id)\ + (?!.*compute.test_floating_ips_rbac)\ + (?!.*test_reset_network)\ + (?!.*test_create_image_from_volume_backed_server)\ + (?!.*test_network_ip_availability_rbac.NetworkIpAvailabilityExtRbacTest.test_get_network_ip_availabilities)\ + (?!.*test_policy_bandwidth_limit_rule_rbac)\ + (?!.*test_policy_minimum_bandwidth_rule_rbac)\ + (?!.*test_group_type_specs)\ + (?!.*test_groups_rbac.GroupTypesV3RbacTest.test_create_group_type)\ + (?!.*test_groups_rbac.GroupTypesV3RbacTest.test_delete_group_type)\ + (?!.*test_groups_rbac.GroupTypesV3RbacTest.test_update_group_type)\ + (?!.*test_group_snapshots_rbac)\ + (?!.*test_groups_rbac)\ + (?!.*test_quota_classes_rbac)\ + (?!.*test_server_misc_policy_actions_rbac.MiscPolicyActionsNetworkRbacTest.test_create_interface)\ + (?!.*test_server_misc_policy_actions_rbac.MiscPolicyActionsNetworkRbacTest.test_delete_interface)\ + (?!.*test_server_misc_policy_actions_rbac.MiscPolicyActionsNetworkRbacTest.test_show_interface)\ + (?!.*test_user_messages_rbac)\ + (?!.*test_volume_actions_rbac.VolumesActionsV310RbacTest)\ + (?!.*test_volume_actions_rbac.VolumesActionsV312RbacTest)\ + (?!.*test_volume_metadata_rbac.VolumeMetadataV3RbacTest.test_delete_volume_image_metadata)\ + (?!.*test_volume_metadata_rbac.VolumeMetadataV3RbacTest.test_list_volumes_details_image_metadata)\ + (?!.*test_volume_metadata_rbac.VolumeMetadataV3RbacTest.test_show_volume_details_image_metadata)\ + (?!.*test_volume_metadata_rbac.VolumeMetadataV3RbacTest.test_update_volume_image_metadata)\ + (?!.*test_volumes_backup_rbac.VolumesBackupsV318RbacTest)\ + (?!.*test_volumes_backup_rbac.VolumesBackupsV39RbacTest)\ + (?!.*test_volume_types_rbac)\ + (?=.*[.*\bslow\b.*])\ + (^patrole_tempest_plugin.tests.api.(compute|image|network|volume))" + option: + - '--concurrency=4' - - case_name: barometercollectd - project_name: barometer + case_name: patrole_reader + project_name: functest criteria: 100 blocking: false description: >- - Test suite for the Barometer project. Separate tests verify - the proper configuration and basic functionality of all the - collectd plugins as described in the Project Release Plan - dependencies: - installer: 'apex' - scenario: 'bar' + Test suite from Patrole project. run: - module: 'baro_tests.barometer' - class: 'BarometerCollectd' + name: patrole + args: + roles: 'reader' + mode: "(?!.*test_unmanage_snapshot_rbac)\ + (?!.*test_show_auto_allocated_topology)\ + (?!.*test_delete_auto_allocated_topology)\ + (?!.*test_create_network_provider_segmentation_id)\ + (?!.*compute.test_floating_ips_rbac)\ + (?!.*test_reset_network)\ + (?!.*test_create_image_from_volume_backed_server)\ + (?!.*test_network_ip_availability_rbac.NetworkIpAvailabilityExtRbacTest.test_get_network_ip_availabilities)\ + (?!.*test_policy_bandwidth_limit_rule_rbac)\ + (?!.*test_policy_minimum_bandwidth_rule_rbac)\ + (?!.*test_group_type_specs)\ + (?!.*test_groups_rbac.GroupTypesV3RbacTest.test_create_group_type)\ + (?!.*test_groups_rbac.GroupTypesV3RbacTest.test_delete_group_type)\ + (?!.*test_groups_rbac.GroupTypesV3RbacTest.test_update_group_type)\ + (?!.*test_group_snapshots_rbac)\ + (?!.*test_groups_rbac)\ + (?!.*test_quota_classes_rbac)\ + (?!.*test_server_misc_policy_actions_rbac.MiscPolicyActionsNetworkRbacTest.test_create_interface)\ + (?!.*test_server_misc_policy_actions_rbac.MiscPolicyActionsNetworkRbacTest.test_delete_interface)\ + (?!.*test_server_misc_policy_actions_rbac.MiscPolicyActionsNetworkRbacTest.test_show_interface)\ + (?!.*test_user_messages_rbac)\ + (?!.*test_volume_actions_rbac.VolumesActionsV310RbacTest)\ + (?!.*test_volume_actions_rbac.VolumesActionsV312RbacTest)\ + (?!.*test_volume_metadata_rbac.VolumeMetadataV3RbacTest.test_delete_volume_image_metadata)\ + (?!.*test_volume_metadata_rbac.VolumeMetadataV3RbacTest.test_list_volumes_details_image_metadata)\ + (?!.*test_volume_metadata_rbac.VolumeMetadataV3RbacTest.test_show_volume_details_image_metadata)\ + (?!.*test_volume_metadata_rbac.VolumeMetadataV3RbacTest.test_update_volume_image_metadata)\ + (?!.*test_volumes_backup_rbac.VolumesBackupsV318RbacTest)\ + (?!.*test_volumes_backup_rbac.VolumesBackupsV39RbacTest)\ + (?!.*test_volume_types_rbac)\ + (?=.*[.*\bslow\b.*])\ + (^patrole_tempest_plugin.tests.api.(compute|image|network|volume))" + option: + - '--concurrency=4' - - case_name: fds - project_name: fastdatastacks + case_name: tempest_barbican + project_name: functest criteria: 100 blocking: false description: >- - Test Suite for the OpenDaylight SDN Controller when GBP - features are installed. It integrates some test suites from - upstream using Robot as the test framework. - dependencies: - installer: 'apex' - scenario: 'odl.*-fdio' + It leverages on the tempest plugin containing tests used to + verify the functionality of a barbican installation. run: - module: 'functest.opnfv_tests.sdn.odl.odl' - class: 'ODLTests' + name: barbican args: - suites: - - /src/fds/testing/robot + mode: + '^barbican_tempest_plugin.((?!test_signed_image_upload_boot_failure).)*$' + services: + - barbican + option: + - '--concurrency=4' + + - + case_name: tempest_octavia + project_name: functest + criteria: 100 + blocking: false + description: >- + It leverages on the tempest plugin containing tests used to + verify the functionality of an octavia installation. + run: + name: tempest_common + args: + mode: "(?!.*api.v2.test_availability_zone)\ + (?!.*api.v2.test_availability_zone_profile)\ + (?!.*api.v2.test_member.MemberAPITest.test_member_ipv4_create)\ + (?!.*api.v2.test_member.MemberAPITest.test_member_ipv6_create)\ + (^octavia_tempest_plugin.tests.(api|scenario))" + services: + - octavia + option: + - '--concurrency=2' + + - + case_name: tempest_cyborg + project_name: functest + criteria: 100 + blocking: false + description: >- + It leverages on the tempest plugin containing tests used to + verify the functionality of a cyborg installation. + run: + name: tempest_common + args: + mode: '^cyborg_tempest_plugin' + services: + - cyborg + option: + - '--concurrency=4' - - name: components - order: 3 - ci_loop: 'weekly' + name: smoke_cntt description: >- - Extensive testing of OpenStack API. + Set of basic Functional tests to validate the OPNFV scenarios. testcases: - - case_name: tempest_full_parallel + case_name: tempest_neutron_cntt + project_name: functest + criteria: 100 + blocking: false + deny_skipping: true + tests_count: 564 + description: >- + This test case runs the Tempest suite proposed by the + Neutron project. The list of test cases is generated by + Tempest automatically and depends on the parameters of + the OpenStack deployment. + run: + name: tempest_common + args: + mode: "(?!.*admin.test_agent_availability_zone)\ + (?!.*admin.test_dhcp_agent_scheduler)\ + (?!.*admin.test_l3_agent_scheduler)\ + (?!.*admin.test_logging)\ + (?!.*admin.test_logging_negative)\ + (?!.*admin.test_network_segment_range)\ + (?!.*admin.test_ports.PortTestCasesAdmin.test_regenerate_mac_address)\ + (?!.*admin.test_ports.PortTestCasesResourceRequest)\ + (?!.*admin.test_routers_dvr)\ + (?!.*admin.test_routers_flavors)\ + (?!.*admin.test_routers_ha)\ + (?!.*test_conntrack_helper)\ + (?!.*test_floating_ips.FloatingIPPoolTestJSON)\ + (?!.*test_floating_ips.FloatingIPTestJSON.test_create_update_floatingip_port_details)\ + (?!.*test_local_ip)\ + (?!.*test_metering_extensions)\ + (?!.*test_metering_negative)\ + (?!.*test_networks.NetworksSearchCriteriaTest.test_list_validation_filters)\ + (?!.*test_networks.NetworksTestAdmin.test_create_tenant_network_vxlan)\ + (?!.*test_networks.NetworksTestJSON.test_create_update_network_dns_domain)\ + (?!.*test_port_forwardings)\ + (?!.*test_ports.PortsTaggingOnCreation)\ + (?!.*test_ports.PortsTestJSON.test_create_port_with_propagate_uplink_status)\ + (?!.*test_ports.PortsTestJSON.test_create_port_without_propagate_uplink_status)\ + (?!.*test_ports.PortsTestJSON.test_create_update_port_with_dns_domain)\ + (?!.*test_ports.PortsTestJSON.test_create_update_port_with_dns_name)\ + (?!.*test_ports.PortsTestJSON.test_create_update_port_with_no_dns_name)\ + (?!.*test_qos.QosMinimumBandwidthRuleTestJSON)\ + (?!.*test_revisions.TestRevisions.test_update_dns_domain_bumps_revision)\ + (?!.*test_revisions.TestRevisions.test_update_router_extra_attributes_bumps_revision)\ + (?!.*test_router_interface_fip)\ + (?!.*test_routers.DvrRoutersTest)\ + (?!.*test_routers.HaRoutersTest)\ + (?!.*test_routers.RoutersIpV6Test.test_extra_routes_atomic)\ + (?!.*test_routers.RoutersTest.test_extra_routes_atomic)\ + (?!.*test_routers_negative.DvrRoutersNegativeTest)\ + (?!.*test_routers_negative.DvrRoutersNegativeTestExtended)\ + (?!.*test_routers_negative.HaRoutersNegativeTest)\ + (?!.*test_security_groups.RbacSharedSecurityGroupTest)\ + (?!.*test_subnetpool_prefix_ops)\ + (?!.*test_subnetpools.RbacSubnetPoolTest)\ + (?!.*test_subnetpools.SubnetPoolsSearchCriteriaTest.test_list_validation_filters)\ + (?!.*test_subnetpools_negative.SubnetPoolsNegativeTestJSON.test_tenant_create_subnetpool_associate_shared_address_scope)\ + (?!.*test_subnets.SubnetsSearchCriteriaTest.test_list_validation_filters)\ + (?!.*test_timestamp.TestTimeStamp.test_segment_with_timestamp)\ + (?!.*test_trunk.TrunkTestInheritJSONBase.test_add_subport)\ + (?!.*test_trunk.TrunkTestMtusJSON)\ + (?!.*test_trunk_negative.TrunkTestJSON.test_create_subport_invalid_inherit_network_segmentation_type)\ + (?!.*test_trunk_negative.TrunkTestMtusJSON)\ + (^neutron_tempest_plugin.api)" + option: + - '--concurrency=4' + + - + case_name: tempest_cinder_cntt + project_name: functest + criteria: 100 + blocking: false + deny_skipping: true + tests_count: 10 + description: >- + This test case runs the Tempest suite proposed by the + Cinder project. + run: + name: tempest_common + args: + mode: "(?!.*test_incremental_backup)\ + (?!.*test_consistencygroups)\ + (?!.*test_backup_crossproject_admin_negative)\ + (?!.*test_backup_crossproject_user_negative)\ + (?!.*test_volume_encrypted.TestEncryptedCinderVolumes)\ + (?!.*rbac)\ + (^cinder_tempest_plugin.)" + option: + - '--concurrency=4' + + - + case_name: tempest_keystone_cntt + project_name: functest + criteria: 100 + blocking: false + deny_skipping: true + tests_count: 27 + description: >- + This test case runs the Tempest suite proposed by the + Keystone project. + run: + name: tempest_common + args: + mode: "(?!.*api.identity.v3.test_oauth1_tokens)\ + (?!.*rbac)\ + (?!.*scenario.test_federated_authentication)\ + keystone_tempest_plugin." + option: + - '--concurrency=4' + + - + case_name: tempest_heat_cntt + project_name: functest + criteria: 100 + blocking: false + deny_skipping: true + tests_count: 124 + description: >- + This test case runs the Tempest suite proposed by the + Heat project. + run: + name: tempest_heat + args: + mode: "(?!.*functional.test_lbaasv2)\ + (?!.*functional.test_encryption_vol_type)\ + (?!.*functional.test_event_sinks)\ + (?!.*functional.test_software_config.ZaqarSignalTransportTest)\ + (?!.*functional.test_stack_events)\ + (?!.*functional.test_waitcondition)\ + (?!.*RemoteStackTest.test_stack_create_with_cloud_credential)\ + (?!.*scenario.test_aodh_alarm)\ + (?!.*tests.scenario.test_autoscaling_lb)\ + (?!.*scenario.test_autoscaling_lbv2)\ + (?!.*scenario.test_server_software_config)\ + (?!.*test_volumes.VolumeBackupRestoreIntegrationTest)\ + (?!.*scenario.test_octavia_lbaas)\ + (?!.*scenario.test_server_cfn_init)\ + ^heat_tempest_plugin.tests" + option: + - '--concurrency=1' + + - + case_name: rally_sanity_cntt project_name: functest - criteria: 80 + criteria: 100 blocking: false description: >- + This test case runs a sub group of tests of the OpenStack + Rally suite in smoke mode. + run: + name: rally_sanity + args: + tests: + - 'authenticate' + - 'glance' + - 'cinder' + - 'heat' + - 'keystone' + - 'neutron' + - 'nova' + - 'quotas' + - 'swift' + + - + case_name: tempest_full_cntt + project_name: functest + criteria: 100 + blocking: false + deny_skipping: true + tests_count: 1271 + description: >- The list of test cases is generated by Tempest automatically and depends on the parameters of - the OpenStack deplopyment. - dependencies: - installer: '^((?!netvirt).)*$' - scenario: '' + the OpenStack deployment. + https://github.com/openstack/tempest/blob/18.0.0/tox.ini#L83 + run: + name: tempest_common + args: + mode: "(?!.*admin.test_agents)(?!.*test_fixed_ips)\ + (?!.*test_fixed_ips_negative)\ + (?!.*test_auto_allocate_network)(?!.*test_floating_ips_bulk)\ + (?!.*test_flavors_microversions.FlavorsV255TestJSON)\ + (?!.*test_flavors_microversions.FlavorsV261TestJSON)\ + (?!.*test_live_migration.LiveAutoBlockMigrationV225Test.test_iscsi_volume)\ + (?!.*test_live_migration.LiveAutoBlockMigrationV225Test.test_live_block_migration)\ + (?!.*test_live_migration.LiveAutoBlockMigrationV225Test.test_live_block_migration_paused)\ + (?!.*test_live_migration.LiveAutoBlockMigrationV225Test.test_volume_backed_live_migration)\ + (?!.*test_live_migration.LiveMigrationTest.test_iscsi_volume)\ + (?!.*test_live_migration.LiveMigrationTest.test_live_block_migration)\ + (?!.*test_live_migration.LiveMigrationTest.test_live_block_migration_paused)\ + (?!.*test_live_migration.LiveMigrationTest.test_volume_backed_live_migration)\ + (?!.*test_live_migration.LiveMigrationRemoteConsolesV26Test)\ + (?!.*test_quotas.QuotasAdminTestV257)\ + (?!.*test_servers.ServersAdminTestJSON.test_reset_network_inject_network_info)\ + (?!.*certificates.test_certificates)\ + (?!.*test_quotas_negative.QuotasSecurityGroupAdminNegativeTest)\ + (?!.*test_novnc)(?!.*test_server_personality)\ + (?!.*test_servers.ServerShowV263Test.test_show_update_rebuild_list_server)\ + (?!.*test_servers_microversions.ServerShowV254Test)\ + (?!.*test_servers_microversions.ServerShowV257Test)\ + (?!.*test_servers_negative.ServersNegativeTestJSON.test_personality_file_contents_not_encoded)\ + (?!.*servers.test_virtual_interfaces)\ + (?!.*test_server_actions.ServerActionsTestJSON.test_change_server_password)\ + (?!.*test_server_actions.ServerActionsTestJSON.test_get_vnc_console)\ + (?!.*test_server_actions.ServerActionsTestJSON.test_reboot_server_soft)\ + (?!.*test_server_rescue.ServerBootFromVolumeStableRescueTest)\ + (?!.*test_server_rescue.ServerStableDeviceRescueTest)\ + (?!.*test_security_group_default_rules)\ + (?!.*test_security_groups_negative.SecurityGroupsNegativeTestJSON.test_security_group_create_with_duplicate_name)\ + (?!.*test_security_groups_negative.SecurityGroupsNegativeTestJSON.test_security_group_create_with_invalid_group_description)\ + (?!.*test_security_groups_negative.SecurityGroupsNegativeTestJSON.test_security_group_create_with_invalid_group_name)\ + (?!.*test_security_groups_negative.SecurityGroupsNegativeTestJSON.test_update_security_group_with_invalid_sg_des)\ + (?!.*test_security_groups_negative.SecurityGroupsNegativeTestJSON.test_update_security_group_with_invalid_sg_id)\ + (?!.*test_security_groups_negative.SecurityGroupsNegativeTestJSON.test_update_security_group_with_invalid_sg_name)\ + (?!.*test_create_server.ServersTestFqdnHostnames.test_create_server_with_fqdn_name)\ + (?!.*test_server_metadata.ServerMetadataTestJSON)\ + (?!.*test_server_metadata_negative.ServerMetadataNegativeTestJSON.test_delete_metadata_non_existent_server)\ + (?!.*test_server_metadata_negative.ServerMetadataNegativeTestJSON.test_metadata_items_limit)\ + (?!.*test_server_metadata_negative.ServerMetadataNegativeTestJSON.test_set_metadata_invalid_key)\ + (?!.*test_server_metadata_negative.ServerMetadataNegativeTestJSON.test_set_metadata_non_existent_server)\ + (?!.*test_server_metadata_negative.ServerMetadataNegativeTestJSON.test_set_server_metadata_blank_key)\ + (?!.*test_server_metadata_negative.ServerMetadataNegativeTestJSON.test_set_server_metadata_missing_metadata)\ + (?!.*test_server_metadata_negative.ServerMetadataNegativeTestJSON.test_update_metadata_non_existent_server)\ + (?!.*test_server_metadata_negative.ServerMetadataNegativeTestJSON.test_update_metadata_with_blank_key)\ + (?!.*test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filtered_by_ip_regex)\ + (?!.*compute.test_virtual_interfaces)(?!.*compute.test_virtual_interfaces_negative)\ + (?!.*compute.test_networks)\ + (?!.*test_attach_volume.AttachVolumeMultiAttach)\ + (?!.*identity.admin.v2)(?!.*identity.v2)\ + (?!.*identity.v3.test_access_rules)\ + (?!.*identity.v3.test_application_credentials.ApplicationCredentialsV3Test.test_create_application_credential_access_rules)\ + (?!.*image.v1)\ + (?!.*image.v2.admin.test_images.ImportCopyImagesTest)\ + (?!.*image.v2.test_images_negative.ImagesNegativeTest.test_create_image_reserved_property)\ + (?!.*image.v2.test_images_negative.ImagesNegativeTest.test_update_image_reserved_property)\ + (?!.*image.v2.test_images_negative.ImportImagesNegativeTest.test_image_web_download_import_with_bad_url)\ + (?!.*image.v2.test_images.ImportImagesTest)\ + (?!.*image.v2.test_images.MultiStoresImportImages)\ + (?!.*admin.test_dhcp_agent_scheduler)\ + (?!.*admin.test_routers_dvr)\ + (?!.*test_metering_extensions)(?!.*network.test_tags)\ + (?!.*test_routers_negative.DvrRoutersNegativeTest)\ + (?!.*test_routers.RoutersIpV6Test.test_create_router_set_gateway_with_fixed_ip)\ + (?!.*test_routers.RoutersTest.test_create_router_set_gateway_with_fixed_ip)\ + (?!.*test_object_services.ObjectTest.test_create_object_with_transfer_encoding)\ + (?!.*test_encrypted_volumes_extend)\ + (?!.*test_group_snapshots.GroupSnapshotsV319Test.test_reset_group_snapshot_status)\ + (?!.*test_multi_backend)\ + (?!.*test_volume_retype.VolumeRetypeWithMigrationTest)\ + (?!.*test_volume_delete_cascade.VolumesDeleteCascade.test_volume_from_snapshot_cascade_delete)\ + (?!.*test_volumes_backup.VolumesBackupsTest.test_volume_backup_create_get_detailed_list_restore_delete)\ + (?!.*test_volumes_negative.UpdateMultiattachVolumeNegativeTest.test_multiattach_rw_volume_update_failure)\ + (?!.*test_volumes_extend.VolumesExtendAttachedTest.test_extend_attached_volume)\ + (?!.*\\[.*\\bslow\\b.*\\])(^tempest.api)" + option: + - '--concurrency=4' + + - + case_name: tempest_scenario_cntt + project_name: functest + criteria: 100 + blocking: false + deny_skipping: true + tests_count: 13 + description: >- + The list of test cases is generated by + Tempest automatically and depends on the parameters of + the OpenStack deployment. + https://github.com/openstack/tempest/blob/18.0.0/tox.ini#L84 + run: + name: tempest_scenario + args: + mode: "\ + (?!.*test_compute_unified_limits)\ + (?!.*test_minbw_allocation_placement)\ + (?!.*test_network_qos_placement)\ + (?!.*test_unified_limits.ImageQuotaTest.test_image_count_uploading_quota)\ + (?!.*test_unified_limits.ImageQuotaTest.test_image_stage_quota)\ + (?!.*test_volume_boot_pattern.TestVolumeBootPattern.test_boot_server_from_encrypted_volume_luks)\ + (?!.*\\[.*\\bslow\\b.*\\])(^tempest.scenario)" + option: + - '--concurrency=1' + + - + case_name: tempest_slow_cntt + project_name: functest + criteria: 100 + blocking: false + deny_skipping: true + tests_count: 43 + description: >- + The list of test cases is generated by + Tempest automatically and depends on the parameters of + the OpenStack deployment. + https://github.com/openstack/tempest/blob/18.0.0/tox.ini#L84 run: - module: 'functest.opnfv_tests.openstack.tempest.tempest' - class: 'TempestFullParallel' + name: tempest_common + args: + mode: "(?!.*test_volume_swap)\ + (?!.*test_server_personality)\ + (?!.*test_server_rescue.ServerBootFromVolumeStableRescueTest)\ + (?!.*test_container_sync.ContainerSyncTest.test_container_synchronization)\ + (?!.*test_container_sync_middleware.ContainerSyncMiddlewareTest.test_container_synchronization)\ + (?!.*test_encrypted_cinder_volumes)\ + (?!.*test_minbw_allocation_placement)\ + (?!.*test_network_basic_ops.TestNetworkBasicOps.test_router_rescheduling)\ + (?!.*test_shelve_instance.TestShelveInstance.test_cold_migrate_unshelved_instance)\ + (?!.*test_volume_migrate_attached)\ + (?!.*test_network_advanced_server_ops.TestNetworkAdvancedServerOps.test_server_connectivity_cold_migration_revert)\ + (?=.*\\[.*\\bslow\\b.*\\])(^tempest.)" + option: + - '--concurrency=1' + - + name: benchmarking + description: >- + Run several OpenStack performance tools + https://docs.openstack.org/performance-docs/latest/methodologies/tools.html + testcases: - case_name: rally_full project_name: functest - criteria: 90 + criteria: 100 blocking: false description: >- This test case runs the full suite of scenarios of the OpenStack Rally suite using several threads and iterations. + run: + name: rally_full + args: + optional: + - 'gnocchi' + - 'barbican' + + - + case_name: rally_jobs + project_name: functest + criteria: 100 + blocking: false + description: >- + This test case runs a group of Rally jobs used in + OpenStack gating + dependencies: + - NO_TENANT_NETWORK: '^(?![tT]rue$)' + run: + name: rally_jobs + args: + optional: + - 'gnocchi' + + - + case_name: vmtp + project_name: functest + criteria: 100 + blocking: false + description: >- + VMTP is a small python application that will automatically + perform ping connectivity, round trip time measurement + (latency) and TCP/UDP throughput + dependencies: + - NO_TENANT_NETWORK: '^(?![tT]rue$)' + run: + name: vmtp + + - + case_name: shaker + project_name: functest + criteria: 100 + blocking: false + description: >- + Shaker wraps around popular system network testing tools + like iperf, iperf3 and netperf (with help of flent). Shaker + is able to deploy OpenStack instances and networks in + different topologies. dependencies: - installer: '^((?!netvirt).)*$' - scenario: '' + - NO_TENANT_NETWORK: '^(?![tT]rue$)' run: - module: 'functest.opnfv_tests.openstack.rally.rally' - class: 'RallyFull' + name: shaker + + - + name: benchmarking_cntt + description: >- + Run several OpenStack performance tools + https://docs.openstack.org/performance-docs/latest/methodologies/tools.html + testcases: + - + case_name: rally_full_cntt + project_name: functest + criteria: 100 + blocking: false + description: >- + This test case runs the full suite of scenarios of the + OpenStack Rally suite using several threads and iterations. + run: + name: rally_full + args: + tests: + - 'authenticate' + - 'glance' + - 'cinder' + - 'heat' + - 'keystone' + - 'neutron' + - 'nova' + - 'quotas' + - 'swift' + + - + case_name: rally_jobs_cntt + project_name: functest + criteria: 100 + blocking: false + description: >- + This test case runs a group of Rally jobs used in + OpenStack gating + run: + name: rally_jobs + args: + tests: + - 'neutron' - name: vnf - order: 4 - ci_loop: '(daily)|(weekly)' description: >- Collection of VNF test cases. testcases: - - case_name: cloudify_ims + case_name: cloudify project_name: functest - criteria: 80 + criteria: 100 blocking: false description: >- - This test case deploys an OpenSource vIMS solution from - Clearwater using the Cloudify orchestrator. It also runs - some signaling traffic. - dependencies: - installer: '' - scenario: 'os-nosdn-nofeature-ha' + This test case deploys the Cloudify orchestrator. run: - module: 'functest.opnfv_tests.vnf.ims.cloudify_ims' - class: 'CloudifyIms' - + name: cloudify - - case_name: vyos_vrouter + case_name: cloudify_ims project_name: functest criteria: 100 blocking: false description: >- - This test case is vRouter testing. + This test case deploys an OpenSource vIMS solution from + Clearwater using the Cloudify orchestrator. It also runs + some signaling traffic. dependencies: - installer: '' - scenario: 'os-nosdn-nofeature-ha' + - NO_TENANT_NETWORK: '^(?![tT]rue$)' run: - module: 'functest.opnfv_tests.vnf.router.cloudify_vrouter' - class: 'CloudifyVrouter' + name: cloudify_ims - - case_name: orchestra_openims - project_name: orchestra + case_name: heat_ims + project_name: functest criteria: 100 blocking: false description: >- - OpenIMS VNF deployment with Open Baton (Orchestra) + This test case deploys an OpenSource vIMS solution from + Clearwater using the OpenStack Heat orchestrator. + It also runs some signaling traffic. dependencies: - installer: 'daisy' - scenario: 'os-nosdn-nofeature-ha' + - NO_TENANT_NETWORK: '^(?![tT]rue$)' run: - module: 'functest.opnfv_tests.vnf.ims.orchestra_openims' - class: 'OpenImsVnf' + name: heat_ims - - case_name: orchestra_clearwaterims - project_name: orchestra + case_name: vyos_vrouter + project_name: functest criteria: 100 blocking: false description: >- - ClearwaterIMS VNF deployment with Open Baton (Orchestra) + This test case is vRouter testing. dependencies: - installer: 'daisy' - scenario: 'os-nosdn-nofeature-ha' + - NO_TENANT_NETWORK: '^(?![tT]rue$)' run: - module: - 'functest.opnfv_tests.vnf.ims.orchestra_clearwaterims' - class: 'ClearwaterImsVnf' + name: vyos_vrouter - case_name: juju_epc - enabled: true project_name: functest criteria: 100 blocking: false @@ -416,8 +1070,6 @@ tiers: vEPC validation with Juju as VNF manager and ABoT as test executor. dependencies: - installer: '' - scenario: 'os-nosdn-nofeature-ha' + - NO_TENANT_NETWORK: '^(?![tT]rue$)' run: - module: 'functest.opnfv_tests.vnf.epc.juju_epc' - class: 'JujuEpc' + name: juju_epc diff --git a/functest/ci/tier_builder.py b/functest/ci/tier_builder.py deleted file mode 100644 index 9e92599d8..000000000 --- a/functest/ci/tier_builder.py +++ /dev/null @@ -1,107 +0,0 @@ -#!/usr/bin/env python - -# Copyright (c) 2016 Ericsson AB and others. -# -# 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 - -"""TierBuilder class to parse testcases config file""" - -import yaml - -import functest.ci.tier_handler as th - - -class TierBuilder(object): - # pylint: disable=missing-docstring - - def __init__(self, ci_installer, ci_scenario, testcases_file): - self.ci_installer = ci_installer - self.ci_scenario = ci_scenario - self.testcases_file = testcases_file - self.dic_tier_array = None - self.tier_objects = [] - self.testcases_yaml = None - self.generate_tiers() - - def read_test_yaml(self): - with open(self.testcases_file) as tc_file: - self.testcases_yaml = yaml.safe_load(tc_file) - - self.dic_tier_array = [] - for tier in self.testcases_yaml.get("tiers"): - self.dic_tier_array.append(tier) - - def generate_tiers(self): - if self.dic_tier_array is None: - self.read_test_yaml() - - del self.tier_objects[:] - for dic_tier in self.dic_tier_array: - tier = th.Tier(name=dic_tier['name'], - order=dic_tier['order'], - ci_loop=dic_tier['ci_loop'], - description=dic_tier['description']) - - for dic_testcase in dic_tier['testcases']: - installer = dic_testcase['dependencies']['installer'] - scenario = dic_testcase['dependencies']['scenario'] - dep = th.Dependency(installer, scenario) - - testcase = th.TestCase(name=dic_testcase['case_name'], - enabled=dic_testcase.get( - 'enabled', True), - dependency=dep, - criteria=dic_testcase['criteria'], - blocking=dic_testcase['blocking'], - description=dic_testcase['description'], - project=dic_testcase['project_name']) - if (testcase.is_compatible(self.ci_installer, - self.ci_scenario) and - testcase.is_enabled()): - tier.add_test(testcase) - else: - tier.skip_test(testcase) - - self.tier_objects.append(tier) - - def get_tiers(self): - return self.tier_objects - - def get_tier_names(self): - tier_names = [] - for tier in self.tier_objects: - tier_names.append(tier.get_name()) - return tier_names - - def get_tier(self, tier_name): - for i in range(0, len(self.tier_objects)): - if self.tier_objects[i].get_name() == tier_name: - return self.tier_objects[i] - return None - - def get_tier_name(self, test_name): - for i in range(0, len(self.tier_objects)): - if self.tier_objects[i].is_test(test_name): - return self.tier_objects[i].name - return None - - def get_test(self, test_name): - for i in range(0, len(self.tier_objects)): - if self.tier_objects[i].is_test(test_name): - return self.tier_objects[i].get_test(test_name) - return None - - def get_tests(self, tier_name): - for i in range(0, len(self.tier_objects)): - if self.tier_objects[i].get_name() == tier_name: - return self.tier_objects[i].get_tests() - return None - - def __str__(self): - output = "" - for i in range(0, len(self.tier_objects)): - output += str(self.tier_objects[i]) + "\n" - return output diff --git a/functest/ci/tier_handler.py b/functest/ci/tier_handler.py deleted file mode 100644 index 9fc3f24d8..000000000 --- a/functest/ci/tier_handler.py +++ /dev/null @@ -1,174 +0,0 @@ -#!/usr/bin/env python - -# Copyright (c) 2016 Ericsson AB and others. -# -# 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 - -"""Tier and TestCase classes to wrap the testcases config file""" -# pylint: disable=missing-docstring - -import re -import textwrap - -import prettytable - - -LINE_LENGTH = 72 - - -def split_text(text, max_len): - words = text.split() - lines = [] - line = "" - for word in words: - if len(line) + len(word) < max_len - 1: - line += word + " " - else: - lines.append(line) - line = word + " " - if line != "": - lines.append(line) - return lines - - -class Tier(object): - - def __init__(self, name, order, ci_loop, description=""): - self.tests_array = [] - self.skipped_tests_array = [] - self.name = name - self.order = order - self.ci_loop = ci_loop - self.description = description - - def add_test(self, testcase): - self.tests_array.append(testcase) - - def skip_test(self, testcase): - self.skipped_tests_array.append(testcase) - - def get_tests(self): - array_tests = [] - for test in self.tests_array: - array_tests.append(test) - return array_tests - - def get_skipped_test(self): - return self.skipped_tests_array - - def get_test_names(self): - array_tests = [] - for test in self.tests_array: - array_tests.append(test.get_name()) - return array_tests - - def get_test(self, test_name): - if self.is_test(test_name): - for test in self.tests_array: - if test.get_name() == test_name: - return test - return None - - def is_test(self, test_name): - for test in self.tests_array: - if test.get_name() == test_name: - return True - return False - - def get_name(self): - return self.name - - def get_order(self): - return self.order - - def get_ci_loop(self): - return self.ci_loop - - def __str__(self): - msg = prettytable.PrettyTable( - header_style='upper', padding_width=5, - field_names=['tiers', 'order', 'CI Loop', 'description', - 'testcases']) - msg.add_row( - [self.name, self.order, self.ci_loop, - textwrap.fill(self.description, width=40), - textwrap.fill(' '.join([str(x.get_name( - )) for x in self.get_tests()]), width=40)]) - return msg.get_string() - - -class TestCase(object): - - def __init__(self, name, enabled, dependency, criteria, blocking, - description="", project=""): - # pylint: disable=too-many-arguments - self.name = name - self.enabled = enabled - self.dependency = dependency - self.criteria = criteria - self.blocking = blocking - self.description = description - self.project = project - - @staticmethod - def is_none(item): - return item is None or item == "" - - def is_compatible(self, ci_installer, ci_scenario): - try: - if not self.is_none(ci_installer): - if re.search(self.dependency.get_installer(), - ci_installer) is None: - return False - if not self.is_none(ci_scenario): - if re.search(self.dependency.get_scenario(), - ci_scenario) is None: - return False - return True - except TypeError: - return False - - def get_name(self): - return self.name - - def is_enabled(self): - return self.enabled - - def get_criteria(self): - return self.criteria - - def is_blocking(self): - return self.blocking - - def get_project(self): - return self.project - - def __str__(self): - msg = prettytable.PrettyTable( - header_style='upper', padding_width=5, - field_names=['test case', 'description', 'criteria', 'dependency']) - msg.add_row([self.name, textwrap.fill(self.description, width=40), - self.criteria, self.dependency]) - return msg.get_string() - - -class Dependency(object): - - def __init__(self, installer, scenario): - self.installer = installer - self.scenario = scenario - - def get_installer(self): - return self.installer - - def get_scenario(self): - return self.scenario - - def __str__(self): - delimitator = "\n" if self.get_installer( - ) and self.get_scenario() else "" - return "{}{}{}".format(self.get_installer(), delimitator, - self.get_scenario()) |