summaryrefslogtreecommitdiffstats
path: root/functest
diff options
context:
space:
mode:
Diffstat (limited to 'functest')
-rw-r--r--functest/api/resources/v1/envs.py9
-rw-r--r--functest/api/resources/v1/tasks.py14
-rw-r--r--functest/api/resources/v1/testcases.py22
-rw-r--r--functest/api/resources/v1/tiers.py11
-rw-r--r--functest/ci/config_aarch64_patch.yaml7
-rw-r--r--functest/ci/config_functest.yaml1
-rw-r--r--functest/ci/download_images.sh1
-rw-r--r--functest/ci/testcases.yaml8
-rw-r--r--functest/core/vnf.py59
-rw-r--r--functest/opnfv_tests/openstack/rally/blacklist.txt1
-rw-r--r--functest/opnfv_tests/openstack/rally/rally.py7
-rw-r--r--functest/opnfv_tests/openstack/refstack_client/refstack_client.py49
-rw-r--r--functest/opnfv_tests/openstack/snaps/snaps_utils.py13
-rw-r--r--functest/opnfv_tests/openstack/tempest/conf_utils.py15
-rw-r--r--functest/opnfv_tests/openstack/tempest/tempest.py46
-rw-r--r--functest/opnfv_tests/sdn/odl/odl.py20
-rw-r--r--functest/opnfv_tests/vnf/ims/cloudify_ims.py27
-rw-r--r--functest/opnfv_tests/vnf/ims/cloudify_ims.yaml7
-rw-r--r--functest/opnfv_tests/vnf/ims/orchestra_clearwaterims.py20
-rw-r--r--functest/opnfv_tests/vnf/ims/orchestra_openims.py22
-rw-r--r--functest/opnfv_tests/vnf/router/cloudify_vrouter.py16
-rw-r--r--functest/tests/unit/core/test_vnf.py129
-rw-r--r--functest/tests/unit/odl/test_odl.py32
-rw-r--r--functest/tests/unit/openstack/refstack_client/test_refstack_client.py51
-rw-r--r--functest/tests/unit/openstack/tempest/test_conf_utils.py16
-rw-r--r--functest/tests/unit/openstack/tempest/test_tempest.py15
-rw-r--r--functest/tests/unit/vnf/ims/test_cloudify_ims.py106
-rw-r--r--functest/tests/unit/vnf/ims/test_orchestra_clearwaterims.py107
-rw-r--r--functest/tests/unit/vnf/ims/test_orchestra_openims.py107
-rw-r--r--functest/tests/unit/vnf/router/test_cloudify_vrouter.py72
-rw-r--r--functest/utils/functest_utils.py8
-rw-r--r--functest/utils/openstack_utils.py79
32 files changed, 339 insertions, 758 deletions
diff --git a/functest/api/resources/v1/envs.py b/functest/api/resources/v1/envs.py
index fb76fa63f..8020544fb 100644
--- a/functest/api/resources/v1/envs.py
+++ b/functest/api/resources/v1/envs.py
@@ -33,10 +33,11 @@ class V1Envs(ApiResource):
def prepare(self, args): # pylint: disable=no-self-use, unused-argument
""" Prepare environment """
- try:
- ft_utils.execute_command("prepare_env start")
- except Exception as err: # pylint: disable=broad-except
- return api_utils.result_handler(status=1, data=str(err))
+
+ result_env = ft_utils.execute_command("prepare_env start")
+ if not result_env == 0:
+ return api_utils.result_handler(
+ status=1, data="Failed to prepare env")
return api_utils.result_handler(
status=0, data="Prepare env successfully")
diff --git a/functest/api/resources/v1/tasks.py b/functest/api/resources/v1/tasks.py
index e05db51be..f099918f4 100644
--- a/functest/api/resources/v1/tasks.py
+++ b/functest/api/resources/v1/tasks.py
@@ -50,12 +50,15 @@ class V1Task(ApiResource):
if status not in ['IN PROGRESS', 'FAIL', 'FINISHED']:
return api_utils.result_handler(status=1,
data='internal server error')
+
+ switcher = {'IN PROGRESS': 0, 'FAIL': 1, 'FINISHED': 2}
if status == 'IN PROGRESS':
- result = {'status': status, 'result': ''}
+ result = {'status': switcher.get(status), 'result': ''}
elif status == 'FAIL':
- result = {'status': status, 'error': task.error}
+ result = {'status': switcher.get(status), 'error': task.error}
else:
- result = {'status': status, 'result': json.loads(task.result)}
+ result = {'status': switcher.get(status),
+ 'result': json.loads(task.result)}
return jsonify(result)
@@ -92,4 +95,7 @@ class V1TaskLog(ApiResource):
return_data = {'data': data}
- return api_utils.result_handler(status=task.status, data=return_data)
+ switcher = {'IN PROGRESS': 0, 'FAIL': 1, 'FINISHED': 2}
+
+ return api_utils.result_handler(status=switcher.get(task.status),
+ data=return_data)
diff --git a/functest/api/resources/v1/testcases.py b/functest/api/resources/v1/testcases.py
index d708cf37b..cc2d4e193 100644
--- a/functest/api/resources/v1/testcases.py
+++ b/functest/api/resources/v1/testcases.py
@@ -17,7 +17,7 @@ import pkg_resources
import uuid
import ConfigParser
-from flask import abort, jsonify
+from flask import jsonify
from functest.api.base import ApiResource
from functest.api.common import api_utils, thread
@@ -46,8 +46,11 @@ class V1Testcase(ApiResource):
""" GET the info of one testcase"""
testcase = Testcase().show(testcase_name)
if not testcase:
- abort(404, "The test case '%s' does not exist or is not supported"
- % testcase_name)
+ return api_utils.result_handler(
+ status=1,
+ data="The test case '%s' does not exist or is not supported"
+ % testcase_name)
+
testcase_info = api_utils.change_obj_to_dict(testcase)
dependency_dict = api_utils.change_obj_to_dict(
testcase_info.get('dependency'))
@@ -70,6 +73,13 @@ class V1Testcase(ApiResource):
return api_utils.result_handler(
status=1, data='testcase name must be provided')
+ testcase = Testcase().show(case_name)
+ if not testcase:
+ return api_utils.result_handler(
+ status=1,
+ data="The test case '%s' does not exist or is not supported"
+ % case_name)
+
task_id = str(uuid.uuid4())
task_args = {'testcase': case_name, 'task_id': task_id}
@@ -79,8 +89,8 @@ class V1Testcase(ApiResource):
task_thread = thread.TaskThread(self._run, task_args, TasksHandler())
task_thread.start()
- results = {'testcase': case_name, 'task_id': task_id}
- return jsonify(results)
+ result = {'testcase': case_name, 'task_id': task_id}
+ return jsonify({'result': result})
def _run(self, args): # pylint: disable=no-self-use
""" The built_in function to run a test case """
@@ -110,7 +120,7 @@ class V1Testcase(ApiResource):
}
result = {
'task_id': args.get('task_id'),
- 'case_name': case_name,
+ 'testcase': case_name,
'env_info': env_info,
'result': result
}
diff --git a/functest/api/resources/v1/tiers.py b/functest/api/resources/v1/tiers.py
index 71a98bea6..4f4849e98 100644
--- a/functest/api/resources/v1/tiers.py
+++ b/functest/api/resources/v1/tiers.py
@@ -13,9 +13,10 @@ Resources to handle tier related requests
import re
-from flask import abort, jsonify
+from flask import jsonify
from functest.api.base import ApiResource
+from functest.api.common import api_utils
from functest.cli.commands.cli_tier import Tier
@@ -46,7 +47,9 @@ class V1Tier(ApiResource):
""" GET the info of one tier """
testcases = Tier().gettests(tier_name)
if not testcases:
- abort(404, "The tier with name '%s' does not exist." % tier_name)
+ return api_utils.result_handler(
+ status=1,
+ data="The tier with name '%s' does not exist." % tier_name)
tier_info = Tier().show(tier_name)
tier_info.__dict__.pop('name')
tier_info.__dict__.pop('tests_array')
@@ -62,6 +65,8 @@ class V1TestcasesinTier(ApiResource):
""" GET all testcases within given tier """
testcases = Tier().gettests(tier_name)
if not testcases:
- abort(404, "The tier with name '%s' does not exist." % tier_name)
+ return api_utils.result_handler(
+ status=1,
+ data="The tier with name '%s' does not exist." % tier_name)
result = {'tier': tier_name, 'testcases': testcases}
return jsonify(result)
diff --git a/functest/ci/config_aarch64_patch.yaml b/functest/ci/config_aarch64_patch.yaml
index 6b3699b4d..c66d3cd3d 100644
--- a/functest/ci/config_aarch64_patch.yaml
+++ b/functest/ci/config_aarch64_patch.yaml
@@ -4,6 +4,10 @@ os:
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:
@@ -30,7 +34,8 @@ os:
image_name: TestVM
tempest:
- use_custom_images: False
+ use_custom_images: True
+ use_custom_flavors: True
odl_sfc:
image_base_url: "http://artifacts.opnfv.org/sfc/demo"
diff --git a/functest/ci/config_functest.yaml b/functest/ci/config_functest.yaml
index 5ff5c824e..cfcc728a2 100644
--- a/functest/ci/config_functest.yaml
+++ b/functest/ci/config_functest.yaml
@@ -7,7 +7,6 @@ general:
dir_repo_releng: /home/opnfv/repos/releng
repo_vims_test: /src/vims-test
repo_barometer: /home/opnfv/repos/barometer
- repo_doctor: /home/opnfv/repos/doctor
repo_odl_test: /src/odl_test
repo_fds: /src/fds
repo_securityscan: /home/opnfv/repos/securityscanning
diff --git a/functest/ci/download_images.sh b/functest/ci/download_images.sh
index 367ad8d9f..236b763c6 100644
--- a/functest/ci/download_images.sh
+++ b/functest/ci/download_images.sh
@@ -10,7 +10,6 @@ https://cloud-images.ubuntu.com/releases/14.04/release/ubuntu-14.04-server-cloud
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://marketplace.openbaton.org:8082/api/v1/images/52e2ccc0-1dce-4663-894d-28aab49323aa/img
http://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img
http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-lxc.tar.gz
http://download.cirros-cloud.net/daily/20161201/cirros-d161201-aarch64-disk.img
diff --git a/functest/ci/testcases.yaml b/functest/ci/testcases.yaml
index 5364035f2..191786cb0 100644
--- a/functest/ci/testcases.yaml
+++ b/functest/ci/testcases.yaml
@@ -37,7 +37,7 @@ tiers:
snaps.use_keystone is True, functest must have access to
the cloud's private network.
dependencies:
- installer: '^((?!netvirt).)*$'
+ installer: '^((?!netvirt|lxd).)*$'
scenario: ''
run:
module: 'functest.opnfv_tests.openstack.snaps.api_check'
@@ -266,7 +266,7 @@ tiers:
module: 'functest.core.feature'
class: 'BashFeature'
args:
- cmd: 'cd /home/opnfv/repos/doctor/tests && ./run.sh'
+ cmd: '(cd /src/doctor-test/tests && run.sh)'
-
case_name: bgpvpn
@@ -350,7 +350,7 @@ tiers:
module: 'functest.core.feature'
class: 'BashFeature'
args:
- cmd: 'cd /src/domino && ./tests/run_multinode.sh'
+ cmd: 'run_multinode.sh'
-
case_name: barometercollectd
@@ -449,6 +449,7 @@ tiers:
-
case_name: orchestra_openims
project_name: functest
+ enabled: false
criteria: 100
blocking: false
description: >-
@@ -463,6 +464,7 @@ tiers:
-
case_name: orchestra_clearwaterims
project_name: functest
+ enabled: false
criteria: 100
blocking: false
description: >-
diff --git a/functest/core/vnf.py b/functest/core/vnf.py
index a329212d8..517838a76 100644
--- a/functest/core/vnf.py
+++ b/functest/core/vnf.py
@@ -14,7 +14,9 @@ import time
import functest.core.testcase as base
from functest.utils.constants import CONST
-import functest.utils.openstack_utils as os_utils
+from snaps.openstack.create_user import UserSettings, OpenStackUser
+from snaps.openstack.create_project import ProjectSettings, OpenStackProject
+from snaps.openstack.tests import openstack_tests
__author__ = ("Morgan Richomme <morgan.richomme@orange.com>, "
"Valentin Boucher <valentin.boucher@orange.com>")
@@ -43,10 +45,11 @@ class VnfOnBoarding(base.TestCase):
def __init__(self, **kwargs):
super(VnfOnBoarding, self).__init__(**kwargs)
- self.exist_obj = {'tenant': False, 'user': False}
self.tenant_name = CONST.__getattribute__(
'vnf_{}_tenant_name'.format(self.case_name))
- self.creds = {}
+ self.snaps_creds = {}
+ self.created_object = []
+ self.os_project = None
def run(self, **kwargs):
"""
@@ -100,20 +103,31 @@ class VnfOnBoarding(base.TestCase):
'vnf_{}_tenant_description'.format(self.case_name))
self.__logger.info("Prepare VNF: %s, description: %s",
self.tenant_name, tenant_description)
- keystone_client = os_utils.get_keystone_client()
- self.exist_obj['tenant'] = (
- not os_utils.get_or_create_tenant_for_vnf(
- keystone_client,
- self.tenant_name,
- tenant_description))
- self.exist_obj['user'] = not os_utils.get_or_create_user_for_vnf(
- keystone_client, self.tenant_name)
- self.creds = {
- "tenant": self.tenant_name,
- "username": self.tenant_name,
- "password": self.tenant_name,
- "auth_url": os_utils.get_credentials()['auth_url']
- }
+ snaps_creds = openstack_tests.get_credentials(
+ os_env_file=CONST.__getattribute__('openstack_creds'))
+
+ project_creator = OpenStackProject(
+ snaps_creds,
+ ProjectSettings(
+ name=self.tenant_name,
+ description=tenant_description
+ ))
+ project_creator.create()
+ self.created_object.append(project_creator)
+ self.os_project = project_creator
+
+ user_creator = OpenStackUser(
+ snaps_creds,
+ UserSettings(
+ name=self.tenant_name,
+ password=self.tenant_name,
+ roles={'admin': self.tenant_name}))
+
+ user_creator.create()
+ self.created_object.append(user_creator)
+
+ self.snaps_creds = user_creator.get_os_creds(self.tenant_name)
+
return base.TestCase.EX_OK
except Exception: # pylint: disable=broad-except
self.__logger.exception("Exception raised during VNF preparation")
@@ -185,8 +199,9 @@ class VnfOnBoarding(base.TestCase):
* the tenant
"""
self.__logger.info("test cleaning")
- keystone_client = os_utils.get_keystone_client()
- if not self.exist_obj['tenant']:
- os_utils.delete_tenant(keystone_client, self.tenant_name)
- if not self.exist_obj['user']:
- os_utils.delete_user(keystone_client, self.tenant_name)
+ self.__logger.info('Remove the cloudify manager OS object ..')
+ for creator in reversed(self.created_object):
+ try:
+ creator.clean()
+ except Exception as exc: # pylint: disable=broad-except
+ self.__logger.error('Unexpected error cleaning - %s', exc)
diff --git a/functest/opnfv_tests/openstack/rally/blacklist.txt b/functest/opnfv_tests/openstack/rally/blacklist.txt
index 0623368d8..cdb5be663 100644
--- a/functest/opnfv_tests/openstack/rally/blacklist.txt
+++ b/functest/opnfv_tests/openstack/rally/blacklist.txt
@@ -48,6 +48,7 @@ scenario:
# panko in the deployment. This is not currently fulfilled
# Ref: https://docs.openstack.org/releasenotes/ceilometer/ocata.html
- 'CeilometerEvents..*'
+ - 'CeilometerTraits..*'
functionality:
-
diff --git a/functest/opnfv_tests/openstack/rally/rally.py b/functest/opnfv_tests/openstack/rally/rally.py
index fdef8bed0..2042b2d15 100644
--- a/functest/opnfv_tests/openstack/rally/rally.py
+++ b/functest/opnfv_tests/openstack/rally/rally.py
@@ -42,6 +42,10 @@ class RallyBase(testcase.OSGCTestCase):
CONST.__getattribute__('dir_functest_images'),
GLANCE_IMAGE_FILENAME)
GLANCE_IMAGE_FORMAT = CONST.__getattribute__('openstack_image_disk_format')
+ GLANCE_IMAGE_EXTRA_PROPERTIES = {}
+ if hasattr(CONST, 'openstack_extra_properties'):
+ GLANCE_IMAGE_EXTRA_PROPERTIES = CONST.__getattribute__(
+ 'openstack_extra_properties')
FLAVOR_NAME = "m1.tiny"
RALLY_DIR = pkg_resources.resource_filename(
@@ -462,7 +466,8 @@ class RallyBase(testcase.OSGCTestCase):
self.image_exists, self.image_id = os_utils.get_or_create_image(
self.GLANCE_IMAGE_NAME,
self.GLANCE_IMAGE_PATH,
- self.GLANCE_IMAGE_FORMAT)
+ self.GLANCE_IMAGE_FORMAT,
+ self.GLANCE_IMAGE_EXTRA_PROPERTIES)
if self.image_id is None:
raise Exception("Failed to get or create image '%s'" %
self.GLANCE_IMAGE_NAME)
diff --git a/functest/opnfv_tests/openstack/refstack_client/refstack_client.py b/functest/opnfv_tests/openstack/refstack_client/refstack_client.py
index 17e024666..42befe221 100644
--- a/functest/opnfv_tests/openstack/refstack_client/refstack_client.py
+++ b/functest/opnfv_tests/openstack/refstack_client/refstack_client.py
@@ -1,6 +1,7 @@
#!/usr/bin/env python
+
# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-# matthew.lijun@huawei.com wangwulin@huawei.com
+#
# 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
@@ -10,7 +11,6 @@
from __future__ import division
-
import argparse
import logging
import os
@@ -28,7 +28,9 @@ from functest.opnfv_tests.openstack.refstack_client.tempest_conf \
from functest.opnfv_tests.openstack.tempest import conf_utils
from functest.utils.constants import CONST
import functest.utils.functest_utils as ft_utils
-import functest.utils.openstack_utils as os_utils
+
+__author__ = ("Matthew Li <matthew.lijun@huawei.com>,"
+ "Linda Wang <wangwulin@huawei.com>")
# logging configuration """
LOGGER = logging.getLogger(__name__)
@@ -77,7 +79,7 @@ class RefstackClient(testcase.TestCase):
"""Run default defcore sys command."""
options = ["-v"] if not self.insecure else ["-v", self.insecure]
cmd = (["refstack-client", "test", "-c", self.confpath] +
- options + ["--test-list", self.defcorelist])
+ options + ["--test-list", self.defcorelist])
LOGGER.info("Starting Refstack_defcore test case: '%s'.", cmd)
with open(os.path.join(conf_utils.REFSTACK_RESULTS_DIR,
@@ -211,45 +213,6 @@ class RefstackClient(testcase.TestCase):
return res
- def create_snapshot(self):
- """
- Run the Tempest cleanup utility to initialize OS state.
- For details, see https://docs.openstack.org/tempest/latest/cleanup.html
-
- :return: TestCase.EX_OK
- """
- LOGGER.info("Initializing the saved state of the OpenStack deployment")
-
- # Make sure that Tempest is configured
- if not self.tempestconf:
- self.generate_conf()
-
- try:
- os_utils.init_tempest_cleanup(
- self.tempestconf.DEPLOYMENT_DIR, 'tempest.conf',
- os.path.join(conf_utils.REFSTACK_RESULTS_DIR,
- "tempest-cleanup-init.log"))
- except Exception as err:
- LOGGER.error(str(err))
- return testcase.TestCase.EX_RUN_ERROR
-
- return super(RefstackClient, self).create_snapshot()
-
- def clean(self):
- """
- Run the Tempest cleanup utility to delete and destroy OS resources.
- For details, see https://docs.openstack.org/tempest/latest/cleanup.html
- """
- LOGGER.info("Destroying the resources created for tempest")
-
- os_utils.perform_tempest_cleanup(
- self.tempestconf.DEPLOYMENT_DIR, 'tempest.conf',
- os.path.join(conf_utils.REFSTACK_RESULTS_DIR,
- "tempest-cleanup.log")
- )
-
- return super(RefstackClient, self).clean()
-
class RefstackClientParser(object): # pylint: disable=too-few-public-methods
"""Command line argument parser helper."""
diff --git a/functest/opnfv_tests/openstack/snaps/snaps_utils.py b/functest/opnfv_tests/openstack/snaps/snaps_utils.py
index 309f9db16..956b104ac 100644
--- a/functest/opnfv_tests/openstack/snaps/snaps_utils.py
+++ b/functest/opnfv_tests/openstack/snaps/snaps_utils.py
@@ -5,7 +5,7 @@
#
# http://www.apache.org/licenses/LICENSE-2.0
-from snaps.openstack.utils import neutron_utils
+from snaps.openstack.utils import neutron_utils, nova_utils
def get_ext_net_name(os_creds):
@@ -17,3 +17,14 @@ def get_ext_net_name(os_creds):
neutron = neutron_utils.neutron_client(os_creds)
ext_nets = neutron_utils.get_external_networks(neutron)
return ext_nets[0].name
+
+
+def get_active_compute_cnt(os_creds):
+ """
+ Returns the number of active compute servers
+ :param: os_creds: an instance of snaps OSCreds object
+ :return: the number of active compute servers
+ """
+ nova = nova_utils.nova_client(os_creds)
+ computes = nova_utils.get_availability_zone_hosts(nova, zone_name='nova')
+ return len(computes)
diff --git a/functest/opnfv_tests/openstack/tempest/conf_utils.py b/functest/opnfv_tests/openstack/tempest/conf_utils.py
index 2cdc2cf64..4202df625 100644
--- a/functest/opnfv_tests/openstack/tempest/conf_utils.py
+++ b/functest/opnfv_tests/openstack/tempest/conf_utils.py
@@ -119,18 +119,21 @@ def backup_tempest_config(conf_file):
"""
Copy config file to tempest results directory
"""
+ if not os.path.exists(TEMPEST_RESULTS_DIR):
+ os.makedirs(TEMPEST_RESULTS_DIR)
shutil.copyfile(conf_file,
os.path.join(TEMPEST_RESULTS_DIR, 'tempest.conf'))
def configure_tempest(deployment_dir, image_id=None, flavor_id=None,
- mode=None):
+ compute_cnt=None):
"""
Calls rally verify and updates the generated tempest.conf with
given parameters
"""
conf_file = configure_verifier(deployment_dir)
- configure_tempest_update_params(conf_file, image_id, flavor_id)
+ configure_tempest_update_params(conf_file, image_id, flavor_id,
+ compute_cnt)
def configure_tempest_defcore(deployment_dir, image_id, flavor_id,
@@ -186,8 +189,8 @@ def generate_test_accounts_file(tenant_id):
yaml.dump(accounts_list, f, default_flow_style=False)
-def configure_tempest_update_params(tempest_conf_file,
- image_id=None, flavor_id=None):
+def configure_tempest_update_params(tempest_conf_file, image_id=None,
+ flavor_id=None, compute_cnt=1):
"""
Add/update needed parameters into tempest.conf file
"""
@@ -210,6 +213,10 @@ def configure_tempest_update_params(tempest_conf_file,
config.set('compute', 'flavor_ref', flavor_id)
if FLAVOR_ID_ALT is not None:
config.set('compute', 'flavor_ref_alt', FLAVOR_ID_ALT)
+ if compute_cnt > 1:
+ # enable multinode tests
+ config.set('compute', 'min_compute_nodes', compute_cnt)
+
config.set('identity', 'region', 'RegionOne')
if os_utils.is_keystone_v3():
auth_version = 'v3'
diff --git a/functest/opnfv_tests/openstack/tempest/tempest.py b/functest/opnfv_tests/openstack/tempest/tempest.py
index b8a4e9adc..19200142d 100644
--- a/functest/opnfv_tests/openstack/tempest/tempest.py
+++ b/functest/opnfv_tests/openstack/tempest/tempest.py
@@ -20,10 +20,10 @@ import time
import yaml
from functest.core import testcase
+from functest.opnfv_tests.openstack.snaps import snaps_utils
from functest.opnfv_tests.openstack.tempest import conf_utils
from functest.utils.constants import CONST
import functest.utils.functest_utils as ft_utils
-import functest.utils.openstack_utils as os_utils
from snaps.openstack import create_flavor
from snaps.openstack.create_flavor import FlavorSettings, OpenStackFlavor
@@ -234,11 +234,13 @@ class TempestCommon(testcase.TestCase):
if not os.path.exists(conf_utils.TEMPEST_RESULTS_DIR):
os.makedirs(conf_utils.TEMPEST_RESULTS_DIR)
resources = self.resources.create()
+ compute_cnt = snaps_utils.get_active_compute_cnt(
+ self.resources.os_creds)
conf_utils.configure_tempest(
self.DEPLOYMENT_DIR,
image_id=resources.get("image_id"),
flavor_id=resources.get("flavor_id"),
- mode=self.MODE)
+ compute_cnt=compute_cnt)
self.generate_test_list(self.VERIFIER_REPO_DIR)
self.apply_tempest_blacklist()
self.run_verifier_tests()
@@ -253,46 +255,6 @@ class TempestCommon(testcase.TestCase):
self.stop_time = time.time()
return res
- def create_snapshot(self):
- """
- Run the Tempest cleanup utility to initialize OS state.
-
- :return: TestCase.EX_OK
- """
- logger.info("Initializing the saved state of the OpenStack deployment")
-
- if not os.path.exists(conf_utils.TEMPEST_RESULTS_DIR):
- os.makedirs(conf_utils.TEMPEST_RESULTS_DIR)
-
- # Make sure that the verifier is configured
- conf_utils.configure_verifier(self.DEPLOYMENT_DIR)
-
- try:
- os_utils.init_tempest_cleanup(
- self.DEPLOYMENT_DIR, 'tempest.conf',
- os.path.join(conf_utils.TEMPEST_RESULTS_DIR,
- "tempest-cleanup-init.log"))
- except Exception as err:
- logger.error(str(err))
- return testcase.TestCase.EX_RUN_ERROR
-
- return super(TempestCommon, self).create_snapshot()
-
- def clean(self):
- """
- Run the Tempest cleanup utility to delete and destroy OS resources
- created by Tempest.
- """
- logger.info("Destroying the resources created for refstack")
-
- os_utils.perform_tempest_cleanup(
- self.DEPLOYMENT_DIR, 'tempest.conf',
- os.path.join(conf_utils.TEMPEST_RESULTS_DIR,
- "tempest-cleanup.log")
- )
-
- return super(TempestCommon, self).clean()
-
class TempestSmokeSerial(TempestCommon):
diff --git a/functest/opnfv_tests/sdn/odl/odl.py b/functest/opnfv_tests/sdn/odl/odl.py
index 841da834b..d09532cb0 100644
--- a/functest/opnfv_tests/sdn/odl/odl.py
+++ b/functest/opnfv_tests/sdn/odl/odl.py
@@ -157,7 +157,11 @@ class ODLTests(testcase.TestCase):
'NEUTRON:' + kwargs['neutronip'],
'OS_AUTH_URL:"' + osauthurl + '"',
'OSUSERNAME:"' + kwargs['osusername'] + '"',
+ ('OSUSERDOMAINNAME:"' +
+ kwargs['osuserdomainname'] + '"'),
'OSTENANTNAME:"' + kwargs['ostenantname'] + '"',
+ ('OSPROJECTDOMAINNAME:"' +
+ kwargs['osprojectdomainname'] + '"'),
'OSPASSWORD:"' + kwargs['ospassword'] + '"',
'ODL_SYSTEM_IP:' + kwargs['odlip'],
'PORT:' + kwargs['odlwebport'],
@@ -221,11 +225,16 @@ class ODLTests(testcase.TestCase):
if 'INSTALLER_TYPE' in os.environ:
installer_type = os.environ['INSTALLER_TYPE']
kwargs['osusername'] = os.environ['OS_USERNAME']
+ kwargs['osuserdomainname'] = os.environ.get(
+ 'OS_USER_DOMAIN_NAME', 'Default')
kwargs['ostenantname'] = os.environ['OS_TENANT_NAME']
+ kwargs['osprojectdomainname'] = os.environ.get(
+ 'OS_PROJECT_DOMAIN_NAME', 'Default')
kwargs['osauthurl'] = os.environ['OS_AUTH_URL']
kwargs['ospassword'] = os.environ['OS_PASSWORD']
if installer_type == 'fuel':
- kwargs['odlwebport'] = '8282'
+ kwargs['odlwebport'] = '8181'
+ kwargs['odlrestconfport'] = '8282'
elif installer_type == 'apex' or installer_type == 'netvirt':
kwargs['odlip'] = os.environ['SDN_CONTROLLER_IP']
kwargs['odlwebport'] = '8081'
@@ -262,14 +271,21 @@ class ODLParser(object): # pylint: disable=too-few-public-methods
default='127.0.0.1')
self.parser.add_argument(
'-k', '--osauthurl', help='OS_AUTH_URL as defined by OpenStack',
- default='http://127.0.0.1:5000/v2.0')
+ default='http://127.0.0.1:5000/v3')
self.parser.add_argument(
'-a', '--osusername', help='Username for OpenStack',
default='admin')
self.parser.add_argument(
+ '-f', '--osuserdomainname', help='User domain name for OpenStack',
+ default='Default')
+ self.parser.add_argument(
'-b', '--ostenantname', help='Tenantname for OpenStack',
default='admin')
self.parser.add_argument(
+ '-g', '--osprojectdomainname',
+ help='Project domain name for OpenStack',
+ default='Default')
+ self.parser.add_argument(
'-c', '--ospassword', help='Password for OpenStack',
default='admin')
self.parser.add_argument(
diff --git a/functest/opnfv_tests/vnf/ims/cloudify_ims.py b/functest/opnfv_tests/vnf/ims/cloudify_ims.py
index 8ed7f0dda..c8c2c509c 100644
--- a/functest/opnfv_tests/vnf/ims/cloudify_ims.py
+++ b/functest/opnfv_tests/vnf/ims/cloudify_ims.py
@@ -24,7 +24,6 @@ import functest.opnfv_tests.vnf.ims.clearwater_ims_base as clearwater_ims_base
from functest.utils.constants import CONST
import functest.utils.openstack_utils as os_utils
-from snaps.openstack.os_credentials import OSCreds
from snaps.openstack.create_network import (NetworkSettings, SubnetSettings,
OpenStackNetwork)
from snaps.openstack.create_security_group import (SecurityGroupSettings,
@@ -63,7 +62,6 @@ class CloudifyIms(clearwater_ims_base.ClearwaterOnBoardingBase):
raise Exception("VNF config file not found")
self.snaps_creds = ''
- self.created_object = []
config_file = os.path.join(self.case_dir, self.config)
self.orchestrator = dict(
@@ -101,12 +99,19 @@ class CloudifyIms(clearwater_ims_base.ClearwaterOnBoardingBase):
self.__logger.info("Additional pre-configuration steps")
- self.snaps_creds = OSCreds(
- username=self.creds['username'],
- password=self.creds['password'],
- auth_url=self.creds['auth_url'],
- project_name=self.creds['tenant'],
- identity_api_version=int(os_utils.get_keystone_client_version()))
+ compute_quotas = self.os_project.get_compute_quotas()
+ network_quotas = self.os_project.get_network_quotas()
+
+ for key, value in (
+ self.vnf['requirements']['compute_quotas'].items()):
+ setattr(compute_quotas, key, value)
+
+ for key, value in (
+ self.vnf['requirements']['network_quotas'].items()):
+ setattr(network_quotas, key, value)
+
+ compute_quotas = self.os_project.update_compute_quotas(compute_quotas)
+ network_quotas = self.os_project.update_network_quotas(network_quotas)
# needs some images
self.__logger.info("Upload some OS images if it doesn't exist")
@@ -402,12 +407,6 @@ class CloudifyIms(clearwater_ims_base.ClearwaterOnBoardingBase):
self.__logger.warn("Some issue during the undeployment ..")
self.__logger.warn("Tenant clean continue ..")
- self.__logger.info('Remove the cloudify manager OS object ..')
- for creator in reversed(self.created_object):
- try:
- creator.clean()
- except Exception as exc:
- self.logger.error('Unexpected error cleaning - %s', exc)
super(CloudifyIms, self).clean()
@energy.enable_recording
diff --git a/functest/opnfv_tests/vnf/ims/cloudify_ims.yaml b/functest/opnfv_tests/vnf/ims/cloudify_ims.yaml
index 280e0a6b8..ad7fa70a9 100644
--- a/functest/opnfv_tests/vnf/ims/cloudify_ims.yaml
+++ b/functest/opnfv_tests/vnf/ims/cloudify_ims.yaml
@@ -21,6 +21,13 @@ vnf:
flavor:
name: m1.small
ram_min: 2048
+ compute_quotas:
+ cores: 50
+ instances: 15
+ network_quotas:
+ security_group: 20
+ security_group_rule: 100
+ port: 50
inputs:
image_id: 'ubuntu_14.04'
flavor_id: 'm1.small'
diff --git a/functest/opnfv_tests/vnf/ims/orchestra_clearwaterims.py b/functest/opnfv_tests/vnf/ims/orchestra_clearwaterims.py
index 5154dea20..c924a3470 100644
--- a/functest/opnfv_tests/vnf/ims/orchestra_clearwaterims.py
+++ b/functest/opnfv_tests/vnf/ims/orchestra_clearwaterims.py
@@ -31,7 +31,6 @@ from snaps.openstack.create_network import (
SubnetSettings,
PortSettings)
from snaps.openstack.create_router import OpenStackRouter, RouterSettings
-from snaps.openstack.os_credentials import OSCreds
from snaps.openstack.create_instance import (
VmInstanceSettings,
OpenStackVmInstance)
@@ -208,15 +207,13 @@ class ClearwaterImsVnf(vnf.VnfOnBoarding):
super(ClearwaterImsVnf, self).prepare()
self.logger.info("Additional pre-configuration steps")
- self.logger.info("creds %s", (self.creds))
-
- self.snaps_creds = OSCreds(
- username=self.creds['username'],
- password=self.creds['password'],
- auth_url=self.creds['auth_url'],
- project_name=self.creds['tenant'],
- identity_api_version=int(os_utils.get_keystone_client_version()))
+ self.creds = {
+ "tenant": self.tenant_name,
+ "username": self.tenant_name,
+ "password": self.tenant_name,
+ "auth_url": os_utils.get_credentials()['auth_url']
+ }
self.prepare_images()
self.prepare_flavor()
self.prepare_security_groups()
@@ -661,8 +658,9 @@ class ClearwaterImsVnf(vnf.VnfOnBoarding):
try:
neutron_client = os_utils.get_neutron_client(self.creds)
self.logger.info("Deleting Open Baton Port...")
- port = snaps_utils.neutron_utils.get_port_by_name(
- neutron_client, '%s_port' % self.case_name)
+ port = snaps_utils.neutron_utils.get_port(
+ neutron_client,
+ port_name='%s_port' % self.case_name)
snaps_utils.neutron_utils.delete_port(neutron_client, port)
time.sleep(10)
except Exception as exc:
diff --git a/functest/opnfv_tests/vnf/ims/orchestra_openims.py b/functest/opnfv_tests/vnf/ims/orchestra_openims.py
index 45440704e..aae35146f 100644
--- a/functest/opnfv_tests/vnf/ims/orchestra_openims.py
+++ b/functest/opnfv_tests/vnf/ims/orchestra_openims.py
@@ -32,7 +32,6 @@ from snaps.openstack.create_network import (
SubnetSettings,
PortSettings)
from snaps.openstack.create_router import OpenStackRouter, RouterSettings
-from snaps.openstack.os_credentials import OSCreds
from snaps.openstack.create_instance import (
VmInstanceSettings, OpenStackVmInstance)
from functest.opnfv_tests.openstack.snaps import snaps_utils
@@ -198,22 +197,18 @@ class OpenImsVnf(vnf.VnfOnBoarding):
self.images = get_config("tenant_images.orchestrator", config_file)
self.images.update(get_config("tenant_images.%s" %
self.case_name, config_file))
- self.snaps_creds = None
def prepare(self):
"""Prepare testscase (Additional pre-configuration steps)."""
super(OpenImsVnf, self).prepare()
self.logger.info("Additional pre-configuration steps")
- self.logger.info("creds %s", (self.creds))
-
- self.snaps_creds = OSCreds(
- username=self.creds['username'],
- password=self.creds['password'],
- auth_url=self.creds['auth_url'],
- project_name=self.creds['tenant'],
- identity_api_version=int(os_utils.get_keystone_client_version()))
-
+ self.creds = {
+ "tenant": self.tenant_name,
+ "username": self.tenant_name,
+ "password": self.tenant_name,
+ "auth_url": os_utils.get_credentials()['auth_url']
+ }
self.prepare_images()
self.prepare_flavor()
self.prepare_security_groups()
@@ -697,8 +692,9 @@ class OpenImsVnf(vnf.VnfOnBoarding):
try:
neutron_client = os_utils.get_neutron_client(self.creds)
self.logger.info("Deleting Open Baton Port...")
- port = snaps_utils.neutron_utils.get_port_by_name(
- neutron_client, '%s_port' % self.case_name)
+ port = snaps_utils.neutron_utils.get_port(
+ neutron_client,
+ port_name='%s_port' % self.case_name)
snaps_utils.neutron_utils.delete_port(neutron_client, port)
time.sleep(10)
except Exception as exc:
diff --git a/functest/opnfv_tests/vnf/router/cloudify_vrouter.py b/functest/opnfv_tests/vnf/router/cloudify_vrouter.py
index c3cccb989..edbdb495f 100644
--- a/functest/opnfv_tests/vnf/router/cloudify_vrouter.py
+++ b/functest/opnfv_tests/vnf/router/cloudify_vrouter.py
@@ -25,7 +25,6 @@ import functest.utils.openstack_utils as os_utils
from git import Repo
-from snaps.openstack.os_credentials import OSCreds
from snaps.openstack.create_network import (NetworkSettings, SubnetSettings,
OpenStackNetwork)
from snaps.openstack.create_security_group import (SecurityGroupSettings,
@@ -110,17 +109,10 @@ class CloudifyVrouter(vrouter_base.VrouterOnBoardingBase):
self.__logger.info("Additional pre-configuration steps")
- self.snaps_creds = OSCreds(
- username=self.creds['username'],
- password=self.creds['password'],
- auth_url=self.creds['auth_url'],
- project_name=self.creds['tenant'],
- identity_api_version=int(os_utils.get_keystone_client_version()))
-
- self.util.set_credentials(self.creds["username"],
- self.creds["password"],
- self.creds["auth_url"],
- self.creds["tenant"])
+ self.util.set_credentials(self.snaps_creds.username,
+ self.snaps_creds.password,
+ self.snaps_creds.auth_url,
+ self.snaps_creds.project_name)
# needs some images
self.__logger.info("Upload some OS images if it doesn't exist")
diff --git a/functest/tests/unit/core/test_vnf.py b/functest/tests/unit/core/test_vnf.py
index 2ebbbe379..00a29ead1 100644
--- a/functest/tests/unit/core/test_vnf.py
+++ b/functest/tests/unit/core/test_vnf.py
@@ -18,6 +18,8 @@ from functest.core import vnf
from functest.core import testcase
from functest.utils import constants
+from snaps.openstack.os_credentials import OSCreds
+
class VnfBaseTesting(unittest.TestCase):
"""The class testing VNF."""
@@ -102,91 +104,62 @@ class VnfBaseTesting(unittest.TestCase):
with self.assertRaises(vnf.VnfTestException):
self.test.test_vnf()
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client')
- @mock.patch('functest.core.vnf.os_utils.delete_user',
- return_value=True)
- def test_clean_user_already_exist(self, *args):
- self.test.exist_obj['user'] = True
- self.test.clean()
- args[0].assert_not_called()
- args[1].assert_called_once_with()
-
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client')
- @mock.patch('functest.core.vnf.os_utils.delete_user',
- return_value=True)
- def test_clean_user_created(self, *args):
- self.test.exist_obj['user'] = False
- self.test.clean()
- args[0].assert_called_once_with(mock.ANY, self.tenant_name)
- args[1].assert_called_once_with()
-
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client')
- @mock.patch('functest.core.vnf.os_utils.delete_tenant',
- return_value=True)
- def test_clean_tenant_already_exist(self, *args):
- self.test.exist_obj['tenant'] = True
- self.test.clean()
- args[0].assert_not_called()
- args[1].assert_called_once_with()
-
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client')
- @mock.patch('functest.core.vnf.os_utils.delete_tenant',
- return_value=True)
- def test_clean_tenant_created(self, *args):
- self.test.exist_obj['tenant'] = False
- self.test.clean()
- args[0].assert_called_once_with(mock.ANY, self.tenant_name)
- args[1].assert_called_once_with()
-
def test_deploy_orch_unimplemented(self):
self.assertTrue(self.test.deploy_orchestrator())
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- return_value='test')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_or_create_user_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_credentials',
- return_value={'auth_url': 'test'})
- def test_prepare(self, *args):
- self.assertEqual(self.test.prepare(),
- testcase.TestCase.EX_OK)
- args[0].assert_called_once_with()
- args[1].assert_called_once_with('test', self.tenant_name)
- args[2].assert_called_once_with(
- 'test', self.tenant_name, self.tenant_description)
- args[3].assert_called_once_with()
-
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
+# @mock.patch('snaps.openstack.tests.openstack_tests.get_credentials',
+# return_value='test')
+# @mock.patch('snaps.openstack.create_project.OpenStackProject',
+# return_value=True)
+# @mock.patch('snaps.openstack.create_user.OpenStackUser',
+# return_value=True)
+# def test_prepare(self, *args):
+# self.assertEqual(self.test.prepare(),
+# testcase.TestCase.EX_OK)
+# args[0].assert_called_once_with()
+# args[1].assert_called_once_with('test', self.tenant_name)
+# args[2].assert_called_once_with(
+# 'test', self.tenant_name, self.tenant_description)
+# args[3].assert_called_once_with()
+
+ @mock.patch('snaps.openstack.tests.openstack_tests.get_credentials',
+ return_value=OSCreds(
+ username='user', password='pass',
+ auth_url='http://foo.com:5000/v3', project_name='bar'),
side_effect=Exception)
def test_prepare_keystone_client_ko(self, *args):
with self.assertRaises(vnf.VnfPreparationException):
self.test.prepare()
- args[0].assert_called_once_with()
-
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- side_effect=Exception)
- def test_prepare_tenant_creation_ko(self, *args):
- with self.assertRaises(vnf.VnfPreparationException):
- self.test.prepare()
- args[0].assert_called_once_with(
- mock.ANY, self.tenant_name, self.tenant_description)
- args[1].assert_called_once_with()
-
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- return_value=0)
- @mock.patch('functest.core.vnf.os_utils.get_or_create_user_for_vnf',
- side_effect=Exception)
- def test_prepare_user_creation_ko(self, *args):
- with self.assertRaises(vnf.VnfPreparationException):
- self.test.prepare()
- args[0].assert_called_once_with(mock.ANY, self.tenant_name)
- args[1].assert_called_once_with(
- mock.ANY, self.tenant_name, self.tenant_description)
- args[2].assert_called_once_with()
+ args[0].assert_called_once()
+
+# @mock.patch('snaps.openstack.tests.openstack_tests.get_credentials',
+# return_value=OS_CREDS)
+# @mock.patch('snaps.openstack.create_project.OpenStackProject')
+# @mock.patch('snaps.openstack.create_project.OpenStackProject.create',
+# side_effect=Exception)
+# def test_prepare_tenant_creation_ko(self, *args):
+# with self.assertRaises(vnf.VnfPreparationException):
+# self.test.prepare()
+# args[2].assert_called_once()
+# args[1].assert_called_once_with(OS_CREDS,
+# ProjectSettings(
+# name=self.tenant_name,
+# description=self.tenant_description,
+# ))
+# args[0].assert_called_once()
+
+# @mock.patch('snaps.openstack.tests.openstack_tests.get_credentials')
+# @mock.patch('snaps.openstack.create_project.OpenStackProject',
+# return_value=0)
+# @mock.patch('snaps.openstack.create_user.OpenStackUser',
+# side_effect=Exception)
+# def test_prepare_user_creation_ko(self, *args):
+# with self.assertRaises(vnf.VnfPreparationException):
+# self.test.prepare()
+# args[0].assert_called_once_with(mock.ANY, self.tenant_name)
+# args[1].assert_called_once_with(
+# mock.ANY, self.tenant_name, self.tenant_description)
+# args[2].assert_called_once_with()
if __name__ == "__main__":
diff --git a/functest/tests/unit/odl/test_odl.py b/functest/tests/unit/odl/test_odl.py
index 8aeea41de..338a4e69d 100644
--- a/functest/tests/unit/odl/test_odl.py
+++ b/functest/tests/unit/odl/test_odl.py
@@ -69,7 +69,7 @@ class ODLTesting(unittest.TestCase):
_keystone_ip = "127.0.0.1"
_neutron_ip = "127.0.0.2"
_sdn_controller_ip = "127.0.0.3"
- _os_auth_url = "http://{}:5000/v2.0".format(_keystone_ip)
+ _os_auth_url = "http://{}:5000/v3".format(_keystone_ip)
_os_tenantname = "admin"
_os_username = "admin"
_os_password = "admin"
@@ -77,6 +77,8 @@ class ODLTesting(unittest.TestCase):
_odl_restconfport = "8181"
_odl_username = "admin"
_odl_password = "admin"
+ _os_userdomainname = 'Default'
+ _os_projectdomainname = 'Default'
def setUp(self):
for var in ("INSTALLER_TYPE", "SDN_CONTROLLER", "SDN_CONTROLLER_IP"):
@@ -84,15 +86,20 @@ class ODLTesting(unittest.TestCase):
del os.environ[var]
os.environ["OS_AUTH_URL"] = self._os_auth_url
os.environ["OS_USERNAME"] = self._os_username
+ os.environ["OS_USER_DOMAIN_NAME"] = self._os_userdomainname
os.environ["OS_PASSWORD"] = self._os_password
os.environ["OS_TENANT_NAME"] = self._os_tenantname
+ os.environ["OS_PROJECT_DOMAIN_NAME"] = self._os_projectdomainname
+ os.environ["OS_PASSWORD"] = self._os_password
self.test = odl.ODLTests(case_name='odl', project_name='functest')
self.defaultargs = {'odlusername': self._odl_username,
'odlpassword': self._odl_password,
'neutronip': self._keystone_ip,
'osauthurl': self._os_auth_url,
'osusername': self._os_username,
+ 'osuserdomainname': self._os_userdomainname,
'ostenantname': self._os_tenantname,
+ 'osprojectdomainname': self._os_projectdomainname,
'ospassword': self._os_password,
'odlip': self._keystone_ip,
'odlwebport': self._odl_webport,
@@ -211,7 +218,9 @@ class ODLMainTesting(ODLTesting):
'neutronip': self._neutron_ip,
'osauthurl': self._os_auth_url,
'osusername': self._os_username,
+ 'osuserdomainname': self._os_userdomainname,
'ostenantname': self._os_tenantname,
+ 'osprojectdomainname': self._os_projectdomainname,
'ospassword': self._os_password,
'odlip': self._sdn_controller_ip,
'odlwebport': self._odl_webport,
@@ -231,7 +240,11 @@ class ODLMainTesting(ODLTesting):
'NEUTRON:{}'.format(self._neutron_ip),
'OS_AUTH_URL:"{}"'.format(self._os_auth_url),
'OSUSERNAME:"{}"'.format(self._os_username),
+ 'OSUSERDOMAINNAME:"{}"'.format(
+ self._os_userdomainname),
'OSTENANTNAME:"{}"'.format(self._os_tenantname),
+ 'OSPROJECTDOMAINNAME:"{}"'.format(
+ self._os_projectdomainname),
'OSPASSWORD:"{}"'.format(self._os_password),
'ODL_SYSTEM_IP:{}'.format(self._sdn_controller_ip),
'PORT:{}'.format(self._odl_webport),
@@ -383,7 +396,9 @@ class ODLRunTesting(ODLTesting):
odlusername=self._odl_username, odlwebport=odlwebport,
osauthurl=self._os_auth_url,
ospassword=self._os_password, ostenantname=self._os_tenantname,
- osusername=self._os_username)
+ osusername=self._os_username,
+ osprojectdomainname=self._os_projectdomainname,
+ osuserdomainname=self._os_userdomainname)
def _test_multiple_suites(self, suites,
status=testcase.TestCase.EX_OK, **kwargs):
@@ -404,7 +419,9 @@ class ODLRunTesting(ODLTesting):
odlusername=self._odl_username, odlwebport=odlwebport,
osauthurl=self._os_auth_url,
ospassword=self._os_password, ostenantname=self._os_tenantname,
- osusername=self._os_username)
+ osusername=self._os_username,
+ osprojectdomainname=self._os_projectdomainname,
+ osuserdomainname=self._os_userdomainname)
def test_exc(self):
with mock.patch('functest.utils.openstack_utils.get_endpoint',
@@ -462,7 +479,8 @@ class ODLRunTesting(ODLTesting):
def test_fuel(self):
os.environ["INSTALLER_TYPE"] = "fuel"
self._test_run(testcase.TestCase.EX_OK,
- odlip=self._neutron_ip, odlwebport='8282')
+ odlip=self._neutron_ip, odlwebport='8181',
+ odlrestconfport='8282')
def test_apex_no_controller_ip(self):
with mock.patch('functest.utils.openstack_utils.get_endpoint',
@@ -578,9 +596,15 @@ class ODLArgParserTesting(ODLTesting):
def test_osusername(self):
self._test_arg('osusername', 'foo')
+ def test_osuserdomainname(self):
+ self._test_arg('osuserdomainname', 'domain')
+
def test_ostenantname(self):
self._test_arg('ostenantname', 'foo')
+ def test_osprojectdomainname(self):
+ self._test_arg('osprojectdomainname', 'domain')
+
def test_ospassword(self):
self._test_arg('ospassword', 'foo')
diff --git a/functest/tests/unit/openstack/refstack_client/test_refstack_client.py b/functest/tests/unit/openstack/refstack_client/test_refstack_client.py
index ca0974832..61e950a6b 100644
--- a/functest/tests/unit/openstack/refstack_client/test_refstack_client.py
+++ b/functest/tests/unit/openstack/refstack_client/test_refstack_client.py
@@ -1,11 +1,14 @@
#!/usr/bin/env python
+
# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
-# matthew.lijun@huawei.com wangwulin@huawei.com
+#
# 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
+# pylint: disable=missing-docstring
+
import logging
import mock
import pkg_resources
@@ -18,8 +21,13 @@ from functest.utils.constants import CONST
from snaps.openstack.os_credentials import OSCreds
+__author__ = ("Matthew Li <matthew.lijun@huawei.com>,"
+ "Linda Wang <wangwulin@huawei.com>")
+
class OSRefstackClientTesting(unittest.TestCase):
+ """The class testing RefstackClient """
+ # pylint: disable=missing-docstring, too-many-public-methods
_config = pkg_resources.resource_filename(
'functest',
@@ -32,13 +40,20 @@ class OSRefstackClientTesting(unittest.TestCase):
'testlist': self._testlist}
CONST.__setattr__('OS_AUTH_URL', 'https://ip:5000/v3')
CONST.__setattr__('OS_INSECURE', 'true')
+ self.case_name = 'refstack_defcore'
+ self.result = 0
self.os_creds = OSCreds(
username='user', password='pass',
auth_url='http://foo.com:5000/v3', project_name='bar')
+ self.details = {"tests": 3,
+ "failures": 1,
+ "success": ['tempest.api.compute [18.464988s]'],
+ "errors": ['tempest.api.volume [0.230334s]'],
+ "skipped": ['tempest.api.network [1.265828s]']}
@mock.patch('functest.opnfv_tests.openstack.refstack_client.tempest_conf.'
'TempestConf', return_value=mock.Mock())
- def _create_client(self, mock_conf):
+ def _create_client(self, *args):
with mock.patch('snaps.openstack.tests.openstack_tests.'
'get_credentials', return_value=self.os_creds):
return RefstackClient()
@@ -49,11 +64,11 @@ class OSRefstackClientTesting(unittest.TestCase):
testlist = 'testlist'
client = self._create_client()
with mock.patch('functest.opnfv_tests.openstack.refstack_client.'
- 'refstack_client.ft_utils.execute_command') as m:
+ 'refstack_client.ft_utils.execute_command') as m_cmd:
cmd = ("refstack-client test {0} -c {1} -v --test-list {2}"
.format(insecure, config, testlist))
client.run_defcore(config, testlist)
- m.assert_any_call(cmd)
+ m_cmd.assert_any_call(cmd)
def test_run_defcore(self):
CONST.__setattr__('OS_AUTH_URL', 'http://ip:5000/v3')
@@ -62,25 +77,22 @@ class OSRefstackClientTesting(unittest.TestCase):
testlist = 'testlist'
client = self._create_client()
with mock.patch('functest.opnfv_tests.openstack.refstack_client.'
- 'refstack_client.ft_utils.execute_command') as m:
+ 'refstack_client.ft_utils.execute_command') as m_cmd:
cmd = ("refstack-client test {0} -c {1} -v --test-list {2}"
.format(insecure, config, testlist))
client.run_defcore(config, testlist)
- m.assert_any_call(cmd)
+ m_cmd.assert_any_call(cmd)
@mock.patch('functest.opnfv_tests.openstack.refstack_client.'
'refstack_client.LOGGER.info')
@mock.patch('__builtin__.open', side_effect=Exception)
- def test_parse_refstack_result_missing_log_file(self, mock_open,
- mock_logger_info):
- self.case_name = 'refstack_defcore'
- self.result = 0
+ def test_parse_refstack_result_fail(self, *args):
self._create_client().parse_refstack_result()
- mock_logger_info.assert_called_once_with(
+ args[1].assert_called_once_with(
"Testcase %s success_rate is %s%%",
self.case_name, self.result)
- def test_parse_refstack_result_default(self):
+ def test_parse_refstack_result_ok(self):
log_file = ('''
{0} tempest.api.compute [18.464988s] ... ok
{0} tempest.api.volume [0.230334s] ... FAILED
@@ -90,11 +102,6 @@ class OSRefstackClientTesting(unittest.TestCase):
- Skipped: 1
- Failed: 1
''')
- self.details = {"tests": 3,
- "failures": 1,
- "success": ['tempest.api.compute [18.464988s]'],
- "errors": ['tempest.api.volume [0.230334s]'],
- "skipped": ['tempest.api.network [1.265828s]']}
client = self._create_client()
with mock.patch('__builtin__.open',
mock.mock_open(read_data=log_file)):
@@ -108,16 +115,6 @@ class OSRefstackClientTesting(unittest.TestCase):
del kwargs[key]
return kwargs
- def _test_main(self, status, *args):
- kwargs = self._get_main_kwargs()
- client = self._create_client()
- self.assertEqual(client.main(**kwargs), status)
- if len(args) > 0:
- args[0].assert_called_once_with(
- RefstackClient.result_dir)
- if len(args) > 1:
- args
-
def _test_main_missing_keyword(self, key):
kwargs = self._get_main_kwargs(key)
client = self._create_client()
diff --git a/functest/tests/unit/openstack/tempest/test_conf_utils.py b/functest/tests/unit/openstack/tempest/test_conf_utils.py
index 9df97b4c7..50b0edc60 100644
--- a/functest/tests/unit/openstack/tempest/test_conf_utils.py
+++ b/functest/tests/unit/openstack/tempest/test_conf_utils.py
@@ -159,9 +159,23 @@ class OSTempestConfUtilsTesting(unittest.TestCase):
def test_backup_tempest_config_default(self):
with mock.patch('functest.opnfv_tests.openstack.tempest.'
- 'conf_utils.shutil.copyfile') as m1:
+ 'conf_utils.os.path.exists',
+ return_value=False), \
+ mock.patch('functest.opnfv_tests.openstack.tempest.'
+ 'conf_utils.os.makedirs') as m1, \
+ mock.patch('functest.opnfv_tests.openstack.tempest.'
+ 'conf_utils.shutil.copyfile') as m2:
conf_utils.backup_tempest_config('test_conf_file')
self.assertTrue(m1.called)
+ self.assertTrue(m2.called)
+
+ with mock.patch('functest.opnfv_tests.openstack.tempest.'
+ 'conf_utils.os.path.exists',
+ return_value=True), \
+ mock.patch('functest.opnfv_tests.openstack.tempest.'
+ 'conf_utils.shutil.copyfile') as m2:
+ conf_utils.backup_tempest_config('test_conf_file')
+ self.assertTrue(m2.called)
def test_configure_tempest_default(self):
with mock.patch('functest.opnfv_tests.openstack.tempest.'
diff --git a/functest/tests/unit/openstack/tempest/test_tempest.py b/functest/tests/unit/openstack/tempest/test_tempest.py
index 54d7d49bb..6fe103f18 100644
--- a/functest/tests/unit/openstack/tempest/test_tempest.py
+++ b/functest/tests/unit/openstack/tempest/test_tempest.py
@@ -171,6 +171,19 @@ class OSTempestTesting(unittest.TestCase):
@mock.patch('functest.opnfv_tests.openstack.tempest.tempest.os.makedirs')
@mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
'TempestResourcesManager.create', return_value={})
+ @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
+ 'get_active_compute_cnt', side_effect=Exception)
+ def test_run_get_active_compute_cnt_ko(self, *args):
+ self.assertEqual(self.tempestcommon.run(),
+ testcase.TestCase.EX_RUN_ERROR)
+
+ @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
+ 'os.path.exists', return_value=False)
+ @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.os.makedirs')
+ @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
+ 'TempestResourcesManager.create', return_value={})
+ @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
+ 'get_active_compute_cnt', return_value=2)
@mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
'conf_utils.configure_tempest', side_effect=Exception)
def test_run_configure_tempest_ko(self, *args):
@@ -182,6 +195,8 @@ class OSTempestTesting(unittest.TestCase):
@mock.patch('functest.opnfv_tests.openstack.tempest.tempest.os.makedirs')
@mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
'TempestResourcesManager.create', return_value={})
+ @mock.patch('functest.opnfv_tests.openstack.snaps.snaps_utils.'
+ 'get_active_compute_cnt', return_value=2)
@mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
'conf_utils.configure_tempest')
def _test_run(self, status, *args):
diff --git a/functest/tests/unit/vnf/ims/test_cloudify_ims.py b/functest/tests/unit/vnf/ims/test_cloudify_ims.py
index f0483c69f..cdd657aac 100644
--- a/functest/tests/unit/vnf/ims/test_cloudify_ims.py
+++ b/functest/tests/unit/vnf/ims/test_cloudify_ims.py
@@ -13,8 +13,6 @@ import mock
from functest.core import vnf
from functest.opnfv_tests.vnf.ims import cloudify_ims
-from snaps.openstack.os_credentials import OSCreds
-
class CloudifyImsTesting(unittest.TestCase):
@@ -57,114 +55,10 @@ class CloudifyImsTesting(unittest.TestCase):
'vnf': {},
'test_vnf': {}}
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- return_value='test')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_or_create_user_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_credentials',
- return_value={'auth_url': 'test/v1'})
- @mock.patch('snaps.openstack.create_image.OpenStackImage.create')
- def test_prepare_default(self, *args):
- self.assertIsNone(self.ims_vnf.prepare())
- args[4].assert_called_once_with()
-
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- return_value='test')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_or_create_user_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_credentials',
- return_value={'auth_url': 'test/no_v'})
- @mock.patch('snaps.openstack.create_image.OpenStackImage.create')
- def test_prepare_bad_auth_url(self, *args):
- with self.assertRaises(Exception):
- self.ims_vnf.image_creator(
- OSCreds(username='user', password='pass', auth_url='url',
- project_name='project', identity_api_version=3),
- mock.Mock())
- args[0].assert_not_called()
-
def test_prepare_missing_param(self):
with self.assertRaises(vnf.VnfPreparationException):
self.ims_vnf.prepare()
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- side_effect=Exception)
- def test_prepare_keystone_exception(self, *args):
- with self.assertRaises(vnf.VnfPreparationException):
- self.ims_vnf.prepare()
- args[0].assert_called_once_with()
-
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- return_value='test')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- side_effect=Exception)
- def test_prepare_tenant_exception(self, *args):
- with self.assertRaises(vnf.VnfPreparationException):
- self.ims_vnf.prepare()
- args[1].assert_called_once_with()
-
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- return_value='test')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_or_create_user_for_vnf',
- side_effect=Exception)
- def test_prepare_user_exception(self, *args):
- with self.assertRaises(vnf.VnfPreparationException):
- self.ims_vnf.prepare()
- args[2].assert_called_once_with()
-
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- return_value='test')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_or_create_user_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_credentials',
- side_effect=Exception)
- def test_prepare_credentials_exception(self, *args):
- with self.assertRaises(vnf.VnfPreparationException):
- self.ims_vnf.prepare()
- args[0].assert_called_once_with()
-
- # @mock.patch('snaps.openstack.create_keypairs.OpenStackKeypair',
- # side_effect=Exception)
- # def test_deploy_orchestrator_keypair_exception(self, *args):
- # with self.assertRaises(vnf.OrchestratorDeploymentException):
- # self.ims_vnf.deploy_orchestrator()
-
- # def test_deploy_orchestrator_network_creation_fail(self):
- # def test_deploy_orchestrator_floatting_ip_creation_fail(self):
- # def test_deploy_orchestrator_flavor_fail(self):
- # def test_deploy_orchestrator_get_image_id_fail(self):
- # def test_deploy_orchestrator_create_instance_fail(self):
- # def test_deploy_orchestrator_secgroup_fail(self):
- # def test_deploy_orchestrator_add_floating_ip_fail(self):
- # def test_deploy_orchestrator_get_endpoint_fail(self):
- # def test_deploy_orchestrator_initiate CloudifyClient_fail(self):
- # def test_deploy_orchestrator_get_status_fail(self):
- #
-
- # def test_deploy_vnf(self):
- # def test_deploy_vnf_publish_fail(self):
- # def test_deploy_vnf_get_flavor_fail(self):
- # def test_deploy_vnf_get_external_net_fail(self):
- # def test_deploy_vnf_deployment_create_fail(self):
- # def test_deploy_vnf_start_fail(self):
- #
- # def test_test_vnf(self):
- # def test_test_vnf_deployment_get_fail(self):
- # def test_test_vnf_run_live_test_fail(self):
- #
- # def test_clean(self):
- # def test_clean_execution_start_fail(self):
- # def test_clean_deployment_delete_fail(self):
- # def test_clean_blueprint_delete_fail(self):
-
if __name__ == "__main__":
logging.disable(logging.CRITICAL)
diff --git a/functest/tests/unit/vnf/ims/test_orchestra_clearwaterims.py b/functest/tests/unit/vnf/ims/test_orchestra_clearwaterims.py
index ef227ca43..2e83f30a4 100644
--- a/functest/tests/unit/vnf/ims/test_orchestra_clearwaterims.py
+++ b/functest/tests/unit/vnf/ims/test_orchestra_clearwaterims.py
@@ -11,7 +11,6 @@ import logging
import unittest
import mock
-from snaps.openstack.os_credentials import OSCreds
from functest.core import vnf
from functest.opnfv_tests.vnf.ims import orchestra_clearwaterims
@@ -110,117 +109,11 @@ class OrchestraClearwaterImsTesting(unittest.TestCase):
'vnf': {},
'test_vnf': {}}
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- return_value='test')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_or_create_user_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_credentials',
- return_value={'auth_url': 'test/v1'})
- @mock.patch(
- 'functest.utils.openstack_utils.get_tenant_id',
- return_value={'mocked_tenant_id'})
- @mock.patch(
- 'functest.utils.openstack_utils.get_floating_ips',
- return_value=[])
- @mock.patch('snaps.openstack.create_image.OpenStackImage.create')
- @mock.patch('snaps.openstack.create_flavor.OpenStackFlavor.create')
- @mock.patch(
- 'snaps.openstack.create_security_group.OpenStackSecurityGroup.create')
- @mock.patch('snaps.openstack.create_network.OpenStackNetwork.create')
- @mock.patch('snaps.openstack.create_router.OpenStackRouter.create')
- @mock.patch(
- 'functest.opnfv_tests.openstack.snaps.snaps_utils.get_ext_net_name')
- @mock.patch(
- 'functest.opnfv_tests.openstack.snaps.'
- 'snaps_utils.neutron_utils.create_floating_ip')
- def test_prepare_default(self, *args):
- """Testing prepare function without any exceptions expected"""
- self.assertIsNone(self.ims_vnf.prepare())
- args[4].assert_called_once_with()
-
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- return_value='test')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_or_create_user_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_credentials',
- return_value={'auth_url': 'test/no_v'})
- @mock.patch('snaps.openstack.create_image.OpenStackImage.create')
- def test_prepare_bad_auth_url(self, *args):
- """Testing prepare function with bad auth url"""
- with self.assertRaises(Exception):
- self.ims_vnf.image_creator(
- OSCreds(username='user', password='pass', auth_url='url',
- project_name='project', identity_api_version=3),
- mock.Mock())
- args[0].assert_not_called()
-
def test_prepare_missing_param(self):
"""Testing prepare function with missing param"""
with self.assertRaises(vnf.VnfPreparationException):
self.ims_vnf.prepare()
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- side_effect=Exception)
- def test_prepare_keystone_exception(self, *args):
- """Testing prepare function with keystone exception"""
- with self.assertRaises(vnf.VnfPreparationException):
- self.ims_vnf.prepare()
- args[0].assert_called_once_with()
-
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- return_value='test')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- side_effect=Exception)
- def test_prepare_tenant_exception(self, *args):
- """Testing prepare function with tenant exception"""
- with self.assertRaises(vnf.VnfPreparationException):
- self.ims_vnf.prepare()
- args[1].assert_called_once_with()
-
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- return_value='test')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_or_create_user_for_vnf',
- side_effect=Exception)
- def test_prepare_user_exception(self, *args):
- """Testing prepare function with user exception"""
- with self.assertRaises(vnf.VnfPreparationException):
- self.ims_vnf.prepare()
- args[2].assert_called_once_with()
-
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- return_value='test')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_or_create_user_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_credentials',
- side_effect=Exception)
- def test_prepare_credentials_exception(self, *args):
- """Testing prepare function with credentials exception"""
- with self.assertRaises(vnf.VnfPreparationException):
- self.ims_vnf.prepare()
- args[0].assert_called_once_with()
-
- # # @mock.patch('functest.opnfv_tests.vnf.
- # ims.orchestra_clearwaterims.get_userdata')
- # def test_deploy_orchestrator(self, *args):
- # floating_ip = FloatingIp
- # floating_ip.ip = 'mocked_ip'
- # details = {'fip':floating_ip,'flavor':{'name':'mocked_name'}}
- # self.mano['details'] = details
- # with mock.patch.dict(self.mano, {'details':
- # {'fip':floating_ip,'flavor':{'name':'mocked_name'}}}):
- # # with mock.patch.dict(self.mano, details):
- # orchestra_clearwaterims.get_userdata(self.mano)
- # self.assertIsNone(self.ims_vnf.deploy_orchestrator())
- # args[4].assert_called_once_with()
-
if __name__ == "__main__":
logging.disable(logging.CRITICAL)
diff --git a/functest/tests/unit/vnf/ims/test_orchestra_openims.py b/functest/tests/unit/vnf/ims/test_orchestra_openims.py
index 5911cf77b..47a8d0338 100644
--- a/functest/tests/unit/vnf/ims/test_orchestra_openims.py
+++ b/functest/tests/unit/vnf/ims/test_orchestra_openims.py
@@ -11,7 +11,6 @@ import logging
import unittest
import mock
-from snaps.openstack.os_credentials import OSCreds
from functest.core import vnf
from functest.opnfv_tests.vnf.ims import orchestra_openims
@@ -112,117 +111,11 @@ class OrchestraOpenImsTesting(unittest.TestCase):
'vnf': {},
'test_vnf': {}}
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- return_value='test')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_or_create_user_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_credentials',
- return_value={'auth_url': 'test/v1'})
- @mock.patch(
- 'functest.utils.openstack_utils.get_tenant_id',
- return_value={'mocked_tenant_id'})
- @mock.patch(
- 'functest.utils.openstack_utils.get_floating_ips',
- return_value=[])
- @mock.patch('snaps.openstack.create_image.OpenStackImage.create')
- @mock.patch('snaps.openstack.create_flavor.OpenStackFlavor.create')
- @mock.patch(
- 'snaps.openstack.create_security_group.OpenStackSecurityGroup.create')
- @mock.patch('snaps.openstack.create_network.OpenStackNetwork.create')
- @mock.patch('snaps.openstack.create_router.OpenStackRouter.create')
- @mock.patch(
- 'functest.opnfv_tests.openstack.snaps.snaps_utils.get_ext_net_name')
- @mock.patch(
- 'functest.opnfv_tests.openstack.snaps.snaps_utils.'
- 'neutron_utils.create_floating_ip')
- def test_prepare_default(self, *args):
- """Testing prepare function without any exceptions expected"""
- self.assertIsNone(self.ims_vnf.prepare())
- args[4].assert_called_once_with()
-
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- return_value='test')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_or_create_user_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_credentials',
- return_value={'auth_url': 'test/no_v'})
- @mock.patch('snaps.openstack.create_image.OpenStackImage.create')
- def test_prepare_bad_auth_url(self, *args):
- """Testing prepare function with bad auth url"""
- with self.assertRaises(Exception):
- self.ims_vnf.image_creator(
- OSCreds(username='user', password='pass', auth_url='url',
- project_name='project', identity_api_version=3),
- mock.Mock())
- args[0].assert_not_called()
-
def test_prepare_missing_param(self):
"""Testing prepare function with missing param"""
with self.assertRaises(vnf.VnfPreparationException):
self.ims_vnf.prepare()
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- side_effect=Exception)
- def test_prepare_keystone_exception(self, *args):
- """Testing prepare function with keystone exception"""
- with self.assertRaises(vnf.VnfPreparationException):
- self.ims_vnf.prepare()
- args[0].assert_called_once_with()
-
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- return_value='test')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- side_effect=Exception)
- def test_prepare_tenant_exception(self, *args):
- """Testing prepare function with tenant exception"""
- with self.assertRaises(vnf.VnfPreparationException):
- self.ims_vnf.prepare()
- args[1].assert_called_once_with()
-
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- return_value='test')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_or_create_user_for_vnf',
- side_effect=Exception)
- def test_prepare_user_exception(self, *args):
- """Testing prepare function with user exception"""
- with self.assertRaises(vnf.VnfPreparationException):
- self.ims_vnf.prepare()
- args[2].assert_called_once_with()
-
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- return_value='test')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_or_create_user_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_credentials',
- side_effect=Exception)
- def test_prepare_credentials_exception(self, *args):
- """Testing prepare function with credentials exception"""
- with self.assertRaises(vnf.VnfPreparationException):
- self.ims_vnf.prepare()
- args[0].assert_called_once_with()
-
- # # @mock.patch('functest.opnfv_tests.
- # vnf.ims.orchestra_openims.get_userdata')
- # def test_deploy_orchestrator(self, *args):
- # floating_ip = FloatingIp
- # floating_ip.ip = 'mocked_ip'
- # details = {'fip':floating_ip,'flavor':{'name':'mocked_name'}}
- # self.mano['details'] = details
- # with mock.patch.dict(self.mano, {'details':
- # {'fip':floating_ip,'flavor':{'name':'mocked_name'}}}):
- # # with mock.patch.dict(self.mano, details):
- # orchestra_openims.get_userdata(self.mano)
- # self.assertIsNone(self.ims_vnf.deploy_orchestrator())
- # args[4].assert_called_once_with()
-
if __name__ == "__main__":
logging.disable(logging.CRITICAL)
diff --git a/functest/tests/unit/vnf/router/test_cloudify_vrouter.py b/functest/tests/unit/vnf/router/test_cloudify_vrouter.py
index 7f2091be1..4f256234b 100644
--- a/functest/tests/unit/vnf/router/test_cloudify_vrouter.py
+++ b/functest/tests/unit/vnf/router/test_cloudify_vrouter.py
@@ -15,8 +15,6 @@ import mock
from functest.core import vnf
from functest.opnfv_tests.vnf.router import cloudify_vrouter
-from snaps.openstack.os_credentials import OSCreds
-
class CloudifyVrouterTesting(unittest.TestCase):
@@ -60,80 +58,10 @@ class CloudifyVrouterTesting(unittest.TestCase):
'vnf': {},
'test_vnf': {}}
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- return_value='test')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_or_create_user_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_credentials',
- return_value={'auth_url': 'test/v1'})
- @mock.patch('snaps.openstack.create_image.OpenStackImage.create')
- def test_prepare_default(self, *args):
- self.assertIsNone(self.router_vnf.prepare())
- args[4].assert_called_once_with()
-
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- return_value='test')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_or_create_user_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_credentials',
- return_value={'auth_url': 'test/no_v'})
- @mock.patch('snaps.openstack.create_image.OpenStackImage.create')
- def test_prepare_bad_auth_url(self, *args):
- with self.assertRaises(Exception):
- self.router_vnf.image_creator(
- OSCreds(username='user', password='pass', auth_url='url',
- project_name='project', identity_api_version=3),
- mock.Mock())
- args[0].assert_not_called()
-
def test_prepare_missing_param(self):
with self.assertRaises(vnf.VnfPreparationException):
self.router_vnf.prepare()
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- side_effect=Exception)
- def test_prepare_keystone_exception(self, *args):
- with self.assertRaises(vnf.VnfPreparationException):
- self.router_vnf.prepare()
- args[0].assert_called_once_with()
-
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- return_value='test')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- side_effect=Exception)
- def test_prepare_tenant_exception(self, *args):
- with self.assertRaises(vnf.VnfPreparationException):
- self.router_vnf.prepare()
- args[1].assert_called_once_with()
-
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- return_value='test')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_or_create_user_for_vnf',
- side_effect=Exception)
- def test_prepare_user_exception(self, *args):
- with self.assertRaises(vnf.VnfPreparationException):
- self.router_vnf.prepare()
- args[2].assert_called_once_with()
-
- @mock.patch('functest.core.vnf.os_utils.get_keystone_client',
- return_value='test')
- @mock.patch('functest.core.vnf.os_utils.get_or_create_tenant_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_or_create_user_for_vnf',
- return_value=True)
- @mock.patch('functest.core.vnf.os_utils.get_credentials',
- side_effect=Exception)
- def test_prepare_credentials_exception(self, *args):
- with self.assertRaises(vnf.VnfPreparationException):
- self.router_vnf.prepare()
- args[0].assert_called_once_with()
-
if __name__ == "__main__":
logging.disable(logging.CRITICAL)
diff --git a/functest/utils/functest_utils.py b/functest/utils/functest_utils.py
index e4062373c..f07f59d7f 100644
--- a/functest/utils/functest_utils.py
+++ b/functest/utils/functest_utils.py
@@ -227,14 +227,14 @@ def get_ci_envvars():
def execute_command_raise(cmd, info=False, error_msg="",
- verbose=True, output_file=None, env=None):
- ret = execute_command(cmd, info, error_msg, verbose, output_file, env)
+ verbose=True, output_file=None):
+ ret = execute_command(cmd, info, error_msg, verbose, output_file)
if ret != 0:
raise Exception(error_msg)
def execute_command(cmd, info=False, error_msg="",
- verbose=True, output_file=None, env=None):
+ verbose=True, output_file=None):
if not error_msg:
error_msg = ("The command '%s' failed." % cmd)
msg_exec = ("Executing command: '%s'" % cmd)
@@ -243,7 +243,7 @@ def execute_command(cmd, info=False, error_msg="",
logger.info(msg_exec)
else:
logger.debug(msg_exec)
- p = subprocess.Popen(cmd, env=env, shell=True, stdout=subprocess.PIPE,
+ p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
if output_file:
f = open(output_file, "w")
diff --git a/functest/utils/openstack_utils.py b/functest/utils/openstack_utils.py
index 73d1cde49..f211627a5 100644
--- a/functest/utils/openstack_utils.py
+++ b/functest/utils/openstack_utils.py
@@ -1195,8 +1195,13 @@ def get_image_id(glance_client, image_name):
return id
-def create_glance_image(glance_client, image_name, file_path, disk="qcow2",
- container="bare", public="public"):
+def create_glance_image(glance_client,
+ image_name,
+ file_path,
+ disk="qcow2",
+ extra_properties={},
+ container="bare",
+ public="public"):
if not os.path.isfile(file_path):
logger.error("Error: file %s does not exist." % file_path)
return None
@@ -1211,7 +1216,8 @@ def create_glance_image(glance_client, image_name, file_path, disk="qcow2",
image = glance_client.images.create(name=image_name,
visibility=public,
disk_format=disk,
- container_format=container)
+ container_format=container,
+ **extra_properties)
image_id = image.id
with open(file_path) as image_data:
glance_client.images.upload(image_id, image_data)
@@ -1222,7 +1228,7 @@ def create_glance_image(glance_client, image_name, file_path, disk="qcow2",
return None
-def get_or_create_image(name, path, format):
+def get_or_create_image(name, path, format, extra_properties):
image_exists = False
glance_client = get_glance_client()
@@ -1232,7 +1238,11 @@ def get_or_create_image(name, path, format):
image_exists = True
else:
logger.info("Creating image '%s' from '%s'..." % (name, path))
- image_id = create_glance_image(glance_client, name, path, format)
+ image_id = create_glance_image(glance_client,
+ name,
+ path,
+ format,
+ extra_properties)
if not image_id:
logger.error("Failed to create a Glance image...")
else:
@@ -1561,62 +1571,3 @@ def get_resource(heat_client, stack_id, resource):
except Exception as e:
logger.error("Error [get_resource]: %s" % e)
return None
-
-
-# *********************************************
-# TEMPEST
-# *********************************************
-def init_tempest_cleanup(tempest_config_dir=None,
- tempest_config_filename='tempest.conf',
- output_file=None):
- """
- Initialize the Tempest Cleanup utility.
- See https://docs.openstack.org/tempest/latest/cleanup.html for docs.
-
- :param tempest_config_dir: The directory where the Tempest config file is
- located. If not specified, we let Tempest pick both the directory
- and the filename (i.e. second parameter is ignored)
- :param tempest_config_filename: The filename of the Tempest config file
- :param output_file: Optional file where to save output
- """
- # The Tempest cleanup utility currently offers no cmd argument to specify
- # the config file, therefore it has to be configured with env variables
- env = None
- if tempest_config_dir:
- env = os.environ.copy()
- env['TEMPEST_CONFIG_DIR'] = tempest_config_dir
- env['TEMPEST_CONFIG'] = tempest_config_filename
-
- # If this command fails, an exception must be raised to stop the script
- # otherwise the later cleanup would destroy also other resources
- cmd_line = "tempest cleanup --init-saved-state"
- ft_utils.execute_command_raise(cmd_line, env=env, output_file=output_file,
- error_msg="Tempest cleanup init failed")
-
-
-def perform_tempest_cleanup(tempest_config_dir=None,
- tempest_config_filename='tempest.conf',
- output_file=None):
- """
- Perform cleanup using the Tempest Cleanup utility.
- See https://docs.openstack.org/tempest/latest/cleanup.html for docs.
-
- :param tempest_config_dir: The directory where the Tempest config file is
- located. If not specified, we let Tempest pick both the directory
- and the filename (i.e. second parameter is ignored)
- :param tempest_config_filename: The filename of the Tempest config file
- :param output_file: Optional file where to save output
- """
- # The Tempest cleanup utility currently offers no cmd argument to specify
- # the config file, therefore it has to be configured with env variables
- env = None
- if tempest_config_dir:
- env = os.environ.copy()
- env['TEMPEST_CONFIG_DIR'] = tempest_config_dir
- env['TEMPEST_CONFIG'] = tempest_config_filename
-
- # If this command fails, an exception must be raised to stop the script
- # otherwise the later cleanup would destroy also other resources
- cmd_line = "tempest cleanup"
- ft_utils.execute_command(cmd_line, env=env, output_file=output_file,
- error_msg="Tempest cleanup failed")