aboutsummaryrefslogtreecommitdiffstats
path: root/functest/ci
diff options
context:
space:
mode:
Diffstat (limited to 'functest/ci')
-rw-r--r--functest/ci/__init__.py0
-rw-r--r--functest/ci/add_proxy.sh138
-rw-r--r--functest/ci/check_deployment.py184
-rw-r--r--functest/ci/config_aarch64_patch.yaml151
-rw-r--r--functest/ci/config_functest.yaml123
-rw-r--r--functest/ci/config_patch.yaml516
-rw-r--r--functest/ci/convert_images.sh13
-rw-r--r--functest/ci/download_images.sh25
-rw-r--r--functest/ci/logging.debug.ini110
-rw-r--r--functest/ci/logging.ini48
-rw-r--r--functest/ci/rally_aarch64_patch.conf2
-rw-r--r--functest/ci/run_tests.py289
-rw-r--r--functest/ci/testcases.yaml1082
-rw-r--r--functest/ci/tier_builder.py107
-rw-r--r--functest/ci/tier_handler.py174
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())